安全中国首页 > 编程中心 > VB编程
 
安全中国网友投稿专用上传FTP空间:
Ftp服务器:download.anqn.com
Ftp端口:21
用户名:anqn
密 码:anqn.com
 

VB5.0 中远程数据库的访问

更新时间:2005-8-31 1:06:00
责任编辑:池天
热 点:

国防大学研究生院 许蔓舒
  在 VB5.0 中,用 Microsoft Jet 数据库引擎和数据访问对象 DAO(Data Access Object)可以创建功能强大的客户/服务器应用程序。对远程数据库的访问是开发这类应用程序的关键环节,本文将介绍在 VB5.0 中用 DAO 通过 Miscrosoft Jet 数据库引擎访问远程数据库的方法。

  用 DAO 访问远程数据库大体上可以通过三步来实现, 即数据连接、数据处理和断开连接。下面主要介绍数据连接和数据处理的具体操作。

一、数据连接

  DAO 一般通过链接远程表的方式来进行数据连接。这样,数据虽然驻留在远程数据源上,但在本地的 Microsoft Jet 数据库中可以存储与远程数据的永久性连接,同时缓存链接的表结构信息,从而在下一次访问该表时, 不用再次从服务器中检索这些结构信息,加快了连接速度。一旦链接了一个表,该链接便会保留在各会话 期间,直到连接断开。链接远程表的具体操作是:

用 OpenDatabase 方法打开将要包含该链接的本地 Microsoft Jet 数据库

用 CreateTableDef 方法在该数据库中创建一个新的 TableDef 对象

将 TableDef 对象的 Connect 属性设置为一个合法的连接字符串,标识要访问的远程数据库类型、数据文件的路径以及用户名和远程数据源密码等。

将 TableDef 对象的 SourceTableName 属性设置为远程数据库中要访问的表的名称。

添加 TableDef 对象到 TableDefs 集合中。
  实现链接远程表操作的过程如下:

Public Sub LinkTable(strDB As String, strRoDB As String, _
strCn As String, strTdf As String, linkTdfName As String)
  Dim linkTdf As New TableDef
  Set dbs = OpenDatabase(strDB)
  linkTdf.Name = linkTdfName
100
  tempTable = UCase(linkTdf.Name)
  For i = 0 To dbs.TableDefs.Count - 1
    If UCase(dbs.TableDefs(i).Name) = tempTable Then
      If MsgBox(linkTdfName + " 已存在,是否删除 ?", _
      vbQuestion + vbYesNo) = vbYes Then
        dbs.TableDefs.Delete linkTdf.Name
        Exit For
      Else: MsgBox "重新输入新表名"
      linkTdfName = InputBox(" 新表名")
      GoTo 100
      End If
    End If
  Next i
Set linkTdf = dbs.CreateTableDef(linkTdfName)  ’链接远程表
  linkTdf.Connect = ";database=" + strCn
  linkTdf.SourceTableName = strTdf
  dbs.TableDefs.Append linkTdf
End Sub

  上述过程用来实现远程表的连接,它有 5 个参数,其中 strRoDB 是要访问的远程数据库名(包括路径);strTdf 是该数据库中的表名;strDB 是要链接的本地数据库(包括路径);linkTdfName 是本地数据库的一个新表名,用来建立远程表的链接;strCn 是指定连接信息的字符串。需要特别注意的是,除了在访问远程 Microsoft Jet 数据库时,连接字符串要以分号(;)开头外,指定连接信息的字符串都必须以所访问的远程数据库类型开头。DAO 可以访问的远程数据源有以下三类:

Microsoft Jet 数据源,如:Access 数据。

IISAM(可安装的索引化顺序访问方法)格式数据源,如:FoxPro、Paradox、dBASE 数据。

ODBC 数据源,如:SQL Server 数据、Oracle 数据。
  例如:设网络服务器名为server,共享目录为 C:\Sales 的 FoxPro 3.0 数据库,连接字符串应为

  strCn="FoxPro3.0;database=\\server\c$\Sales\Region1"

  此外,DAO 通过 Microsoft Jet 数据库引擎访问远程数据时,还可以用 OpenDatabase 方法直接打开远程表。在本地数据库中并未存储与远程数据源建立连接所需要的信息。如果使用链接方式访问数据,则不必在每次会话开始时提供连接信息,从而可以提高效率。

