论文部分内容阅读
【摘要】本文结合具体的事例,讲述了VB访问数据库的基本原则,阐述了使符合VB内置结构的Microsoft Access数据库在网络使用中保持同步的方法,以及访问加密的Microsoft Access数据库的方法,并对怎样提高VB访问数据库速率的措施和在使用过程中应注意的问题做了简单的介绍。
【关键词】Visual Basic;数据库;Microsoft Access;连接;访问
Visual Basic(VB)是微软公司可视化系列开发工具Visual Studio中的产品,是创建Windows应用程序最简便、最快捷的开发工具之一。其数据库的核心结构是所谓的Microsoft JET数据库引擎,它为VB与数据库的接口提供了基本的方法和手段。JET引擎被Visual Basic、Microsoft Access和其它Microsoft产品所共享,所以在VB中把Access数据库格式作为一种标准的内置格式,所有的非Access数据库都被称为外来数据库,因此在VB中连接和访问Access数据库和非Access数据库就有不同的方法。
1 VB访问数据库的原则
在VB中访问数据库,根据条件和数据库种类等的不同有不同的方法,但总的原则是:根据具体的环境、条件、要求而采用适当的方案。
1.1 代码的重用和运行的效率。
在VB中访问数据库,需要进行代码的编写,因此,在访问不同的数据库时,应尽量选择不需要频繁修改代码的访问方法。
1.2 实现的简便性及易维护性。
如果一种方法实现起来很复杂,工程的开发必然造成人力物力的浪费,同时这样设计出来的应用程序支持起来也更复杂或维护时更困难。
1.3 安全性。
这一条原则应根据具体的环境和条件决定。例如局域网的网络安全性要好于广域网,因而可直接利用数据控件如DC,这样实现起来方便快捷;而广域网需要大量的错误捕获。
2 利用VB使ACCESS数据库在网络使用中保持同步的方法
VB为实现同步,在数据库对象中提供了多个属性与方法来实现这一过程,以下介绍几个主要的属性与方法,分别对应同步化的几个步骤:
2.1 Replicable属性。
Replicable属性用来使一个数据库对象或数据库中的表对象、查询对象等具有可复制副本的属性,即成为设计正本。但数据库对象并不提供Replicable这一属性,因此首先要用Create Propety方法来创建它,然后把它添加到对象的属性集中,最后再给它赋值,使数据库成为设计正本。对于数据库对象而言,把Replicable属性设置为“True”将使数据库对象成为可复制的。以下代码将VB安装目录下附带的Nwind.mdb数据库成为一个设计正本(为确保安全在操作前备份了这一库文件):
Private Sub Command1_Click()Dim dbNwind As Database’如果未引用DAO则一定要先引用Dim prpNew As Property Set dbNwind = OpenDatabase("Nwind.mdb", True)With dbNwind’建立Replicable属性,如果已经存在该属性则程序略过这一步On Error Resume Next
Set prpNew = .CreateProperty("Replicable", dbText, "T").Properties.Append prpNew’设置数据库的Replicable属性为True.Properties("Replicable") = "T".CloseEnd WithEnd Sub.
2.2 MakeReplica方法。
MakeReplica方法从设计正本复制出一个新的完全副本。其语法为:database.MakeReplica replica, description, [options]。其中replica是代表一个新副本路径名称的字符串;description是对正在创建的新副本的一个描述字符串;options是一个可选项,可以是dbRepMakePartial常量(创建一个部分副本)或dbRepMakeReadOnly常量(防止用户修改新副本中的可复制对象),如果要建立的是一个只读式的部分副本,则要加入参数常量dbRepMakeReadOnly + dbRepMakePartial.
在上一个例子中,在关闭数据库之前加入代码:
MakeReplica "NwReplica", "replica of nwind.mdb"则从Nwind.mdb设计正本复制出一个名为NwReplica.mdb的副本,位置在Nwind.mdb同一目录中。
2.3 Synchronize方法。
Synchronize方法使两个完全副本(包括设计正本)同步化。其语法为:database. Synchronize pathname,[exchange]。其中pathname为要同步的目标副本的路径名称字符串(串中的.mdb扩展名可省略);exchange用来标识两个数据库之间的同步方向,这是一个可选项,默认为双向交换。
Synchronize方法还可对通过Internet互联的数据库进行同步化。以下语句实现本地数据库正本与位于Internet服务器上的一个副本同步化:
dbNwind.Synchronize"www.mycompany.myserver.com"&"/files/NwReplica.mdb", dbRepImpExpChanges + dbRepSyncInternet.
2.4 PopulatePartial方法。
利用Synchronize方法使两个完全副本同步化,不会出现任何问题,但如果用一个完全副本来同步一个部分副本,因为部分副本是由副本过滤器来从完全副本中过滤重新生成的,因此可能在部分副本中产生所谓的“孤立”记录,即这些记录不能再与其他副本保持同步。
3 利用VB访问加密的Access数据库的方法
在使用Access数据库时,很多重要数据库文件要求对用户是透明的,即用户只能通过应用程序对数据库操作。这样,一方面可以防止用户对数据库的非法更改,另一方面也可以防止其他开发者窃用数据库文件进行非法开发。
在Access的安全策略中,通过在Workgroup中对Group和User级别上的权限控制来保证数据库的安全。
但对于用到Access数据库的应用程序(比如利用Visual Basic编写的程序),如果在编程时不做特别的修改,这样的作法则会使程序难以调用数据库。
在Visual Basic的不同版本中均提供了对Access加密数据库的访问方法,下面结合实例具体说明在VB中怎样使用加密的Access数据库。过程如下:
3.1 运行Access工作组中的Microsoft Access Workgroup Administrator,可以创建新的system.mda文件,同时设定workgroupid。
3.2 用Access创建名为DB1.MDB的新数据库。
3.3 在Access中,选择“Security|Change Password...”改变Adminuser的口令。比如,将口令设为“password”。
3.4 选取菜单命令“Security|User”,设立新用户,命为“Yuan”,之后将之加入Admin和Users组中。
3.5 关闭Access,删除刚才创建的DB1.MDB数据库。
3.6 打开Access,这时,要求以新用户“Yuan”登录。再创建一个数据库,仍然采用默认文件名DB1.MDB,同时设置口令为“password”。
3.7 将目标数据库导入(Import)DB1.MDB中。
3.8 使用菜单命令“Security|Permissions”,除了用户“Yuan”外,将其它组和用户对该数据库各个对象的权限都取消,然后关闭Access。
3.9 备份目标数据库后,将DB1.MDB改名为目标数据库的名称。
在这个过程中,关键是在VB中使用下述语句:
SetDefaultWorkspace "Yuan", "password"之后执行打开数据库等操作。如果要使程序正常运行,还要将System.mda文件拷贝到程序目录中。采用加密数据库可以保护开发者的正当权益,而在Visual Basic程序中加入简单的语句就可以调用加密的Access数据库,便于实现。
4 提高VB访问数据库的效率
在VB中访问数据库时,对数据库的访问效率是十分重要的,因此,我们应该尽量提高VB访问数据库的效率,常用的方法有:
4.1 使用事务处理更新数据库。
VB的事务处理包括以BeginTrans开始,以CommitTrans或Rollback结尾的多条数据库操作指令,事务处理除了能很好的保证数据库的完整性以外,同时能大大提高数据库批量更新的效率。
4.2 使用代码分解Select检索操作。
使用Select进行数据库操作固然简单易用,但如果将一些检索操作分解为等价的手工检索代码,则对数据库的检索速度将大大加快。分解的基本方法是对检索关键字段进行索引,利用Seek方法定位后,根据索引的数据库已经排序的特点,进行遍历查找。
4.3 使用attach绑定数据库表。
当使用ODBC连接MS SQL Server、 Oracle和Sysbase之类的数据库服务器时,可以通过MS Access的attach功能将服务器上的表绑定到MS Access数据库中,因为MS Access数据库能缓存数据库服务器上表的结构,当访问ODBC数据源时能提高系统的访问性能。
4.4 使用dbSQLPassThrough选项。
连接MS SQL Serve、Oracle和Sysbase数据库服务器时,使用dbSQLPassThrough选项可将命令直接发送给数据库服务器,从而减少中间件对命令的检查和解释,提高了数据库的访问性能。
5 使用Visual Basic访问数据库时应注意的几个问题
Visual Basic是一门开发Windows应用程序很好的一种语言,使用它能够开发出大型的应用系统。在我们使用VB访问数据库应注意以下几个问题。
5.1 如何来访问数据库。
VB访问数据库一共提供了两种方法:一种是用数据控制,另一种是使用对象来访问数据库。
5.2 关于书签指针即bookmark属性。
在VB访问数据库时,数据库中的记录是没有记录号的。但VB提供了bookmark属性来记录当前访问记录的记录指针,这个bookmark就相当于记录号。
5.3 注意变量类型的匹配。
在访问数据库时,显示记录一般都使用格子控制,其中grid.text是子符串类型。但有些记录的数据项是空的(null),即没有数据,若将null装入grid.text显然会出错,所以这里就需要加入类型的判断,将null数据项赋于空格子符串。
参考文献
[1] 欧阳柳波、杨超,《Visual Basic 6.0程序设计》. 北京.电子工业出版社.2001.6
[2] E.Winemilller 等,《Visual Basic 6.0 数据库开发》. 北京.清华大学出版社.1999.9
[3] [美] Que CorPoration,《开放数据库互连——ODBC 2.0使用大全》.北京.清华大学出版社.1995
[4] [美] Wayne Freeze,《Visual Basic数据库编程宝典》. 北京.电子工业出版社.2001.5
[5] Curtis Smith、Michael Amundsen,《Visual Basic 6.0 数据库编程》. 北京.清华大学出版社.1999.11
[6]同志工作室,《Visual Basic 6.0 数据库开发实例》.北京. 人民邮电出版社.2001.9
【关键词】Visual Basic;数据库;Microsoft Access;连接;访问
Visual Basic(VB)是微软公司可视化系列开发工具Visual Studio中的产品,是创建Windows应用程序最简便、最快捷的开发工具之一。其数据库的核心结构是所谓的Microsoft JET数据库引擎,它为VB与数据库的接口提供了基本的方法和手段。JET引擎被Visual Basic、Microsoft Access和其它Microsoft产品所共享,所以在VB中把Access数据库格式作为一种标准的内置格式,所有的非Access数据库都被称为外来数据库,因此在VB中连接和访问Access数据库和非Access数据库就有不同的方法。
1 VB访问数据库的原则
在VB中访问数据库,根据条件和数据库种类等的不同有不同的方法,但总的原则是:根据具体的环境、条件、要求而采用适当的方案。
1.1 代码的重用和运行的效率。
在VB中访问数据库,需要进行代码的编写,因此,在访问不同的数据库时,应尽量选择不需要频繁修改代码的访问方法。
1.2 实现的简便性及易维护性。
如果一种方法实现起来很复杂,工程的开发必然造成人力物力的浪费,同时这样设计出来的应用程序支持起来也更复杂或维护时更困难。
1.3 安全性。
这一条原则应根据具体的环境和条件决定。例如局域网的网络安全性要好于广域网,因而可直接利用数据控件如DC,这样实现起来方便快捷;而广域网需要大量的错误捕获。
2 利用VB使ACCESS数据库在网络使用中保持同步的方法
VB为实现同步,在数据库对象中提供了多个属性与方法来实现这一过程,以下介绍几个主要的属性与方法,分别对应同步化的几个步骤:
2.1 Replicable属性。
Replicable属性用来使一个数据库对象或数据库中的表对象、查询对象等具有可复制副本的属性,即成为设计正本。但数据库对象并不提供Replicable这一属性,因此首先要用Create Propety方法来创建它,然后把它添加到对象的属性集中,最后再给它赋值,使数据库成为设计正本。对于数据库对象而言,把Replicable属性设置为“True”将使数据库对象成为可复制的。以下代码将VB安装目录下附带的Nwind.mdb数据库成为一个设计正本(为确保安全在操作前备份了这一库文件):
Private Sub Command1_Click()Dim dbNwind As Database’如果未引用DAO则一定要先引用Dim prpNew As Property Set dbNwind = OpenDatabase("Nwind.mdb", True)With dbNwind’建立Replicable属性,如果已经存在该属性则程序略过这一步On Error Resume Next
Set prpNew = .CreateProperty("Replicable", dbText, "T").Properties.Append prpNew’设置数据库的Replicable属性为True.Properties("Replicable") = "T".CloseEnd WithEnd Sub.
2.2 MakeReplica方法。
MakeReplica方法从设计正本复制出一个新的完全副本。其语法为:database.MakeReplica replica, description, [options]。其中replica是代表一个新副本路径名称的字符串;description是对正在创建的新副本的一个描述字符串;options是一个可选项,可以是dbRepMakePartial常量(创建一个部分副本)或dbRepMakeReadOnly常量(防止用户修改新副本中的可复制对象),如果要建立的是一个只读式的部分副本,则要加入参数常量dbRepMakeReadOnly + dbRepMakePartial.
在上一个例子中,在关闭数据库之前加入代码:
MakeReplica "NwReplica", "replica of nwind.mdb"则从Nwind.mdb设计正本复制出一个名为NwReplica.mdb的副本,位置在Nwind.mdb同一目录中。
2.3 Synchronize方法。
Synchronize方法使两个完全副本(包括设计正本)同步化。其语法为:database. Synchronize pathname,[exchange]。其中pathname为要同步的目标副本的路径名称字符串(串中的.mdb扩展名可省略);exchange用来标识两个数据库之间的同步方向,这是一个可选项,默认为双向交换。
Synchronize方法还可对通过Internet互联的数据库进行同步化。以下语句实现本地数据库正本与位于Internet服务器上的一个副本同步化:
dbNwind.Synchronize"www.mycompany.myserver.com"&"/files/NwReplica.mdb", dbRepImpExpChanges + dbRepSyncInternet.
2.4 PopulatePartial方法。
利用Synchronize方法使两个完全副本同步化,不会出现任何问题,但如果用一个完全副本来同步一个部分副本,因为部分副本是由副本过滤器来从完全副本中过滤重新生成的,因此可能在部分副本中产生所谓的“孤立”记录,即这些记录不能再与其他副本保持同步。
3 利用VB访问加密的Access数据库的方法
在使用Access数据库时,很多重要数据库文件要求对用户是透明的,即用户只能通过应用程序对数据库操作。这样,一方面可以防止用户对数据库的非法更改,另一方面也可以防止其他开发者窃用数据库文件进行非法开发。
在Access的安全策略中,通过在Workgroup中对Group和User级别上的权限控制来保证数据库的安全。
但对于用到Access数据库的应用程序(比如利用Visual Basic编写的程序),如果在编程时不做特别的修改,这样的作法则会使程序难以调用数据库。
在Visual Basic的不同版本中均提供了对Access加密数据库的访问方法,下面结合实例具体说明在VB中怎样使用加密的Access数据库。过程如下:
3.1 运行Access工作组中的Microsoft Access Workgroup Administrator,可以创建新的system.mda文件,同时设定workgroupid。
3.2 用Access创建名为DB1.MDB的新数据库。
3.3 在Access中,选择“Security|Change Password...”改变Adminuser的口令。比如,将口令设为“password”。
3.4 选取菜单命令“Security|User”,设立新用户,命为“Yuan”,之后将之加入Admin和Users组中。
3.5 关闭Access,删除刚才创建的DB1.MDB数据库。
3.6 打开Access,这时,要求以新用户“Yuan”登录。再创建一个数据库,仍然采用默认文件名DB1.MDB,同时设置口令为“password”。
3.7 将目标数据库导入(Import)DB1.MDB中。
3.8 使用菜单命令“Security|Permissions”,除了用户“Yuan”外,将其它组和用户对该数据库各个对象的权限都取消,然后关闭Access。
3.9 备份目标数据库后,将DB1.MDB改名为目标数据库的名称。
在这个过程中,关键是在VB中使用下述语句:
SetDefaultWorkspace "Yuan", "password"之后执行打开数据库等操作。如果要使程序正常运行,还要将System.mda文件拷贝到程序目录中。采用加密数据库可以保护开发者的正当权益,而在Visual Basic程序中加入简单的语句就可以调用加密的Access数据库,便于实现。
4 提高VB访问数据库的效率
在VB中访问数据库时,对数据库的访问效率是十分重要的,因此,我们应该尽量提高VB访问数据库的效率,常用的方法有:
4.1 使用事务处理更新数据库。
VB的事务处理包括以BeginTrans开始,以CommitTrans或Rollback结尾的多条数据库操作指令,事务处理除了能很好的保证数据库的完整性以外,同时能大大提高数据库批量更新的效率。
4.2 使用代码分解Select检索操作。
使用Select进行数据库操作固然简单易用,但如果将一些检索操作分解为等价的手工检索代码,则对数据库的检索速度将大大加快。分解的基本方法是对检索关键字段进行索引,利用Seek方法定位后,根据索引的数据库已经排序的特点,进行遍历查找。
4.3 使用attach绑定数据库表。
当使用ODBC连接MS SQL Server、 Oracle和Sysbase之类的数据库服务器时,可以通过MS Access的attach功能将服务器上的表绑定到MS Access数据库中,因为MS Access数据库能缓存数据库服务器上表的结构,当访问ODBC数据源时能提高系统的访问性能。
4.4 使用dbSQLPassThrough选项。
连接MS SQL Serve、Oracle和Sysbase数据库服务器时,使用dbSQLPassThrough选项可将命令直接发送给数据库服务器,从而减少中间件对命令的检查和解释,提高了数据库的访问性能。
5 使用Visual Basic访问数据库时应注意的几个问题
Visual Basic是一门开发Windows应用程序很好的一种语言,使用它能够开发出大型的应用系统。在我们使用VB访问数据库应注意以下几个问题。
5.1 如何来访问数据库。
VB访问数据库一共提供了两种方法:一种是用数据控制,另一种是使用对象来访问数据库。
5.2 关于书签指针即bookmark属性。
在VB访问数据库时,数据库中的记录是没有记录号的。但VB提供了bookmark属性来记录当前访问记录的记录指针,这个bookmark就相当于记录号。
5.3 注意变量类型的匹配。
在访问数据库时,显示记录一般都使用格子控制,其中grid.text是子符串类型。但有些记录的数据项是空的(null),即没有数据,若将null装入grid.text显然会出错,所以这里就需要加入类型的判断,将null数据项赋于空格子符串。
参考文献
[1] 欧阳柳波、杨超,《Visual Basic 6.0程序设计》. 北京.电子工业出版社.2001.6
[2] E.Winemilller 等,《Visual Basic 6.0 数据库开发》. 北京.清华大学出版社.1999.9
[3] [美] Que CorPoration,《开放数据库互连——ODBC 2.0使用大全》.北京.清华大学出版社.1995
[4] [美] Wayne Freeze,《Visual Basic数据库编程宝典》. 北京.电子工业出版社.2001.5
[5] Curtis Smith、Michael Amundsen,《Visual Basic 6.0 数据库编程》. 北京.清华大学出版社.1999.11
[6]同志工作室,《Visual Basic 6.0 数据库开发实例》.北京. 人民邮电出版社.2001.9