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.055毫秒