二、数据处理

  数据连接建立后,可以用 OpenRecordset 方法打开一个记录集,并可用 DBGrid 控件和 Data 控件方便地浏览整个记录集。如果使用表类型(Table-type)记录对象,则对应的是一个实际存在的数据库表,在多用户环境下,其它用户对数据的修改会立即反映到表中;如果使用动态集类型(Dynaset-type)记录对象,则对应的既可以是一个表中全部记录,又可以是一个查询的结果,并且可以更新记录集中的记录;如果使用快照类型(Snapshot-type)记录对象,则对应的可以是表中的全部记录,也可以是一个查询结果,但不能进行记录的增加、删除和修改操作。此外,还可以建立其它类型的记录对象,如仅向前型(ForwardOnly-type)记录对象和动态型(Dynamic-type)记录对象。

  下面是打开动态集记录对象并显示记录的过程:

Public Sub rst_display(strDB As String, strRst As String, strForm As Form)
  Set dbs = OpenDatabase(strDB)
  Set rst = dbs.OpenRecordset(strRst, dbOpenDynaset)
  strForm!Data1.DatabaseName = dbs.Name
  strForm!Data1.RecordSource = rst.Name
  strForm!Data1.Refresh
  strForm!DBGrid1.ReBind
End Sub

  上述过程有三个参数,其中 strDB 用来指定本地数据库名(包括路径),linkTdfName 是在本地数据库中新建的链接远程表的表名,strForm 是网格控件和数据控件所在的窗体名。调用此过程可以基于新表建立一个动态集类型的记录对象,并可在网格中浏览各个记录。
  断开连接可以通过关闭应用程序或设置连接超时来实现。注意:如果对数据库对象使用 Close 方法,则由于在 Miscrosoft Jet 数据库引擎内部缓存了连接,实际上连接并未取消。

三、应用举例

  以上介绍了用 DAO 访问远程数据库的具体操作,下面通过一个例子说明链接远程表和建立记录集对象的方法。
  首先建立一个新工程,在窗体上画 5 个命令按钮,1 个数据控件和 1 个数据网格控件(DBGrid),各对象的属性设置见表1。

表1 窗体1对象属性设置

对象 标题(Caption) 名称(Name)
窗体 远程数据访问 Form1
命令按钮1 链接远程表 cmd链接
命令按钮2 添加 cmdAdd
命令按钮3 删除 cmdDel
命令按钮4 修改 cmdModify
命令按钮5 结束 cmdEnd
数据控件 Data1 Data1
数据网格   DBGrid1

  其中DBGrid1 中的DataSource 属性设为Data1,命令按钮2,3,4 的Visible 属性设为False。

  编写如下事件过程:

Private Sub cmdAdd_Click() ’添加记录子过程
  On Error GoTo errHandler
  With rst
   .AddNew
   For i = 0 To .Fields.Count - 1 ’遍历记录集中的每个字段
  ’在输入框中输入各字段的数据
    .Fields(i).Value = InputBox("输入记录信息" & vbCr + _
             "字段名:" + .Fields(i).Name)
   Next i
   .Update
  End With
  Data1.Refresh
  DBGrid1.ReBind
errHandler:     ’错误处理
  Select Case Err
    Case 3022, 3421
      MsgBox (Error + vbCr + "输入无效")
      Exit Sub
    Case Else
      Response = 0
      Exit Sub
  End Select
End Sub

1 2 下一页

 
学习软件编程开发技术,推荐加入以下软件编程培训班:
易语言软件编程培训班(简单易学)  Delphi软件编程培训班  VC++软件编程培训班
VB软件编程培训班  JAVA高端编程就业研发班

学习网站开发制作技术,推荐加入以下网站开发培训班:
ASP.net网站开发项目实战班  ASP语言网站建设培训班

学习网络安全入侵防护技术,推荐加入以下技术培训班:
大型网络安全入侵防护班  网站脚本程序全方位安全检测班

学习网络管理、网吧运营维护技术(网管),推荐加入以下培训班:
大型网吧技术管理人才特训班  Linux网络嵌入架构工程师培训班

学习专项特殊技术,推荐加入以下专项技术培训班:
软件与游戏外挂脱壳破解班(逆向工程)  赚钱王道-网赚技能培训班  Flash动画设计师就业特训班

 
相关编程
一日一文章
 
一日一软件
一日一动画