我写了一个标准模块,代码如下:Option Explicit                          '强制变量显式声明
Global DBCon As New ADODB.Connection     '定义数据库连接对象
Global TblRct As New ADODB.Recordset     '定义记录集Public Function ConnectToServer() As BooleanSet DBCon = New ADODB.Connection
DBCon.ConnectionString = "Provider=SQLReplication.OLEDB"
DBCon.ConnectionTimeout = 100
DBCon.Open
ConnectToServer = True
Exit FunctionPublic Function QueryData(ByVal strSQL As String) As Boolean     '查询数据库
Set TblRct = New ADODB.Recordset 
Call TblRct.Open(strSQL, DBCon, adOpenDynamic, adLockOptimistic, -1)
If Err.Number > 0 Then
Err.Clear
QueryData = False
Else
QueryData = True
End If
End Function然后在一个FORM中调用,代码如下:Private Sub Form_Load()
Dim strSQL As String  '定义查询语句
strSQL = "select * from books"  '查询语句
If QueryData(strSQL) = True Then  '调用查询
TblRct.MoveFirst        '移动到第一条记录
Call ShowDate           '显示数据
End If
End Sub
问题是:当运行到TblRct.MoveFirst这时,出现错误,错误信息为:实时错误3704  对象关闭时,操作不被允许!请大家帮我看看问题出在那里,谢谢大家!!!

解决方案 »

  1.   

    If QueryData(strSQL) = True Then  '调用查询
    If TblRct.EOF = False And TblRct.BOF = False Then
    'TblRct.MoveFirst        '移动到第一条记录
    Call ShowDate           '显示数据
    End If
    End If试试
    感觉你这样写很别扭
      

  2.   

    好像没ConnectToServer
    另外应 If Err.Number <> 0 Then  因为有时错误号是负的
      

  3.   

    我只引用了Microsoft ActiveX Data Objects 2.6 Libraty 还需要引用别的吗??If QueryData(strSQL) = True Then  '调用查询
    If TblRct.EOF = False And TblRct.BOF = False Then
    'TblRct.MoveFirst        '移动到第一条记录
    Call ShowDate           '显示数据
    End If
    End If
    这么写还是不行,错误依旧。
      

  4.   

    连接数据库了,我把ConnectToServer放在主窗体中了,以前的连接数据库是正常的,我是用ODBC做的,刚才改成了DBCon.ConnectionString = "Provider=SQLReplication.OLEDB"就不行了。
      

  5.   

    以前的连接数据库是这样的:
    DBCon.ConnectionString = "DSN=图书馆管理系统;uid =sa;pwd =;database=library"
    运行没有问题,一切正常,功能全部都能实现。
    可是我修改成这样以后:
    DBCon.ConnectionString = "Provider=SQLReplication.OLEDB"
    运行到TblRct.MoveFirst 这的时候就报错了。
      

  6.   

    连接是成功的,但就是到TblRct.MoveFirst 这的时候就报错了。
      

  7.   

    Public Function QueryData(ByVal strSQL As String) As Boolean     '查询数据库
    Set TblRct = New ADODB.Recordset 
    Call TblRct.Open(strSQL, DBCon, adOpenDynamic, adLockOptimistic, -1)
    If Err.Number > 0 Then
    Err.Clear
    QueryData = False
    Else
    QueryData = True
    End If
    End Function你把此过程中的第2行,即Set TblRct = New ADODB.Recordset  去掉!!!
      

  8.   

    Set TblRct = New ADODB.Recordset 
    TblRct.CursorLocation = adUseClient
    TblRct.Open strSQL, DBCon, adOpenDynamic, adLockOptimistic
      

  9.   

    你的代码中DBCon没有正确打开,所以会报错另外就代码而言
    Public Function ConnectToServer() As BooleanSet DBCon = New ADODB.Connection
    DBCon.ConnectionString = "Provider=SQLReplication.OLEDB"
    DBCon.ConnectionTimeout = 100
    DBCon.Open
    ConnectToServer = True
    Exit FunctionEnd Function                         ' 这里也少了End Function
      

  10.   

    不会没有正确打开啊,我用ODBC的时候都可以正常运行增删改查啊,End Function在我的代码上有,帖子上忘了写了。
      

  11.   

    你在用ODBC测试时应该会KEYIN用户名和密码,
    那你的程式里是为什么没有用户名和密码?
    OLE的连接PROVIDER里要提供用户密码才可的。Set DBCon = New ADODB.Connection
    DBCon.ConnectionString = "Provider=SQLReplication.OLEDB"
    DBCon.ConnectionTimeout = 100
    DBCon.Open
      

  12.   

    你的模块有问题,请作如下的修改:Option Explicit                          '强制变量显式声明
    Global DBCon As New ADODB.Connection     '定义数据库连接对象
    public TblRct As ADODB.Recordset     '定义记录集Public Function ConnectToServer() As BooleanSet DBCon = New ADODB.Connection
    DBCon.ConnectionString = "Provider=SQLReplication.OLEDB"
    DBCon.ConnectionTimeout = 100
    DBCon.Open
    ConnectToServer = True
    Exit FunctionPublic Function QueryData(ByVal strSQL As String) As Boolean     '查询数据库
     on error resume next
     Err.Clear
     set TblRct=execute(strSQL) If not TblRct.EOF and Err.Number  Then
       QueryData = False
     Else
      QueryData = True
     End IfEnd Function
      

  13.   

    你的模块有问题,请作如下的修改:Option Explicit                          '强制变量显式声明
    Global DBCon As New ADODB.Connection     '定义数据库连接对象
    public TblRct As ADODB.Recordset     '定义记录集Public Function ConnectToServer() As BooleanSet DBCon = New ADODB.Connection
    DBCon.ConnectionString = "Provider=SQLReplication.OLEDB"
    DBCon.ConnectionTimeout = 100
    DBCon.Open
    ConnectToServer = True
    Exit FunctionPublic Function QueryData(ByVal strSQL As String) As Boolean     '查询数据库
     on error resume next
     Err.Clear
     set TblRct=execute(strSQL) If not TblRct.EOF and Err.Number=0  Then
       QueryData = False
     Else
      QueryData = True
     End IfEnd Function
      

  14.   

    Set TblRct = Execute(strSQL)
    说子程序或函数未定义!有错误啊
      

  15.   

    对不起,是我写错了:
    应该是:Set TblRct = DBCon .Execute(strSQL)
      

  16.   

    Global TblRct As New ADODB.Recordset 
     ADODB.Recordset最好不要做全局变量,肯定是他的问题