我写了一个标准模块,代码如下: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 对象关闭时,操作不被允许!请大家帮我看看问题出在那里,谢谢大家!!!
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 对象关闭时,操作不被允许!请大家帮我看看问题出在那里,谢谢大家!!!
If TblRct.EOF = False And TblRct.BOF = False Then
'TblRct.MoveFirst '移动到第一条记录
Call ShowDate '显示数据
End If
End If试试
感觉你这样写很别扭
另外应 If Err.Number <> 0 Then 因为有时错误号是负的
If TblRct.EOF = False And TblRct.BOF = False Then
'TblRct.MoveFirst '移动到第一条记录
Call ShowDate '显示数据
End If
End If
这么写还是不行,错误依旧。
DBCon.ConnectionString = "DSN=图书馆管理系统;uid =sa;pwd =;database=library"
运行没有问题,一切正常,功能全部都能实现。
可是我修改成这样以后:
DBCon.ConnectionString = "Provider=SQLReplication.OLEDB"
运行到TblRct.MoveFirst 这的时候就报错了。
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 去掉!!!
TblRct.CursorLocation = adUseClient
TblRct.Open strSQL, DBCon, adOpenDynamic, adLockOptimistic
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
那你的程式里是为什么没有用户名和密码?
OLE的连接PROVIDER里要提供用户密码才可的。Set DBCon = New ADODB.Connection
DBCon.ConnectionString = "Provider=SQLReplication.OLEDB"
DBCon.ConnectionTimeout = 100
DBCon.Open
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
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
说子程序或函数未定义!有错误啊
应该是:Set TblRct = DBCon .Execute(strSQL)
ADODB.Recordset最好不要做全局变量,肯定是他的问题