ver;”
+ “DSN=;”
+ “databasename=dataall;”
+ “databasefile=d:\data\;”
+ “UID=dba;”
+ “PWD=killer”
应用实例
下面以Sybase 11.9.2为例,编制一个简单的工作人员管理程序,介绍ADO的具体实现方法和步骤。数据库名称为Workerdb,只包括一个表(Worker),其结构如下:
字段名称 宽度 注释
code nchar(4) 代号
name char(8) 姓名
…… …… ……
首先安装ADO,在VB的“工程”/“引用”对话框中选择“ActiveX Data Object 2. 5 Library”(ADODB)。其中“ADO Recordset 2. 5 Library”是一个客户端的版本(ADOR),因为不需要Connection对象来建立与远程数据源的联系,所以ADOR对于客户端的数据访问来说已经足够了。 下面是部分主要代码:
1. 处理代码
’在工程菜单中引用Microsoft ActiveX Data Object 2. 5 Library
’声明ADO连接对象为工程级全局变量
Public cndbase As New ADODB.Connection
……
’自定义连接数据库函数
Public Function ConnectDbase(StrConnect As String) As Boolean
On Error GoTo ErrHandle
cndbase.ConnectionString = StrConnect
cndbase.Open
cndbase.CursorLocation = adUseClient
ConnectDbase = True
Exit Function
ErrHandle:
ConnectDbase = False
End Function
Private Sub Form_Load()
……
输入 VarServer ’服务名称
VarDbase ’数据库名称
VarUser ’用户名称
VarPassword ’用户口令
……
’连接数据库,采取无DSN连接方法
StrConnect = “Provider=MSDASQL;”
+“Driver={” & VarDriver &“};”
+“SRVR=” & VarServer & “;”
+“DB=” & VarDbase & “;”
+“DSN=;”
+“UID=” & VarUser & “;”
+“PWD=” & VarPassword & “;”
+ “Persist Security Info=False” ’不采用集成安全机制
if ConnectDbase(StrConnect) Then
Exit Sub
else
myexit = MsgBox(“数据库连接失败!请检查连接设置信息。”, vbOKOnly, “错误提示:”)
Unload me
endif
ErrHand:
myexit = MsgBox(“错误程序:” & Err. Source & Chr(10) & “错误代码:” & Err. Number & Chr(10) & “错误信息:” & Err.Description, VbAbortRetryIgnore, “错误提示:”)
If myexit = 3 Then
Err.Clear
Unload Me
Else
If myexit = 4 Then
Err.Clear
Resume
Else
Err.Clear
Resume Next
End If
End If
End Sub
Private Sub Form_Unload()
……
cndbase.Close
Set cndbase = Nothing
End Sub
2. 建表
codbase.CommandText=“{call CREATABLE (?) }”
codbase.CommandType = adCmdText
codbase.Name = “CREATABLE”
’设定OutPut的参数
Set param = codbase.CreateParameter(“flag”, adInteger, adParamOutput)
codbase. Parameters. Append param
Set codbase. ActiveConnection = cndbase
codbase. Execute
If codbase. Parameters(0) = 0 Then
myexit = MsgBox(“建表成功!”, vbOKOnly, “程序提示:”)
Else
myexit = MsgBox(“建表失败!”, vbOKOnly, “错误提示:”)
Endif
……
3. 修改
rsdbase. Open“worker”,cndbase,adOpenDynamic,adLockPessimistic,adCmdTable
rsdbase. MoveFirst
cndbase. BeginTrans
’在记录集中进行循环更改
Do Until rsdbase.EOF
’增加20元职务代码为1的人员的工资
If rsdbase! duty = 1 Then
rsdbase! salary = rsdbase! salary + 20
End If
rsdbase. MoveNext
Loop
rsdbase.UpdateBatch
……
4. 统计
StrSQL = “Select avg(salary), sum(salary) from worker”
rsdbase. CursorLocation = adUseClient
rsdbase. Open StrSQL,cndbase
salaryavg = rsdbase(0) ’平均工