gdhyx1234 发表于 2014-9-4 10:17:27

vb模糊查询提示:对象关闭,不允许操作

书上有个查询例子,加了 do while 循环,改为模糊查询, 提示:对象关闭,不允许操作.我的理解是数据库DBEmp或表emptable没有打开,如果没有打开的话,为什么不加do while 可以查到?代码如下:
   Option Explicit
Dim conn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim cmd As ADODB.Command


Private Sub cmdquery_Click()
Set conn = New ADODB.Connection
Set rs = New ADODB.Recordset
Set cmd = New ADODB.Command

conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
                         "Data Source = F:\21天学通VB实例习题\17.2access数据库\DBEmp.mdb;" & _
                         "Persist Security Info=False"
conn.Open
cmd.CommandType = adCmdText
cmd.ActiveConnection = conn


Do While Not rs.EOF
    If Cboselect.Text = "编号" Then
       cmd.CommandText = "select * from emptable where 编号=" & Val(Txtquery.Text)
    Else
       cmd.CommandText = "select * from emptable where 姓名 like '%" & (Txtquery.Text) & "%'"
    End If
   rs.MoveNext
   Set rs = cmd.Execute
Loop

Set MSHFlexGrid1.DataSource = rs

rs.Close
conn.Close

End Sub

Private Sub Form_Load()
   Cboselect.AddItem "编号"
   Cboselect.AddItem "姓名"
End Sub

   谁能帮我看看,怎么改才能模糊查询?新手不太懂,麻烦说详细一点,最好有代码.谢谢.
在do while 前加上: rs.open "select * from emptable",conn,adopenkeyset程序出现未响应

gdhyx1234 发表于 2014-9-5 10:35:32

不加do while 语句,可以实现模糊查询,但只能查一条记录. 数据库是用的access

sxyufeng 发表于 2014-9-8 12:33:28

gdhyx1234 发表于 2014-9-5 10:35
不加do while 语句,可以实现模糊查询,但只能查一条记录. 数据库是用的access

你对查询的理解偏差。只要查询,肯定会把查询的结构都得到。只是在rs中,每次能访问一个记录。想访问下一个记录,级需要使用rs.movenex,才行。
并且rs每次打开后,必须关闭,rs.close,才能重新打开。

gdhyx1234 发表于 2014-9-9 10:28:48

谢谢 sxyufeng,中秋还来回答我的问题.我也用了do while 和rs.movenext,可出错了(程序见上),这又是哪里的问题?

sxyufeng 发表于 2014-9-9 13:17:55

gdhyx1234 发表于 2014-9-9 10:28
谢谢 sxyufeng,中秋还来回答我的问题.我也用了do while 和rs.movenext,可出错了(程序见上),这又是哪里的问 ...

你的循环用错了。你的循环把打开记录集也给循环了,所以造成上次执行的记录集还没有关闭,就又打开了。
大致思路应该是

rs=*************
do
   rs***
   rs.movenext
while

这个形式。

gdhyx1234 发表于 2014-9-9 16:28:38

谢谢.我在试试

gdhyx1234 发表于 2014-9-12 10:58:59

按sxyufeng的提示,经过几天的努力,终于可以实现模糊查询了.不守新人问题不少,所以新的问题又来了
页: [1]
查看完整版本: vb模糊查询提示:对象关闭,不允许操作