rivate Sub cmdOK_Click()
'注册新用户Dim cnn1 As ADODB.Connection
Dim AddUser As New ADODB.Recordset
Dim SqlStr As String
Dim DBstr As String
Dim UsrName As String
Dim UsrPwd As String
Dim strCnn As String    '与数据库连接
    Set cnn1 = New ADODB.Connection
    strCnn = "Provider = SQLOLEDB; Data Source = localhost ;User ID = sa; & _
    Initial catalog = wastebook ;Password = ;"
    cnn1.Open strCnn    '与表连接
    Set AddUser = New ADODB.Recordset
    AddUser.CursorType = adOpenKeyset
    AddUser.LockType = adLockOptimistic
××    AddUser.Open "UserInfo", cnn1, adOpenForwardOnly, adLockOptimistic
End Sub
以上代码通过,于是我新建了一个模块,并Public g_Conn As ADODB.Connection 把g_Conn设为全局变量,在模块中
'建立连接
Set g_Conn = New ADODB.Connection
strCnn = "Provider = SQLOLEDB; Data Source = ServerName ;User ID = UserName;" & _
"Initial catalog = DBName ;Password = UserPwd; "
g_Conn.Open strCnn
而把上面与数据库的连接代码去掉,运行就会报错“连接无法用于执行此操作。在此上下文中它可能已经被关闭或无效。错误的是带××的那行,请大家帮忙,谢谢:)

解决方案 »

  1.   

    Set g_Conn = New ADODB.Connection
    strCnn = "Provider = SQLOLEDB; Data Source = ServerName ;User ID = UserName;" & _
    "Initial catalog = DBName ;Password = UserPwd; "
    g_Conn.Open strCnn
     放在那里都不应该错呀
      

  2.   

    AddUser.Open "UserInfo", g_Conn , adOpenForwardOnly, adLockOptimistic
      

  3.   

    Set AddUser = New ADODB.Recordset
       AddUser.Open "UserInfo", g_Conn, adOpenForwardOnly, adLockOptimistic
    这句我也有的啊,不过错误好像就是在这一行
      

  4.   

    是不是
    Set g_Conn = New ADODB.Connection
    strCnn = "Provider = SQLOLEDB; Data Source = ServerName ;User ID = UserName;" & _
    "Initial catalog = DBName ;Password = UserPwd; "
    g_Conn.Open strCnn
    要放在一个函数里面?直接放在模块里面可以吗?我对模块的概念还不是最清楚
      

  5.   

    Dim g_Conn As ADODB.Connection '把Public声明改用Dim试试看Set g_Conn = New ADODB.Connection
    strCnn = "Provider = SQLOLEDB; Data Source = ServerName ;User ID = UserName;" & _
    "Initial catalog = DBName ;Password = UserPwd; "
    g_Conn.Open strCnn
      

  6.   

    '添加一个Module
    Dim g_Conn As ADODB.Connection '把Public声明改用Dim试试看
    Sub Main()
    Set g_Conn = New ADODB.Connection
    strCnn = "Provider = SQLOLEDB; Data Source = ServerName ;User ID = UserName;" & _
    "Initial catalog = DBName ;Password = UserPwd; "
    g_Conn.Open strCnn
    End Sub'----下面是在Form中使用
    Private Sub cmdOK_Click()
    '注册新用户Dim AddUser As New ADODB.Recordset
    Dim SqlStr As String
    Dim DBstr As String
    Dim UsrName As String
    Dim UsrPwd As String
    Dim strCnn As String
        '与表连接
        Set AddUser = New ADODB.Recordset
        AddUser.CursorType = adOpenKeyset
        AddUser.LockType = adLockOptimistic
        AddUser.Open "UserInfo", strCnn, adOpenForwardOnly, adLockOptimistic
    End Sub
      

  7.   

    我感觉你的错误是出在新声明的Connection对象名为strCnn,而你原来使用的是cnn1因此出错. 检查一下看看 .
      

  8.   

    AddUser.Open "UserInfo", strCnn, adOpenForwardOnly, adLockOptimistic
    End Sub第二个参数为strCnn?
      

  9.   

    sorry,没看清楚
    你的Connection对象名是g_Conn
      

  10.   

    不好意思,刚才看错了.应该是这样
     AddUser.Open "UserInfo",  g_Conn, adOpenForwardOnly, adLockOptimistic
      

  11.   

    我觉得g_Conn才是连接对象啊?而且设为全局可以让其它地方都用
    strCnn是一个string,用来存储与数据库的连接方式,用户名,密码等信息
    而且strCnn并不是全局的,只在模块中定义过,那FORM中怎么使用它呢?
      

  12.   

    哦,我也这么想,不过还是不行,我要晕了:(
    今天才接触ADO,来了个下马威
      

  13.   

    你在模块中添加以下代码
    Dim g_Conn As ADODB.ConnectionSub Main()
    Set g_Conn = New ADODB.Connection
    strCnn = "Provider = SQLOLEDB; Data Source = ServerName ;User ID = UserName;" & _
    "Initial catalog = DBName ;Password = UserPwd; "
    g_Conn.Open strCnn
    End Sub然后修改工程属性,将开始对象设定为 Main()
      

  14.   

    你的strCnn有问题
    strCnn = "Provider = SQLOLEDB; Data Source = ServerName ;User ID = UserName;" & _
    "Initial catalog = DBName ;Password = UserPwd; "
    ........ServerName, UserName, DBName, UserPwd ??
    用这句
    strCnn = "Provider = SQLOLEDB; Data Source = localhost ;User ID = sa; & _
        Initial catalog = wastebook ;Password = ;"
      

  15.   

    Dim ServerName As String, DBName As String, UserName As String, UserPwd As String
    Dim strCnn As String'数据库相关信息
    ServerName = "localhost"
    DBName = "wastebook"
    UserName = "sa"
    UserPwd = " "
    这是我定义的。
    用你前面的办法试了一下,改成从sub main开始运行,不过VB就没有响应了,我导出成exe文件,运行等了一会儿然后跳出来错误信息“运行时错误,【DBNETLIB】connectionOpen(connect())】SQL Server不存在或拒绝访问
      

  16.   

    .....strCnn = "Provider = SQLOLEDB; Data Source = " & ServerName & ";User ID = " & UserName & ";Initial catalog = " & DBName & ";Password = " & UserPwd & ";"
      

  17.   

    你的strCnn组成不正确,ServerName, UserName, DBName, UserPwd 这四个都是变量,需要用上面那种方式连接才可以。
      

  18.   

    &这个符号在这里的作用是?
    好像还是不行
      

  19.   

    &是字符串连接符, 这样吧,你把工程文件打包发给我一份,我帮你看看[email protected]
      

  20.   

    Public g_Conn As new ADODB.Connection 
    'Set g_Conn = New ADODB.Connection '不要这句
    strCnn = "Provider = SQLOLEDB; Data Source = ServerName ;User ID = UserName;" & _
    "Initial catalog = DBName ;Password = UserPwd; "
    g_Conn.Open strCnn
      

  21.   

    cnn1 .close
    是不是没有关闭连接
    以后的连接就出错了