Database 版 (精华区)

发信人: mm (绿色的梦), 信区: Database
标  题: 使用VB5开发客户/服务器应用程序(四)
发信站: 紫丁香 (Thu Oct 30 21:45:15 1997)


  2 用DAO访问ODBC数据

    有几种不同的方式,可以用来访问 ODBC 数据源中的数据。
如果刚启动客户/服务器进行计算,可以按以下步骤来“快速启
动”DAO 方式访问 ODBC 数据:
  (1) 使用 Windows 控制面板中的 ODBC 数据源管理器,来设
      置 ODBC 数据源,并赋予它一个数据源名称 (DSN)。
  (2) 在 Visual Basic 代码中设置一个表示 ODBC 数据源的连
      接字符串。这个连接字符串被用来建立与数据源的连接。
  (3) 创建一个新的 TableDef 对象,并将它的连接字符串设置
      为步骤 2 中指定的值。
  (4) 将这个 TableDef 对象追加到 TableDefs 连接中。
  (5) 在连接的表中打开一个Recordset对象。这个Redordset对
      象包含了ODBC数据源中的数据。现在就可以使用Recordset
      对象的属性和方法来操作这些数据了。
    下面将分别介绍这些步骤。
  (1) 使用 ODBC 数据源管理器
    访问 ODBC 数据的第一步是使用 ODBC 数据源管理器来登记
数据源。这一步很重要,因为它将在 Windows Registry 中保存
数据源信息,并使这些信息对应用程序可用。
    设置数据源的步骤
      * 在 Windows“控制面板”中,双击 “32 位 ODBC”图标。
      * 单击“添加...”显示“安装新数据源”对话框,为要访
        问的数据源选择 ODBC 驱动程序。例如,选择 Microsoft
        SQL Server。
      * 在“安装”对话框中,输入数据源的名称 (DSN)。名称可
        以是任意的字符串,如“SalesDB”或“Pubs”。不要求
        这个字符串对应于要访问的数据库或数据表的实际名称。
      * 输入数据库描述,可以是任意的文本,如“Sales Data 
        for 1996”。
      * 输入驻留数据源的服务器在网络上的名称。名称的开头不
        要加上两个反斜杠 ("\\")。
      * 输入将要访问的数据库的名称。例如输入 Pubs,这是
        Microsoft SQL Server 示例数据库的名称。
    注意:因为不同的数据源驱动程序要求不同的信息集,所以每
一个数据源的设置不尽相同。如果在“设置数据源”对话框中出现
了在上述步骤中没有出现的设置值,请单击对话框中的“帮助”按
钮来获得详细信息。
  (2) 在代码中注册数据源
    如果不想让用户用 ODBC 数据源管理器来设置数据源,而要用
代码来注册数据源,这时要用 DBEngine 对象的RegisterDatabase
方法。
    下面就是注册数据源 PtLudlow 的过程:
      Sub RegisterDB()
        Dim str As String
        '创建关键字串。
        str = "Description=SQL Server on Server Puget" & _
        vbCr & "OemToAnsi=No" & _
        vbCr & "Network=(Default)" & _
        vbCr & "Address=(Default)" & _
        vbCr & "Server=Puget" & _
        vbCr & "Database=Ports"
        '注册数据库。
        DBEngine.RegisterDatabase "PtLudlow", _
        "SQL Server",
                True, str
      End Sub
  (3) 设置连接字符串
    在代码中访问数据源时,需要设置连接字符串。它们是ODBC
驱动程序用来定位和连接数据源的一组以分号分隔的字符串。
    连接字符串必须以“ODBC;”开始,并且必须包含驱动程序访
问数据所需的一组值。实际的连接字符串可能因要访问的数据源
的不同而不同。通常情况下,至少要包含一个用户 ID、一个密码
和一个 DSN,如下例所示:
      ODBC;UID=JamesK;PWD=OpenSesame;DSN=MasterData
    在 ODBC 驱动程序处理连接字符串时,如果数据源所提供的
