×

彻底解决VB6~VB2005中连接ACCESS数据库(带密码)

Kalet Kalet 发表于2009-03-20 12:00:14 浏览417 评论0

抢沙发发表评论

 

 
在Visual Basic中连接和使用Access数据库中,为了确保数据库中信息的安全,往往要求对数据库文件进行加密,以防止非法用户通过其它的常规手段(如使用ACCESS将数据库文件打开、修改)将其打开。那么,在Visual Basic中如何建立与加密的数据库的连接呢?介绍如下(以下部分内容摘自网络)。
  一、建立数据库

  因为在Visual Basic 6.0中有的数据库连接方式不支持Access 2000版本格式的数据库,为了便于说明问题,本文所提的数据库以Access 97版本数据库为例。

  在Microsoft Access 97中建立一个数据库,如:ssgl.mdb,并设置密码,如:“1234”,再将数据库文件和VB中创建的工程文件放在同一目录下。

  如果用户的计算机上只有Access 2000的话,可以先在Access 2000中建立ssgl.mdb数据库,并设置密码,再用Access 2000中的“数据库实用工具”将数据库转换成Access 97版本的格式。

  当然也可以直接在Visual Basic 6.0集成开发环境中通过“可视化数据管理器”来创建数据库,再到Access 97中设置密码。

  通过对数据库文件设置密码,一般情况下,非法用户就不能用常规的手段打开数据库了,对数据库中的信息起到了一定的安全和保密作用。

  二、连接加密的Access数据库

  在Visual Basic 6.0中,要建立与数据库的连接,可采用的技术手段很多,如:数据控件、数据对象、数据环境设计器等。开发人员可以根据自身的条件和用户的需求进行选择。

  限于篇幅,下面只介绍加密的Access数据库与没有加密的Access数据库在连接时的不同之处。关于没有加密的数据库的连接及访问的方法读者可以参阅其它资料。

  1、使用控件

  ① Data控件

  Data控件是Visual Basic 6.0中的一个内置数据控件,可以通过设置Data控件的connect、DatabaseName、RecordSource属性实现对数据库的连接和访问。 通过Data控件连接加密的数据库的方法有两种:

  一种方法是在设计状态时,在“属性窗口”中将Data控件的connect属性的缺省值”Access”改为”; pwd=1234”即可,其它属性的设置方法与没有加密的Access数据库的连接相同。

  另一种方法是在运行时,通过代码对connect属性赋值来实现。如:

Data1.connect=”; pwd=1234”

Data1.DatabaseName=APP.path + “\ssgl.mdb”

  其中,”1234”为Access数据库文件ssgl.mdb的密码,下同。

  ②Adodc控件

  Adodc控件是一个ActiveX控件,它使用Microsoft ActiveX Data Objects(ADO)创建到数据库的连接。使用Adodc控件之前,要先将Adodc控件添加到控件工具箱中。方法如下:在VB 6.0种选择“工程”菜单,再点击“部件”菜单项,在弹出的“部件”对话框中选中“Microsoft ADO Data Control 6.0(OLEDB)”选项即可。

  通过Adodc控件连接加密的数据库的方法也有两种:

  一种方法是在设计状态时,在“属性窗口”中,对Adodc控件的ConnectionString属性设置一个有效的连接字符串,并在连接字符串后增加上”; Jet OLEDB: DataBase password=1234”,再设置Adodc控件的CommandType、RecordSource的属性就可以创建到加密的数据库的连接了。

  另一种方法是在运行时,通过代码动态地设置ConnectionString、CommandType和RecordSource属性来创建连接。 只要在ConnectionString属性的有效连接字符串后增加上”; Jet OLEDB: DataBase password=1234”即可。

  2、使用数据对象

  ① DAO数据对象

  要能正确引用DAO数据对象来建立与数据库的连接,应先在VB集成开发环境中选择“工程”菜单,再点击“引用”菜单项,在弹出的“引用”对话框选择“Microsoft DAO 3.51 Object Library”选项来添加DAO数据对象类型库。

  接下来就可用如下代码来建立到加密的Access数据库ssgl.mdb的连接。

Dim db AS DataBase

