100分请教数据库问题!!!!!!谢谢大家!!!!!

popboylovepw 2005-04-09 08:27:37
我写了一个标准模块,代码如下:

Option Explicit '强制变量显式声明
Global DBCon As New ADODB.Connection '定义数据库连接对象
Global TblRct As New ADODB.Recordset '定义记录集

Public Function ConnectToServer() As Boolean

Set DBCon = New ADODB.Connection
DBCon.ConnectionString = "Provider=SQLReplication.OLEDB"
DBCon.ConnectionTimeout = 100
DBCon.Open
ConnectToServer = True
Exit Function

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

然后在一个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 对象关闭时,操作不被允许!

请大家帮我看看问题出在那里,谢谢大家!!!
...全文
256 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
zyg0 2005-04-13
  • 打赏
  • 举报
回复
Global TblRct As New ADODB.Recordset
ADODB.Recordset最好不要做全局变量,肯定是他的问题
lgxysl 2005-04-13
  • 打赏
  • 举报
回复
对不起,是我写错了:
应该是:

Set TblRct = DBCon .Execute(strSQL)
popboylovepw 2005-04-12
  • 打赏
  • 举报
回复
Set TblRct = Execute(strSQL)
说子程序或函数未定义!有错误啊
lgxysl 2005-04-12
  • 打赏
  • 举报
回复
你的模块有问题,请作如下的修改:

Option Explicit '强制变量显式声明
Global DBCon As New ADODB.Connection '定义数据库连接对象
public TblRct As ADODB.Recordset '定义记录集

Public Function ConnectToServer() As Boolean

Set DBCon = New ADODB.Connection
DBCon.ConnectionString = "Provider=SQLReplication.OLEDB"
DBCon.ConnectionTimeout = 100
DBCon.Open
ConnectToServer = True
Exit Function

Public 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 If

End Function
lgxysl 2005-04-12
  • 打赏
  • 举报
回复
你的模块有问题,请作如下的修改:

Option Explicit '强制变量显式声明
Global DBCon As New ADODB.Connection '定义数据库连接对象
public TblRct As ADODB.Recordset '定义记录集

Public Function ConnectToServer() As Boolean

Set DBCon = New ADODB.Connection
DBCon.ConnectionString = "Provider=SQLReplication.OLEDB"
DBCon.ConnectionTimeout = 100
DBCon.Open
ConnectToServer = True
Exit Function

Public 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 If

End Function

zzzjaychung 2005-04-12
  • 打赏
  • 举报
回复
你在用ODBC测试时应该会KEYIN用户名和密码,
那你的程式里是为什么没有用户名和密码?
OLE的连接PROVIDER里要提供用户密码才可的。

Set DBCon = New ADODB.Connection
DBCon.ConnectionString = "Provider=SQLReplication.OLEDB"
DBCon.ConnectionTimeout = 100
DBCon.Open
popboylovepw 2005-04-12
  • 打赏
  • 举报
回复
不会没有正确打开啊,我用ODBC的时候都可以正常运行增删改查啊,End Function在我的代码上有,帖子上忘了写了。
aohan 2005-04-12
  • 打赏
  • 举报
回复
你的代码中DBCon没有正确打开,所以会报错

另外就代码而言
Public Function ConnectToServer() As Boolean

Set DBCon = New ADODB.Connection
DBCon.ConnectionString = "Provider=SQLReplication.OLEDB"
DBCon.ConnectionTimeout = 100
DBCon.Open
ConnectToServer = True
Exit Function

End Function ' 这里也少了End Function
popboylovepw 2005-04-12
  • 打赏
  • 举报
回复
大哥们,你们的方法我全部试过了,还不行啊,错误依旧,大家再帮我想想,谢谢!
popboylovepw 2005-04-10
  • 打赏
  • 举报
回复
连接是成功的,但就是到TblRct.MoveFirst 这的时候就报错了。
vbman2003 2005-04-10
  • 打赏
  • 举报
回复
Set TblRct = New ADODB.Recordset
TblRct.CursorLocation = adUseClient
TblRct.Open strSQL, DBCon, adOpenDynamic, adLockOptimistic

saiko 2005-04-10
  • 打赏
  • 举报
回复
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 去掉!!!
Hassle 2005-04-09
  • 打赏
  • 举报
回复
修改以后连接成功了吗?
popboylovepw 2005-04-09
  • 打赏
  • 举报
回复
以前的连接数据库是这样的:
DBCon.ConnectionString = "DSN=图书馆管理系统;uid =sa;pwd =;database=library"
运行没有问题,一切正常,功能全部都能实现。
可是我修改成这样以后:
DBCon.ConnectionString = "Provider=SQLReplication.OLEDB"
运行到TblRct.MoveFirst 这的时候就报错了。
popboylovepw 2005-04-09
  • 打赏
  • 举报
回复
连接数据库了,我把ConnectToServer放在主窗体中了,以前的连接数据库是正常的,我是用ODBC做的,刚才改成了DBCon.ConnectionString = "Provider=SQLReplication.OLEDB"就不行了。
popboylovepw 2005-04-09
  • 打赏
  • 举报
回复
我只引用了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
这么写还是不行,错误依旧。
cuilonggang 2005-04-09
  • 打赏
  • 举报
回复
好像没ConnectToServer
另外应 If Err.Number <> 0 Then 因为有时错误号是负的
yangao 2005-04-09
  • 打赏
  • 举报
回复
If QueryData(strSQL) = True Then '调用查询
If TblRct.EOF = False And TblRct.BOF = False Then
'TblRct.MoveFirst '移动到第一条记录
Call ShowDate '显示数据
End If
End If

试试
感觉你这样写很别扭

niece 2005-04-09
  • 打赏
  • 举报
回复
引用了吗

7,762

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