我用的是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 属性值并没有改变。可是我又必须要此属性有时需客户端的,有时是服务器端的。请教各位老师这该怎么办呢?如何实现这个属性值的更改呢?

解决方案 »

  1.   

    Public Function Cnnn(optional b as boolean=true) As ADODB.Connection
    '......
        Cnn.CursorLocation =int(b)+3   
    '......
    end function    
      

  2.   

    Public Function Cnnn(optional b as boolean=true) As ADODB.Connection 
    '...... 
        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
      

  3.   

    哦,可能我没看清楚你的问题,如果已经调用了一个con对象,其当前的CursorLocation属性不可变...
      

  4.   


    '加一个参数,你能用于判断使用哪种属性的条件
    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 
      

  5.   

       我已经调用了一个con对象,然后再调用Con对象时,需要改变CursorLocation属性的,难到这样CursorLocation属性真的就不可变了吗? 
      我实验了 vbman2003 老师的方法了,但没用。
        楼上的"翔龙"老师说先关闭后再连接,请问用什么语句来关闭 Connection 对象呢?
      

  6.   

    一段小程序Private Sub Command1_Click()
        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
      

  7.   

      多谢各位老师的提点,还有我自己的实验,我总算找到原因了。在此我整理一下,以帮助遇到和我同样疑惑的朋友。整理后的代码如下:
      模块中:
    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  '键集,只读。
      

  8.   


    VB6.0中,这句不能执行。
    什么意思?可以的,你的顺序有问题,要先关rs再关cn,和打开反过来