Set db=OpenDataBase(App.path + “\ssgl.mdb” , False , False , ” ; pwd=1234”)

  ② ADO数据对象

  ADO是Microsoft推出的处理关系数据库和非关系数据库中信息的最新技术,也是Microsoft推崇的用于数据连接和访问的技术。在VB 6.0中,Adodc控件、ADO数据对象及DataEnvironment(数据环境设计器)都采用的是ADO技术,因而它们处理加密的Access数据库的方法类似。

  要能正确引用ADO数据对象,应在VB 6.0集成开发环境中选择“工程”菜单,再点击“引用”菜单项,在弹出的“引用”对话框中选中“Microsoft ActiveX Data Objects 2.1 Library”选项来添加ADO数据对象类型库。

  可用如下代码来建立到加密的Access数据库ssgl.mdb的连接。

Dim cnn AS ADODB.Connection

Dim rst AS ADODB.Recordset

Set cnn=New ADODB.Connection

Cnn.Provider= ”Microsoft.Jet.OLEDB.3.51”

Cnn.ConnectionString= ”Data Source=” & App.path & ”\ssgl.mdb;” & _

” ;Jet OLEDB:Database password=1234”

cnn.Open

  ③ 使用DataEnvironment(数据环境设计器)

  有两种方法可以通过DataEnvironment连接到加密的Access数据库:

  一种方法是在设计状态时,在DataEnvironment的connection对象的ConnectionSource属性的有效连接字符串后加上” ;

Jet OLEDB: Database password=1234”

  另一种方法是在DataEnvironment_Initialize()事件中编写如下代码:

Private sub DataEnvironment_Initialize( )

Dim strconn AS string

Strconn=” Provider=Microsoft.Jet.OLEDB.3.51;” & _

”Data Source=” & App.path & “\ssgl.mdb;” & _

”; Jet OLEDB: Database password=1234”

DataEnvironment1.connection1.connectionstring=strconn

End sub

  以上方法及相关代码已在Windows 98操作系统环境,Visual Basic 6.0中调试、验证并通过。

以下是本站的补充:
由于现在用户普遍使用ACCESS2003,使用VB6连接数据库便产生了新的麻烦。也就是,即使在VB中使用
ADO连接方式,但ACCESS2003建立的数据库也会出现无法连接(显示“找不到ISAM”)的问题。实践后
,用以下方法坚决比较简单:
1.针对DATA控件:由于它本身就不支持ACCESS2003,故可以在ACCESS2003中建立好数据库;然后,用独占方式
打开该数据库文件,用添加密码的方式设置密码;关闭后,用普通方式再次打开该数据库文件,然后将其转换
为ACCESS97数据库。这样,在连接到VB应用程序中就正常了。
2.针对ADO数据编程:虽然,ADO本身支持ACCESS2003,但数据库文件加了密码后,就会出现无法连接(显示“找不到ISAM”)的问题;这里,就采用“针对DATA控件”的方法来解决ADO中遇到的问题,这样,就同样能正常打开使用数据库了,只是该数据库已经转换称了ACCESS97格式。本方法在VB中如下:
程序代码: [ 复制代码到剪贴板 ]
connstring = "provider=microsoft.jet.oledb.4.0;" & "data source=" & App.Path & "\db1.mdb;" & "Jet OLEDB: Database password=12345"

其实ACCESS97格式足够我们普通使用了。以上应用在windows XP SP2+ACCESS2003+VB6环境下正常通过。

补充:
现在,对在高版本VB中的连接带密码的数据库连接字编写做补充!以VB2005为例,连接ACCESS数据库(带密码)时,也会遇到:“找不到可安装的isam”问题,解决如下:
假设,ACCESS数据库文件db1.mdb放置在项目的窗体文件的同文件夹下,密码为123。完整的代码如下:
程序代码: [ 复制代码到剪贴板 ]
connstring ="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\db1.mdb;Persist Security Info=True;Jet OLEDB:Database Password=123"


也可以简化上述代码:
程序代码: [ 复制代码到剪贴板 ]
connstring ="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=db1.mdb;Persist Security Info=True;Jet OLEDB:Database Password=123"


以上代码中,connstring 是预先定义的string变量,作为连接用字符串。在各个VB版本中调试均通过!
 

 

彻底解决VB6~VB2005中连接ACCESS数据库(带密码)

群贤毕至

访客