Private Sub Command4_Click() '图书查询按钮触发事件
If (Text1.Text = "") And (Text2.Text = "") Then
MsgBox("图书名称或主编不能同时为空,二者请选一个输入进行查询", , "系统提示")
Exit Sub
End If
Dim conn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim Strcon As String
Dim strSQL As String
'这里无需使用那么多的变量,占内存。
Strcon = "Provider=Microsoft.Jet.OLEDB.4.0;"
Strcon = Strcon & "Data Source=E:\vb\图书书架.mdb;"
Strcon =Strcon & "Jet OLEDB:Database Password="
conn.Open Strcon
'查询连接字符串,你写的实在是太...
strSQL="select * from 图书登记 where 图书名称='" & Trim(Text1) & "' and 主编='" & Trim(Text2) & "'"
rs.open strSQL,conn
If rs.EOF and rs.BOF then
msgbox "查无此书"
Text1=""
Text2=""
Text1.Setfource
else
'你的那个Adodc1出现的实在是有些莫名其妙.
msgbox "查到了"
'在Text3中显示查询到的书籍的ID号,即字段ID的值,以下同理。
Text3=rs.Fields("ID")
Text4=rs.fields("出版社")
Text5=rs.Fields("定价")
end if
'关闭游标
rs.close
'释放游标所占内存
set rs=nothing
'关闭连接对象
conn.close
'释放连接对象所占内存
set conn=nothing
End Sub
'补充:
'数据库查询可以用中文表头,但是最好还是使用英文的。
首先连接数据库:
Dim strPTR As String
strPTR = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & "E:\vb\图书书架.mdb"
db.Open strPTR
第二步连接数据表:
1、基本查询语句,查询多条记录,可以DO语句
strSQL = "select * from 图书登记"
RS.Open strSQL, db, 2, 2
2、有条件查询语句,可能是一条记录,也可能有多条记录,可以DO循环语句
strSQL = "select * from 图书登记 where 图书名称='" & Text1.Text & "' or 主编 = '" & Text2.Text & "'
RS.Open strSQL, db, 2, 2
3、DO循环语句读记录
Do While Not RS.EOF
Text1(i).Text = RS!图书名称
Text2(i).Text = RS!主编
Text3(i).Text = RS!出版社
Text4(i).Text = RS!定价
Text5(i).Text = RS!ID
RS.MoveNext
Loop
4、关闭数据库连接
RS.Close
Set RS = Nothing
db.Close
Set db = Nothing
你的SQL语句写得有问题啊,感觉写的很乱,比如:
strSQL = "select * Tsmc=图书登记.图书名称,ZB=图书登记.主编"
strSQL = "select * from 图书登记 "
strSQL = "where rs!Tsmc=" & Val(T1) & " And rs!zb = " & Val(T2) & ""
像上面这样写有什么意义呢?
还有
strSQL = "select ID,图书名称,主编,出版社,定价 from 图书登记 "
可以这样写 strSQL="select * from 图书登记 where 图书(名称 = T1 Or 主编 = T2 );"
然后再判断一下查询结果是否为空。