vb中的错误3704 对象关系时,不允许操作,急急急!!! 50

公共模块:Publicusername_OKAsStringPublicFunctionConnectString()AsStringConnectString="Pro... 公共模块:
Public username_OK As String

Public Function ConnectString() As String
ConnectString = "Provider=MSDASQL.1;Persist Security Info=False;User ID=sa;Data Source=library;Initial Catalog=library"
End Function

Public Function ExecuteSQL(ByVal SQL As String, MsgString As String) As ADODB.Recordset
Dim cnn As ADODB.Connection
Dim rst As ADODB.Recordset
Dim sTokens() As String
On Error GoTo ExecuteSQL_Error
sTokens = Split(SQL)
Set cnn = New ADODB.Connection
cnn.Open ConnectString
If InStr("INSERT,DELETE,UPDATE,EXECUTE", UCase$(sTokens(0))) Then
cnn.Execute (SQL)
MsgString = sTokens(0) & " query successful"
Else
Set rst = New ADODB.Recordset
rst.Open Trim$(SQL), cnn, adOpenKeyset, adLockBatchOptimistic
Set ExecuteSQL = rst
MsgString = "查询到" & rst.RecordCount & "条记录"
End If
ExecuteSQL_Exit:
Set rst = Nothing
Set cnn = Nothing
Exit Function

ExecuteSQL_Error:
MsgString = "查询错误:" & Err.Description
Resume ExecuteSQL_Exit

End Function

下面是一个登录的代码:
Option Explicit
Private Sub Form_Load()
main.Hide
addbook.Hide
addlend.Hide
addmanager.Hide
addreader.Hide
End Sub
Private Sub CmdCancel_Click()
username.Text = ""
userpassword.Text = ""
username.SetFocus
End Sub

Private Sub CmdOK_Click()
Dim txtsql As String
Dim mrc As New ADODB.Recordset
Dim msgtext As String

txtsql = "select * form 读者信息 where 证号='" & username.Text & "'"
Set mrc = ExecuteSQL(txtsql, msgtext)
If mrc.EOF Then '/老是显示是这个错误。。。。。。。。。
MsgBox "用户不存在!", , "信息提示"
username.Text = ""
username.SetFocus
Else

If Trim(mrc.Fields("密码")) = Trim(userpassword.Text) Then
username_OK = Trim(userpassword.Text)
Unload Me
main.Show
Else
MsgBox "输入密码不对!请重新输入", , "信息提示"
userpassword.Text = ""
userpassword.SetFocus
End If
End If
End Sub

我觉得可能是数据库连接问题,不过我用Adodc1在其他窗口用ConnectionString测试过,结果显示测试连接成功,可是这到底是什么原因,请高手帮帮忙啊!!!
展开
 我来答
北京钢管中心
2009-06-16 · TA获得超过969个赞
知道小有建树答主
回答量:711
采纳率:0%
帮助的人:0
展开全部
这个错误我碰到的都是,程序在其他地方把数据库的连接关闭了,或者,没有把一个记录集赋值给recordset对象,或者recordset对象被关闭。在代码里没看到数据库连接的语句,是不是放在其他地方了,检查一下。
没使用过楼主读取数据库的方法,我一般是这样的
Public mycon As New ADODB.Connection
Public mycom As New ADODB.Command
Public myrec As New ADODB.Recordset

Public mysql As String

constr = "连接字符串"

mycon.Open constr
'这之前的都放在模块里,在程序开始执行一次,打开数据库。
'执行SQL用了两种方法
Set mycom.ActiveConnection = mycon
dim str as string
str ="SQL语句"
mycom.CommandText = str

Set myrec = mycom.Execute
'上面这是一般的这几句写成个过程,哪用了哪调,传个SQL语句就OK
'下面这个是有时候要数据分页的

mysql = ""
myrec.CursorLocation = adUseClient '设置游标类型为客户端
myrec.Open mysql, mycon, adOpenStatic, adLockPessimistic '打开连接,并设置记录集类型为静态记录集,以便使用recordset的recordcount属性
myrec.pagesize = 12 '设置逻辑页的大小

这样写,不用老是打开关闭记录集,有时地方太多就忘记关闭了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式