参数不是驱动程序所需要的,就会显示一个对话框来请求缺少的
信息。如果不希望显示这个对话框,则必须保证连接字符串包含
了全部所需的信息。
    注意:如果正试图连接使用集成安全机制的 Microsoft SQL
Server 数据库,请将 UID 和 PWD 设置成 "" (零长度的串),因
为系统已经自动使用了您的 Windows NT 用户名和密码。这时,连
接字符串就会象下面的例子那样:
      ODBC;UID=;PWD=;DSN=MasterData
    在本章后面的“连接策略”部分,将给出如何使用连接字符串
的例子。
  (4) 为 ODBC 数据源创建链接表
    一旦确定了连接字符串的正确语法,就可以用它来创建指向ODBC
数据源中数据的TableDef对象。下面的代码以Microsoft SQL Server
中的 Pubs 示例数据库为例,讲述了这种的操作。例子中以电话号码
的区号为参数,链接 authors 表,并且统计了有相同电话号码区号
的作者数。
      Public Function CountByAreaCode(strAreaCode As _
      String) As Long
        Dim dbs As Database, rst As Recordset
        Dim strCn As String, tdf As TableDef
        Dim lngCount As Long
        strCn = "ODBC;DSN=Pubs;UID=SA;PWD=;DATABASE=Pubs"
        Set dbs = OpenDatabase("C:\Data\Cs.mdb")
        '删除所有名为 "LinkedAuthors" 的链接
        On Error Resume Next
        dbs.TableDefs.Delete "LinkedAuthors"
        dbs.TableDefs.Refresh
        On Error GoTo ErrorHandler
        '创建一个 TableDef 对象并且设置它的 Connect 属性。
        '同时设置将要访问的数据表:
        Set tdf = dbs.CreateTableDef("LinkedAuthors")
        tdf.Connect = strConnect
        tdf.SourceTableName = "Authors"
        dbs.TableDefs.Append tdf
        dbs.TableDefs.Refresh
        '在链接的表中打开一个记录集。使用
        ' dbOpenForwardOnly,以求最高速度。
        Set rst = dbs.OpenRecordset("LinkedAuthors", _
        dbOpenForwardOnly)
        Do Until rst.EOF
                If Left$(rst!phone, 3) = strAreaCode Then
                        lngCount = lngCount + 1
                End If
                rst.MoveNext
        Loop
        rst.Close
        dbs.Close
        CountByAreaCode = lngCount 'Return value to caller 
        Exit Function
        ErrorHandler:
        MsgBox "Error " & Err & ": " & Error
        Exit Function
      End Function
    前面的例子用仅向前类型方式打开 Authors 数据表的记录集。
这样,在仅向前移动记录指针而不更新记录的情况下提供了最大的
效率。如果要更新记录集中的记录,那么在打开记录集时采用动态
集型,即在 OpenRecordset 方法中使用 dbOpenDynaset 常数。
    链接的 ODBC 数据表的运作与其它链接的 Microsoft Jet 数
据表很相象。可以对它使用 DAO 和 Microsoft Jet SQL 运行查询。
例如,下面代码段在 LinkedAuthors 数据表上创建了一个删除记录
的 QueryDef 查询:
      Dim dbs As Database, qdf As QueryDef
      Set dbs = CurrentDb
      Set qdf = dbs.CreateQueryDef("DeleteAuthor")
      qdf.SQL = "DELETE FROM LinkedAuthors WHERE _
      au_lname = 'Smith'"
      qdf.Execute

--
                _/     _/        _/     _/
               _/_/ _/_/        _/_/ _/_/
              _/  _/ _/        _/  _/ _/
             _/     _/        _/     _/
            _/     _/        _/     _/         

※ 来源:.紫丁香 pclinux.hit.edu.cn.[FROM: space.hit.edu.c]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:3.268毫秒