DBA组件---ADO数据库编程利器

DBA组件---ADO数据库编程利器

一、何谓DBA
    DBA即Database Assistant,其实就是数据库编程助手。它是完全采用接口、OO理念用VB6.0编译的DLL COM组件。
    它的好处在于使数据库的编程和维护都仅仅在表现层,便于数据库字段的反复增减,修改(客户需求无常),使代码更为规范,
    也使得程序的总体代码减少,运行效率提高。

二、DBA的功能
    DBA主要有四大特色功能:
    1、自动生成对数据库中单个表的新增、更新SQL语句,并完成其操作
    2、提供对外扩展的接口ifaceDbConnectionBuilder,可以实现对任何数据库的操作(只要ADO允许)
    3、提供安全可靠、简单易用的用户、角色、权限访问体系
    4、提供对字串的加密、解密,支持中文密码,加密长度可以是32位、64位、128位

三、DBA的使用
          A〉配置INI文件
       DBA与数据库的连接,依赖于INI文件的配置。要求在项目的当前路径下建立与执行文件同名,且节名也与执行文件同名的INI文件。
       如:执行文件为myPrj.exe,则INI文件必须为myPrj.ini,且与myPrj.exe位于相同路径。使用默认连接时,INI文件中必须包含
       以下节(以SQL Server配置为例):
       '********* myPrj.ini *********
       [myPrj]
       SpecialIniFilePath=

 ServerName=AppSrv
       DatabaseName=AppDb
       UserID=07AIQY6Vow5xph2075bjrz7uPX4WOG7767CKS08Tqy3vnf5013dlt19sRZ2UME67
       UserPassword=066EMU2Zs91tld929E3fnv3yT80SKC67667GOW4Xu7zrjb49653hpx5wV6YQIA77
       Timeout=100

 如果是Access,则INI文件配置应如下示
       '********* myPrj.ini *********
       [myPrj]
       SpecialIniFilePath=

 DatabaseName=d:/db1.mdb
       DatabasePassword=
       SystemDatabase=
       UserID=Admin
       UserPassword=
       Timeout=100

 如果想自由配置节内容如下也行,此时你将不能使用默认方式打开数据库,而必须实现ifaceDbConnectionBuilder接口,
       然后以指定方式打开数据库,详见C(2)所叙,这也是打开其它数据库的方法!
       '********* myPrj.ini *********
       [myPrj]
       SpecialIniFilePath=

 服务器=AppSrv
       数据库=AppDb
       用户=07AIQY6Vow5xph2075bjrz7uPX4WOG7767CKS08Tqy3vnf5013dlt19sRZ2UME67
       密码=066EMU2Zs91tld929E3fnv3yT80SKC67667GOW4Xu7zrjb49653hpx5wV6YQIA77
       超时=100

    B〉DBA注册、引用
       DBA是用VB6.0编写DLL COM组件,所以需先将DBA注册然后再引用到项目工程中(如是VB6项目则可直接引用,VB6会自动完成注册)

    C〉DBA四大功能的使用
       以下描述均以SQL Server为例,为此你需要建立最基本的数据库表,请在SQL查询分析器运行附件中的脚本CreateDbTable.sql,
       下面就四大功能的使用,作简要的说明:
       1、自动生成对数据库中单个表的新增、更新SQL语句,并完成其操作
          现假定对数据库表sys_User实现新增、更新操作,界面控件从略,其规范代码如下
          '代码是用自己写的代码生成器生成,你也自己写一个,编程就会变得轻松美妙。。。

  1. '初始化
  2. Private Sub IniFieldValue(dt As ifaceDbTable)
  3.     dt.AddField "UserID", Character, "", 25
  4.     dt.AddField "UserName", Character, "", 50
  5.     dt.AddField "UserPwd", Character, "", 50
  6.     dt.AddField "LastModifyDate", Character, "", 8
  7. End Sub
  8. '设定DbTable字段值
  9. Private Sub SetFieldValue(dt As ifaceDbTable)
  10.     dt.AddField "UserID", Character, Me.txtUserID.Text, 25
  11.     dt.AddField "UserName", Character, Me.txtUserName.Text, 50
  12.     dt.AddField "UserPwd", Character, Me.txtUserPwd.Text, 50
  13.     dt.AddField "LastModifyDate", Character, Me.txtLastModifyDate.Text, 8
  14. End Sub
  15. '获取DbTable字段值,并赋值给界面控件
  16. Private Sub GetFieldValue(dt As ifaceDbTable)
  17.     Me.txtUserID.Text = dt.Fields("UserID").FieldValue
  18.     Me.txtUserName.Text = dt.Fields("UserName").FieldValue
  19.     Me.txtUserPwd.Text = dt.Fields("UserPwd").FieldValue
  20.     Me.txtLastModifyDate.Text = dt.Fields("LastModifyDate").FieldValue
  21. End Sub
  22. '新增
  23. Private Sub btnInsertData_Click()
  24.     Dim dt As Dim dt As ifaceDbTable
  25.     Set dt = New clsDbTable
  26.     dt.TableName = "sys_User"
  27.     '请用主键字段名替换PrimaryKeyName
  28.     dt.AddPrimaryKey "SysID", Anyinteger, 0, 4
  29.     SetFieldValue dt
  30.     Dim b As Boolean
  31.     Dim dba As ifaceDBA
  32.     Set dba = New clsDBA
  33.     dba.OpenConnectionByDbType
  34.     b = dba.InsertDataRow(dt)
  35.     dba.Dispose
  36.     Set dba = Nothing
  37.     Set dt = Nothing
  38. End Sub
  39. '更新
  40. Private Sub btnUpdateData_Click()
  41.     Dim dt As Dim dt As ifaceDbTable
  42.     Set dt = New clsDbTable
  43.     dt.TableName = "sys_User"
  44.     '请用主键字段名替换PrimaryKeyName
  45.     dt.AddPrimaryKey "SysID", Anyinteger, Me.txtSysID.Text, 4
  46.     SetFieldValue dt
  47.     Dim b As Boolean
  48.     Dim dba As ifaceDBA
  49.     Set dba = New clsDBA
  50.     dba.OpenConnectionByDbType
  51.     b = dba.UpdateDataRow(dt)
  52.     dba.Dispose
  53.     Set dba = Nothing
  54.     Set dt = Nothing
  55. End Sub
  56. '删除
  57. Private Sub btnDeleteData_Click()
  58.     Dim b As Boolean
  59.     Dim sql As String
  60.     Dim dba As ifaceDBA
  61.     Set dba = New clsDBA
  62.     dba.OpenConnectionByDbType
  63.     sql = "delete from sys_User where SysID=333"
  64.     b = dba.ExecSqlNonQuery(sql)
  65.     dba.Dispose
  66.     Set dba = Nothing
  67. End Sub

       2、自己实现接口ifaceDbConnectionBuilder,操作任何数据库(只要ADO允许)
          假定myPrj.exe要实现对Oracle数据库的操作,可以这样:
          (a)设置myPrj.ini节内容如下
          '********* myPrj.ini *********
          [myPrj]
          SpecialIniFilePath=

    数据源=mySrv
          用户=myName
          用户密码=myPwd
          超时=100

          (b)创建一个新类,不妨命名为clsDbOracleConnString.cls,见下:

  1.           '*************************************************************
  2.           '文件 : clsDbOracleConnString.cls
  3.           '类名 : clsDbOracleConnString
  4.           '功能 : 实现接口ifaceDbConnectionString定义的方法
  5.           '版本 : 1.0
  6.           '*************************************************************
  7.           Option Explicit
  8.           Implements ifaceDbConnectionBuilder   '继承接口
  9.           '构造Oracle数据库连接字串
  10.           Private Function ifaceDbConnectionBuilder_GetConnectionString(IniFile As ifaceIniFile) As String
  11.               Dim conStr As String
  12.               On Error GoTo err_exit
  13.               conStr = "Provider=MSDAORA.1;Data Source=" & IniFile.Items("数据源").KeyValue & _
  14.                        ";User ID=" & IniFile.Items("用户").KeyValue & _
  15.                        ";Password=" & IniFile.Items("用户密码").KeyValue
  16.              
  17.               ifaceDbConnectionBuilder_GetConnectionString = conStr
  18.               Exit Function
  19.     
  20.           err_exit:
  21.               ifaceDbConnectionBuilder_GetConnectionString = ""
  22.           End Function

          上述代码并未对用户名和密码进行加密、解密,你可以使用DBA提供的加密、解密方法,也可以使用自己的加密、解密方法。

          (c)使用如下代码即可对数据库进行操作

  1.           Dim connStr As ifaceDbConnectionBuilder   '定义为接口型
  2.           Set connStr = New clsDbOracleConnString   '创建时指向自己的实现类
  3.     
  4.           Dim dba As ifaceDBA
  5.           Set dba = New clsDBA
  6.           dba.OpenConnectionByBuilder connStr   '注意这里的打开方式
  7.           Dim sql as string
  8.           sql = "select * from sys_User"
  9.           Set MSHFlexGrid1.Recordset = dba.ExecSqlToRecordSet(sql)
  10.           dba.Dispose
  11.           Set dba = Nothing
  12.           set connStr=Nothing

       3、用户、角色、权限的访问

            角色权限保存在数据库表Sys_RoleRight的RightID字段中,权限以字串按如下格式存贮 :000000000000000, 0-无效、1-有效

           从左向右依次为:View、AddNew、Update、Delete、Query、Import、Export、Print、Preview、Submit、Upload、Download、Send、Accept、Reject
            使用如下代码即可对用户角色的访问权限进行控制

  1.       Dim dba As ifaceDBA
  2.       Set dba = New clsDBA
  3.       dba.OpenConnectionByDbType
  4.       Dim usr As ifaceUracUsers
  5.       Set usr = New clsUracUsers
  6.       Set usr.ActiveDBA = dba
  7.       usr.LoadUserRoles UserID   '请用实际用户替换UserID
  8.       usr.Roles.GetRight FormName   '请用实际窗体名或类名替换FormName
  9.       '权限控制
  10.       btnQueryData.Enabled = usr.Roles.AllowView
  11.       btnInsertData.Enabled = usr.Roles.AllowAddNew
  12.       btnUpdateData.Enabled = usr.Roles.AllowUpdate
  13.       btnDeleteData.Enabled = usr.Roles.AllowDelete
  14.       '角色成员访问
  15.       Dim i As Long
  16.       For i = 1 To usr.Roles.Count
  17.           Debug.Print usr.Roles.Items(i).RoleID & " ; " & usr.Roles.Items(i).RoleName
  18.           Debug.Print
  19.       Next i
  20.       Set usr = Nothing
  21.       dba.Dispose
  22.       Set dba = Nothing

       4、提字串的加密、解密,支持中文密码,加密长度可以是32位、64位、128位
             使用如下代码即可对字符串进行加密、解密

  1.       Dim cls As New clsSecurity
  2.       Text1 = cls.EncryptString(Text1, Encrypt128)   '128位加密
  3.       Text1 = cls.DecryptString(Text1, Encrypt128)   '128位解密
  4.       Set cls = Nothing

四、DBA的补充说明
    1、INI文件的接口、实现类见文《VB6.0接口,转转转 (用VB6.0接口实现INI文件的读取组件) 》
    2、DBA中ifaceDbConnectionBuilder接口的Access、dBASE、SQL Server、Oracle的实现类见附件包,供扩展参考。
          其中Oracle的实现类clsDbConnStrOracle.cls仅仅返回一个空串,要自己去重新实现。^_^
    3、希望DBA使你的数据库编程变得轻松和愉悦。。。
    4、附件请从这里下载http://download.csdn.net/source/835035

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值