'执行sql语句并返回adodb.recordset值
Public Function ExecuteSql(ByVal sql As String) As ADODB.Recordset
On Error GoTo Errormsg
Dim sqlcon As New ADODB.Connection
Dim cmd As New ADODB.Command
Dim rs As New ADODB.Recordset
   sqlcon.Provider = "sqloledb"
   sqlcon.Properties("Data Source").Value = ServerDb  '// SLMAIL 为SQL Server 服务器名
   sqlcon.Properties("Initial Catalog").Value = Database       '//已创建数据库名
   sqlcon.Properties("persist security info").Value = "False"
   sqlcon.Properties("user id").Value = SqlUserId
   sqlcon.Properties("password").Value = SqlPassword
   sqlcon.Open
   cmd.ActiveConnection = sqlcon
   cmd.CommandText = sql
   Set ExecuteSql = cmd.Execute
   'sqlcon.Close
   If 1 <> 1 Then
Errormsg: MsgBox Error
   End If
End Function这个是我用的sql连接。为啥客户端2个人同时用就不行呢。必须一个人查询完毕。另外一个人才可以查询。。该怎么改一下?

解决方案 »

  1.   

    http://www.cnblogs.com/tongnaifu/archive/2008/10/21/1316141.html
      

  2.   

    工程中定义一个全局的sqlcon,工程打开时连接数据库,在工程运行过程中都可以引用
      

  3.   

    在 sqlcon.Open 前面加一句 sqlcon.CursorLocation = adUseClient
      

  4.   

    Public Function ExecuteSql(ByVal sql As String) As ADODB.Recordset 
    On Error GoTo Errormsg 
        Dim sqlcon As New ADODB.Connection 
        Dim cmd As New ADODB.Command 
        Dim rs As New ADODB.Recordset 
        
        sqlcon.Provider = "sqloledb" 
        sqlcon.Properties("Data Source").Value = ServerDb  '// SLMAIL 为SQL Server 服务器名 
        sqlcon.Properties("Initial Catalog").Value = Database      '//已创建数据库名 
        sqlcon.Properties("persist security info").Value = "False" 
        sqlcon.Properties("user id").Value = SqlUserId 
        sqlcon.Properties("password").Value = SqlPassword 
        sqlcon.Open 
        cmd.ActiveConnection = sqlcon 
        cmd.CommandText = sql 
      
        set rs=cmd.Execute 
       Set ExecuteSql = rs
    '应该加上
       set rs=nothing
       set cmd=nothing
       set sqlcon=nothing
      'sqlcon.Close 
      exit function
    Errormsg: MsgBox Error 
      End If 
    End Function 
      

  5.   

    这些到底哪个答案正确呀?是该加入 
    set rs=nothing 
    set cmd=nothing 
    set sqlcon=nothing 
    还是修改一下游标?
    sqlcon.CursorLocation = adUseClient
      

  6.   

    多用户冲突主要就是锁导致的,服务端游标比较容易产生锁定,所以先改游标。
    如果不行,可能你用来数据绑定、或者对 RecordSet 进行了修改,那么需要设法缩短锁定时间,需要具体问题具体对待。