各位,我用的是 SQL SERVER 6.5,一个老版本,程序段如下:
Private Sub Command2_Click()
    Dim Strsql As String
    Dim rsLendTab As ADODB.Recordset
    Dim adoConn As ADODB.Connection
    Set adoConn = New ADODB.Connection
    Set rsLendTab = New ADODB.Recordset    rsLendTab.CursorType = adOpenKeyset
    rsLendTab.LockType = adLockOptimistic
    rsLendTab.CursorLocation = adUseClient    sconnectionstring = "Provider=MS Remote;" & _
                   "Remote Server=\\***.***.***.***;" & _
                   "Remote Provider=MSDASQL;" & _
                   "DSN=数据库名;" & _
                   "Uid=***;" & _
                   "Pwd=***;"    adoConn.Open sconnectionstring
 
    MsgBox "连接成功!"    Strsql = "select * from TableName"
    
'***********    出错处  *****************
    rsLendTab.Open Strsql, adoConn
    
'*****************************************
'错误信息: 实时错误 '4100'
'           无法创建业务对象
'*****************************************
    MsgBox rsLendTab.RecordCountEnd Sub
数据库在另一台机器上。连接都已经过了,创建记录集时出错!我对sql server 6.5 不太了解,还望高手指点!

解决方案 »

  1.   

    Private Sub Command2_Click()
        Dim Strsql As String
        Dim rsLendTab As ADODB.Recordset
        Dim adoConn As ADODB.Connection
        Set adoConn = New ADODB.Connection
        Set rsLendTab = New ADODB.Recordset
        Dim sconnectionstring As String
        rsLendTab.CursorType = adOpenStatic
        rsLendTab.LockType = adLockOptimistic
        rsLendTab.CursorLocation = adUseClient'    sconnectionstring = "Provider=MS Remote;" & _
    '                   "Remote Server=\\***.***.***.***;" & _
    '                   "Remote Provider=MSDASQL;" & _
    '                   "DSN=phsdata;" & _
    '                   "Uid=***;" & _
    '                   "Pwd=***;"
        With adoConn
            .CursorLocation = adUseClient
            .Provider = "sqloledb"
            .Properties("Data Source").Value = "***.***.***.***"
            .Properties("Initial Catalog").Value = "数据库名"
            .Properties("User ID") = "***"
            .Properties("Password") = "***"
        End With
        adoConn.Open    'adoConn.Open sconnectionstring
     
        MsgBox "连接成功!"    Strsql = "select * from tablename"
        
    '***********    出错处  *****************
        rsLendTab.Open Strsql, adoConn
        
    '*****************************************
    '错误信息: 实时错误 '4100'
    '           无法创建业务对象
    '*****************************************
        MsgBox rsLendTab.RecordCountEnd Sub
      

  2.   

    to daviddivad(你真行,居然比我还快! Scorpio):
    谢谢!,但是不行!  
    实时错误 '-2147467259(80004005)'
       [DBNMPNTW] 拒绝访问。
      

  3.   

    Set adoConn = New ADODB.Connection
    Set rsLendTab = New ADODB.Recordset
    去掉以上两句看一下。
      

  4.   

    我运行通过
    请检查你的IP地址是否正确,是否可以PING通,另外检查你的用户名和密码是否正确,同时检查用户权限是否具有访问该数据库(指的是Properties("Initial Catalog").Value = "数据库名")的权限
      

  5.   

    IP地址、用户名、密码都没有问题。
    我的数据库是SQL SERVER 6.5,是不是版本不同,用法不同呢
      

  6.   

    我的是vb6+sp5+sql server7.0+win2000/winxp
      

  7.   

    改了,还是不行。
    我的是vb6+sp5+sql server6.5+win98,服务器是2000。
    sql server6.5 和 sql server7.0 差别好像很大!
      

  8.   

    用dataenvironment试试,或者用ODBC连接看看
      

  9.   

    不知道是不是我的机子上面没装sql server 6.5客户端得原因,我在ODBC里面找不到服务器;在使用adodc控件时也看不到服务器。
      

  10.   

    用ODBC配置SQL SERVER,不用在下拉框里选择服务器,直接填写服务器IP或主机名就行了,然后测试一下ODBC是否测试成功即可。
      

  11.   

    谢谢 daviddivad(你真行,居然比我还快! Scorpio) !我试了一下,可以连接成功。
    我现在在我的机子上安装了一个SQL SERVER 7.0的客户端。之后用您给的程序段执行通过了。对于大部分表都能返回正确数据,但是有的表不正确。有的表只返回一条数据还不正确。而我在服务器上执行SQL 语句时可以看到全部数据,不知道为什么?还有就是我本来用的连接串还是不行,它错在哪里呢?为什么会connect 成功,但select 失败呢?
      

  12.   

    用Ado对象2.5试试看,2.1没用,
      

  13.   

    to  alicky(周松) :那样更不行了,必须set new;
    to  jxhgr(小龙蟹) :用的是ADO2.5
      

  14.   

    我的是vb6+sp5+sql server7.0+win2000/winxp + ADO2.7
      

  15.   

    我想ADO2.5一般就足够了吧。
    主要是不明白为什么会出现 
      1     连接成功访问出错的问题(原来) 和  
      2     部分表数据客户端返回值与在服务器上访问得到的不一样
    这两个问题
      

  16.   

    很可能是Connection的连接操作好没有完成,已经运行到recordset打开代码。
    建议使用异步方式来操作远程数据库:Dim WithEvents adoConn As ADODB.Connection
    Dim ConnOK as BooleanPrivate Sub adoConn_ConnectComplete(ByVal pError As ADODB.Error, adStatus As ADODB.EventStatusEnum, ByVal pConnection As ADODB.Connection)
        If adStatus = adStatusOK Then ConnOK = True
    End SubPrivate Sub adoConn_WillConnect(ConnectionString As String, UserID As String, Password As String, Options As Long, adStatus As ADODB.EventStatusEnum, ByVal pConnection As ADODB.Connection)
    ConnOK = False
    End SubPrivate Sub Command2_Click()
        '......
        adoConn.Open sconnectionstring    Do Until ConnOK
        Loop    MsgBox "连接成功!"    Strsql = "select * from TableName"
        
        rsLendTab.Open Strsql, adoConn    '......
    End Sub
      

  17.   

    to planetike(阿胜) :谢谢  !第一个问题如你所说,解决了。
    to of123() : 我试了一下你的代码,还是不行,大概不是连接的的问题。不过也要谢谢你,
                 我又学了一招:)那位高手能够解释一下第二个问题呢?
      

  18.   


    试一试
    Private Sub Command2_Click()
        Dim Strsql As String
        Dim rsLendTab As ADODB.Recordset
        Dim adoConn As ADODB.Connection
        Set adoConn = New ADODB.Connection
        Set rsLendTab = New ADODB.Recordset
        Set rsLendTab .ActiveConnection = adoConn 
        rsLendTab.CursorType = adOpenKeyset
        rsLendTab.LockType = adLockOptimistic
        rsLendTab.CursorLocation = adUseClient    sconnectionstring = "Provider=MS Remote;" & _
                       "Remote Server=\\***.***.***.***;" & _
                       "Remote Provider=MSDASQL;" & _
                       "DSN=数据库名;" & _
                       "Uid=***;" & _
                       "Pwd=***;"    adoConn.Open sconnectionstring
     
        MsgBox "连接成功!"    Strsql = "select * from TableName"
        
    '***********    出错处  *****************
            rsLendTab.Source = Strsql
                 rsLendTab.Open'*****************************************
      

  19.   

    to  gys_yxr(毛毛) :不行,我试了,这种方法会出现一开始的问题!
    第一个问题已经解决了,
    我现在只想请高手指点一下第二个问题,即:
    2     部分表数据客户端返回值与在服务器上访问得到的不一样!
    还望高手指教!
      

  20.   

    daviddivad(你真行,居然比我还快! Scorpio) 说的对。
    你用用户aaa,密码bbb可以连接到数据库ccc,并不意味着用户aaa可以访问数据库ccc,关键是看aaa对于ccc的权限了。把aaa的访问权限设为ccc的dbo一级的,你试一试保证可以。
      

  21.   

    各位兄弟,问题解决了。是连接字符串的问题。换成
    strCon = "Driver={SQL Server};" & _
                      "Server=***.***.***.***;" & _
                     "Database=testdb;" & _
                     "Uid=****;" & _
                      "Pwd=*******;"
    就行了。
    不过问题是,我是知其然而不知其所以然啊。哪位高手给我解释一下或指点上哪去了解以下问题的详细解释呢:不同的连接字符串的功能,比如说sql server就有好几种连法,都是什么意思呢,有的用Provider=;有的用driver=;
    像这个问题为什么用Provider=;的不行,而用driver=;的就行呢?
      

  22.   

    rsLendTab.CursorType = adOpenKeyset
      

  23.   

    仔细看看ado210.chm文件,会有收获的,由于我硬盘除了问题,所以,没有办法摘录具体我不详细说,因为,问题已经解决,自己找找看看,帮助很大的
      

  24.   

    谢谢shawls 、 daviddivad 、 planetike!谢谢大家!加了50分结贴了!