VB里数据库SQL查询的问题

我知道下面的代码有内行人眼里有不少问题,小弟初入此门让各位见笑了,请多多指教!我建的数据库里有一个“图书登记”的表,表里里五个字段,分别是:ID、图书名称、主编、出版社、... 我知道下面的代码有内行人眼里有不少问题,小弟初入此门让各位见笑了,请多多指教!
我建的数据库里有一个“图书登记”的表,表里里五个字段,分别是:ID、图书名称、主编、出版社、定价,ID为主键。
期望的查询结果是:在Text1输入书名或者在Text2里输入主编(即按书名和主编查询),如果数据库里有此记录,则在数据库里作为焦点显示,并且弹出MsgBox提示有此记录,否则提示无此记录,其查询按钮全部代码如下,请内行人给修改一下,能符合上面的条件,非常感谢!!

Private Sub Command4_Click() '图书查询按钮触发事件

If (Text1.Text = "") And (Text2.Text = "") Then '判断text1~2是否为空
fm = MsgBox("图书名称或主编不能同时为空,二者请选一个输入进行查询", , "系统提示") 'MsgBox赋值给fm
End If
If fm = 1 Then
Text1.SetFocus

Exit Sub
Else
End If
Dim conn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim Str1 As String
Dim Str2 As String
Dim Str3 As String
T1 = Text1.Text
T2 = Text2.Text
Text1.SetFocus

Str1 = "Provider=Microsoft.Jet.OLEDB.4.0;"
Str2 = "Data Source=E:\vb\图书书架.mdb;"
Str3 = "Jet OLEDB:Database Password="
conn.Open Str1 & Str2 & Str3

strSQL = "select * Tsmc=图书登记.图书名称,ZB=图书登记.主编"
strSQL = "select * from 图书登记 "
strSQL = "where rs!Tsmc=" & Val(T1) & " And rs!zb = " & Val(T2) & ""

If Tsmc = Val(T1) Or zb = Val(T2) Then

strSQL = "select ID,图书名称,主编,出版社,定价 from 图书登记 "
rs.Open strSQL, conn, 3, 3

MsgBox "查询系统记录有您需要的图书", , "系统提示"
Adodc1.Refresh

Else

MsgBox ("查无此书")
rs.Close
conn.Close
Exit Sub
End If
Text1.Text = ""
Text2.Text = ""
Text3.Text = ""
Text4.Text = ""
Text5.Text = ""
Exit Sub
End Sub
补充一下,数据库查询里是不是不能用中文表头?如果是该如何解决?请指教~~
另外如果全部功能能正常实现,并且注释很清楚(能让我明白),还可追加30分!!!
展开
 我来答
白木道人
2009-10-12 · TA获得超过1299个赞
知道小有建树答主
回答量:767
采纳率:0%
帮助的人:524万
展开全部
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

'补充:
'数据库查询可以用中文表头,但是最好还是使用英文的。
七鑫易维信息技术
2024-09-02 广告
Play Video 七鑫易维是致力于机器视觉和人工智能领域的高新科技企业,迄今已专注眼球追踪技术的研发、创新与应用超过14年,拥有完全自主知识产权,全球专利总量655余项。 作为眼球追踪技术领域的全球知名品牌,七鑫易维的产品体系覆盖眼动分... 点击进入详情页
本回答由七鑫易维信息技术提供
百度网友2ca1c0f24
2009-10-12 · TA获得超过2036个赞
知道大有可为答主
回答量:4364
采纳率:0%
帮助的人:3435万
展开全部
首先连接数据库:
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
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Escube
2009-10-12 · 超过24用户采纳过TA的回答
知道答主
回答量:133
采纳率:0%
帮助的人:89.3万
展开全部
你的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 );"
然后再判断一下查询结果是否为空。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式