On Error GoTo LoadDBError
Set gnConnection = New ADODB.Connection ' 全局连接对象。
' 为连接对象设置连接字符串。
gnConnection.ConnectionString = "Provider=sqloledb;" & _
"Data Source=mainserver;Initial Catalog=Tazaz;User Id=sa;Password=; "
gnConnection.Open
'注:mainserver为数据库所在服务器主机名称
' Tazaz 为数据库名称
'
Exit Sub
LoadDBError:
Select Case Err.Number
Case -2147467259
' 不能找到文件
MsgBox "不能找到数据库文件,请与管理员联系!"
Case Else ' 其他未知的错误
MsgBox Err.Number & ": " & Err.Description
End Select
End Sub
'下面是打开一个表的示例
Private Sub Class_Initialize()
'创建类后创建集合
Set mCol = New Collection
Set rsUser = New ADODB.Recordset
With rsUser
.ActiveConnection = gnConnection
.Open "select * from 职工", _
gnConnection, adOpenKeyset, adLockOptimistic, adCmdText
.MoveLast
.MoveFirst
End With
End Sub
'///////////////////////////////////////////////////////////
'//Des:Just Connect Database to get DSN
'//Return:
' 0: Failure
' 1: Success
'///////////////////////////////////////////////////////////
Public Function ConnectDB() As Long
Dim iRetryTime As Integer
If DSN <> "" Then
ConnectDB = 1
Exit Function
End If
iRetryTime = RECONNECTTIMES
While iRetryTime > 0
DSN = CConnection.ConnectDB("")
If CConnection.ConnectResult Then
ConnectDB = 1
iRetryTime = 0
DSN = CConnection.OpenConnection(DSN)
Else
iRetryTime = iRetryTime - 1
If iRetryTime > 0 Then
MsgBox "数据库打开错误,请重试一次!"
End If
End If
Wend
End Function
Public Function GetConnectDSN(ByVal DSN As String) As String
Dim c As DataLinks
Dim d As ADODB.Connection
Set c = New DataLinks
Set d = New ADODB.Connection
d.ConnectionString = DSN
If c.PromptEdit(d) = True Then
GetConnectDSN = d.ConnectionString
mvarLastDSN = d.ConnectionString
mvarConnectResult = True
Else
mvarConnectResult = False
GetConnectDSN = ""
End If
Set d = Nothing
End Function
Public Function ConnectDB(ByVal DSN As String) As String
If DSN <> "" Then
ConnectDB = GetConnectDSN(DSN)
Else
ConnectDB = GetConnectDSN("")
Dim i As Integer
End If
End Function
Public Property Get ConnectResult() As Boolean
ConnectResult = mvarConnectResult
End Property
Public Function OpenConnection(DSN As String) As String
Set CONN = New ADODB.Connection
CONN.ConnectionString = DSN
CONN.CursorLocation = adUseClient
On Error GoTo ErrHandle
CONN.Open
OpenConnection = DSN
Exit Function
ErrHandle:
DSN = ""
DSN = ConnectDB(DSN)
CONN.ConnectionString = DSN
CONN.CursorLocation = adUseClient
CONN.Open
OpenConnection = DSN
End Function
先在Project->References中把Microsoft ActiveX Data Object 2.1 Library選上
Dim conn1 As ADODB.Connection
Dim rs1 As ADODB.Recordset
Set conn1 = New ADODB.Connection
conn1.ConnectionString = "DRIVER={SQL Server};SERVER=10.200.1.98;DATABASE=yourdatabase;UID=yourid;PWD=yourpsw"
conn1.Open
Set rs1 = conn1.Execute("select * from sort")
MsgBox rs1(0)
rs1.Close
conn1.Close
Set conn1 = Nothing
OpenConnection方法的调用方式如下:
[调用方式:OpenConnection(dsName, Prompt, ReadOnly, Connect)]
其中参数说明如下:
dsName,指定登录在系统中的DSN条目。当用Connect参数指定DSN值时,dsName必须为“”(长度为0的文字列)。
Prompt,当设置为rdDriverPrompt常数时,可以在不能与SQL Server连接的情况下,激活ODBC设置对话框来设定DSN。只是最好不要让一般用户随意更改这个设定。通常情况下,正确的处理方法是设定为rdDriverNoPrompt,利用Error处理程序编程进行处理。
ReadOnly,若需要通过连接对数据进行更新时设定为False。若没有数据更新的必要则设为True,这时因为ODBC驱动没有对数据更新进行管理的需要,可以提高程序效率。
Connect,向ODBC驱动管理器传递所有的ODBC连接参数。可以省略dsName,只通过Co nnect参数进行包括用户名、口令、缺省数据库、DSN(此时dsName参数的值无效)等全部参数值的传递。
下面是OpenConnection方法的一个实例。
设定的DSN为MyDSN:
Dim Cn As rdoConnection
Dim En As rdoEnvironment
Dim Conn As String
Conn = “DSN = MyDSN; UID = Jacob;” & “PWD = 123456; DATABASE = MyDb;”
Set Cn = En.OpenConnection(“”, rdDriverPrompt, False, Conn)
在这个例子中,dsName是空 “”(长度为0的文字列)。DSN情报从Conn参数中所含的DSN = MyDSN取得。
OpenConnection方法中也可以通过变量来进行参数传递:
[变量名:=值]
Set Cn = En.OpenConnection(Prompt := rdDriverPrompt, ReadOnly := False, Conn ect := Cnn)
虽然这多少有一些多余的代码,但毫无疑问会使程序维护工作容易得多。
EstablishConnection方法
EstablishConnection方法的调用方式如下:
调用方式:EstablishConnection(Prompt, ReadOnly, Connect)
本文前面对独立(stand alone)的连接对象(rdoConnection)作了说明,EstablishCon nection方法可以用于这种情况。EstablishConnection方法同OpenConnection方法很相似,被用于停止状态或独立的rdoConnection对象。
这里以独立的rdoConnection对象为例说明与SQL Server的连接。
Public WithEvents Eng As rdoEngine
Public WithEvents Cn As rdoConnection
Private Sub Form_Load()
Set Eng = New rdoEngine
Set Cn = New rdoConnection
With Cn
.Connect = “UID = ; PWD = ;” & “DATABASE = pubs; DSN = biblio”
.LoginTimeout = 5
.EstablishConnection rdoDriverNoPromt, True, rdAsyncEnable
End With
End Sub
在这个例子中,Form_Load函数对rdoEngine和rdoConnection对象进行初始化。这里有一点需要注意,rdoConnection对象是处于独立的状态之下,即使是处于未连接状态也可以设置属性的值。
接下来是rdoConnect对象的事件处理程序。从RDO 2.0起可以实现异步方式(rdAsyncEn able),EstablishConnection就设定为该值。在异步状态下,不必等待与数据库的连接,程序可以迅速从Form_Load函数中退出。
然后是BeforeConnect事件,该处理在与数据库的连接开始以前被激发,此时不能进行有关终止连接的操作:
Private Sub Cn_BeforeConnect(ConnetString As String, Prompt As Variant)
MsgBox “正在连接” & ConnectString, vbOKOnly, “连接前”
End Sub
连接完成之后的事件处理:
Private Sub Cn_Connect(ByVal ErrorOccurred As Boolean)
Dim M As String
If ErrorOccurred Then
For Each er In rdoErrors
M = M & er & vbCrLf & M
Next
MsgBox “连接失败” & vbCrLf & M
Else
MsgBox “连接成功”
'这是确认连接状态的测试代码
Cn.Excute “use pubs”
End Sub
RDO连接处理结束后,在该事件中确认连接成功与否。连接成功的情况下ErrorOccurred 返回False,失败时为True,由此可以对rdoErrors集合进行检测:
Private Sub Eng_InfoMessage()
For Each er In rdoErrors
Debug.Print er
Next
RdoErrors.Clear
End Sub
不能与SQL Server连接的原因多种多样,有可能是由于对数据库的访问权限、网络连接问题、数据库表的信息错误、SQL Server同时连接的许可数、资源不足等等,具体情况需要与网络管理员商量。
断开连接的操作非常简单,但又很重要,因为RDO不提供自动断开的功能。
Cn.Close
Set Cn = Nothing '释放对象所占的内存资源
En.Close
Set En = Nothing '释放对象所占的内存资源
VB是对象语言,Form、ActiveX控件也都是对象。使用对象后必须养成将对象设为Nothi ng把它从内存中释放的编程习惯。这样可以预防很多不可预测错误,往往程序中发生意义不明的错误时,其原因就在于此。
数据的取得
与数据库连接成功之后,接下来就是取得数据。一般用OpenResultset方法取得数据,这里首先需理解数据库中与此有关的[游标]概念。