我用的是VB6.0。
我的工程中,对ADO的应用,有时需要ADODB.Connection.CursorLocation = adUseClient(客户端),有时又需要ADODB.Connection.CursorLocation = adUseServer (服务器端)。我在模块中定义了两个ADODB.Connection ,代码如下:
Public Function Cnn() As ADODB.Connection '定义函数
Set Cnn = New ADODB.Connection
Cnn.CursorLocation = adUseClient '这里设为(客户端)属性
Cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\xydbgzdsjk.mdb;Jet OLEDB:Database Password=jiejie;admin,mima" '需密码的登陆方式。
End FunctionPublic Function Cnnn() As ADODB.Connection '定义函数
Set Cnnn = New ADODB.Connection
Cnnn.CursorLocation = adUseServer '这里设为(服务器端)属性
Cnnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\xydbgzdsjk.mdb;Jet OLEDB:Database Password=jiejie;admin,mima" '需密码的登陆方式。
End Function程序中对这两个连接引用的举例代码:
RsDqZbxx.Open sql, Cnn, adOpenKeyset, adLockBatchOptimistic '键集,批更新。
RsDqZbxx.Open sql, Cnnn, adOpenKeyset, adLockReadOnly '键集,只读。
问题是工程运行后,如先引用了一个连接,再换另一个连接却不起作用,我是指CursorLocation 属性值并没有改变。可是我又必须要此属性有时需客户端的,有时是服务器端的。请教各位老师这该怎么办呢?如何实现这个属性值的更改呢?
我的工程中,对ADO的应用,有时需要ADODB.Connection.CursorLocation = adUseClient(客户端),有时又需要ADODB.Connection.CursorLocation = adUseServer (服务器端)。我在模块中定义了两个ADODB.Connection ,代码如下:
Public Function Cnn() As ADODB.Connection '定义函数
Set Cnn = New ADODB.Connection
Cnn.CursorLocation = adUseClient '这里设为(客户端)属性
Cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\xydbgzdsjk.mdb;Jet OLEDB:Database Password=jiejie;admin,mima" '需密码的登陆方式。
End FunctionPublic Function Cnnn() As ADODB.Connection '定义函数
Set Cnnn = New ADODB.Connection
Cnnn.CursorLocation = adUseServer '这里设为(服务器端)属性
Cnnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\xydbgzdsjk.mdb;Jet OLEDB:Database Password=jiejie;admin,mima" '需密码的登陆方式。
End Function程序中对这两个连接引用的举例代码:
RsDqZbxx.Open sql, Cnn, adOpenKeyset, adLockBatchOptimistic '键集,批更新。
RsDqZbxx.Open sql, Cnnn, adOpenKeyset, adLockReadOnly '键集,只读。
问题是工程运行后,如先引用了一个连接,再换另一个连接却不起作用,我是指CursorLocation 属性值并没有改变。可是我又必须要此属性有时需客户端的,有时是服务器端的。请教各位老师这该怎么办呢?如何实现这个属性值的更改呢?
'......
Cnn.CursorLocation =int(b)+3
'......
end function
'......
Cnn.CursorLocation =int(b)+3
'......
end function 解释一下这个思路:
在你函数中加个可选参数b, boolean类型,默认true
if b then int(b)=-1
rs.CursorLocation =int(b)+3=2 就是 adUseServer,这个是默认连接
if not b then int(b)=0
rs.CursorLocation =int(b)+3=3 就是 adUseClient
'加一个参数,你能用于判断使用哪种属性的条件
Public Function Cnn(参数) As ADODB.Connection '定义函数
Set Cnn = New ADODB.Connection
if 条件(参数) then
Cnn.CursorLocation = adUseClient '这里设为(客户端)属性
else
Cnnn.CursorLocation = adUseServer '这里设为(服务器端)属性
end if
Cnnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\xydbgzdsjk.mdb;Jet OLEDB:Database Password=jiejie;admin,mima" '需密码的登陆方式。
End Function
我实验了 vbman2003 老师的方法了,但没用。
楼上的"翔龙"老师说先关闭后再连接,请问用什么语句来关闭 Connection 对象呢?
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset Set cn = New ADODB.Connection
cn.CursorLocation = adUseClient
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\f1.xls;Extended Properties='Excel 8.0;HDR=Yes;IMEX=1'" Set rs = New ADODB.Recordset
rs.Open "select id from [sheet1$] group by id", cn, 2, 2 While Not rs.EOF
Combo1.AddItem rs.Fields(0)
rs.MoveNext
Wend rs.Close
Set rs = Nothing
cn.Close
Set cn = Nothing
End Sub
模块中:
Public Function Cnn(Optional b As Boolean = True) As ADODB.Connection '定义函数
Set Cnn = New ADODB.Connection
If b = True Then
Cnn.CursorLocation = adUseClient '这里设为(客户端)属性
Else
Cnn.CursorLocation = adUseServer '这里设为(服务器端)属性
End If
Cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\xydbgzdsjk.mdb;Jet OLEDB:Database Password=mima;admin,mima" '需密码的登陆方式。
End Function
'Cnn.Close
'Set Cnn = Nothing 'VB6.0中,这句不能执行。
If Rs1.State <> adStateClosed Then
Rs1.Close
Set Rs1 = Nothing '关键是这句,要清空Rs1对象中原来的Cnn定义,得用这句,然后才能更新Cnn对象,即更新Cnn.CursorLocation属性。
end if
Rs1.Open sql, Cnn(False), adOpenKeyset, adLockReadOnly '键集,只读。
VB6.0中,这句不能执行。
什么意思?可以的,你的顺序有问题,要先关rs再关cn,和打开反过来