主题:Access 查询问题
xakir
[专家分:0] 发布于 2009-03-16 23:42:00
If Combo2.Text <> "全部" And Combo1.Text = "姓名" Then
Form1.g1.ListItems.Clear
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim sql As String
Set cn = New ADODB.Connection
cn.Open "provider=microsoft.jet.oledb.4.0;data source= E:\重要的东西\okuguqi\sandan.mdb;"
sql = "select * from oku"
Set rs = New ADODB.Recordset
rs.Open sql, cn, adOpenForwardOnly, adLockOptimistic
Do While Not rs.EOF
If rs("职业") = Combo2.Text Then
If rs("姓名") Like "*" & uyls1.Text & "*" Then
Dim sss As ListItem
Set sss = Form1.g1.ListItems.Add()
sss.Text = rs("姓名")
sss.SubItems(1) = rs("性别")
sss.SubItems(2) = rs("年龄")
sss.SubItems(3) = rs("学费")
sss.SubItems(4) = rs("入学期")
sss.SubItems(5) = rs("停学期")
sss.SubItems(6) = rs("联系电话")
End If
End If
rs.MoveNext
Loop
rs.Close
cn.Close
Set rs = Nothing
Set cn = Nothing
Form1.Show
我的问题是
窗体上有2个 COMBOBOX combo2 值是数据库中的 职业名称 但是第一个是 全部
combo1 值是 地址 和 姓名
我查询的时候
数据库中的 王小红 等于 text1 里 的值 比如 text1中输入 王 也找出来 或者 小
或 红
但是我按查询的按钮的时候 出现 实时错误424 要求对象
出现错误的语句
If rs("姓名") Like "*" & uyls1.Text & "*" Then
我什么地方写错了帮改改 !
回复列表 (共8个回复)
沙发
xakir [专家分:0] 发布于 2009-03-17 10:02:00
我发现现在这里提问题
好多是没答案了
高手都忙没时间来论坛
或者什么愿意!
板凳
kabc189 [专家分:100] 发布于 2009-03-17 10:18:00
If rs("姓名") Like "*" & uyls1.Text & "*" Then
改成 if rs("姓名") like '*" & uyls1.Text & "*' then
在SQL中使用变量的格式 '" & 变量名 & "' ,外边是单引号不是双引号 ,注意模糊查询的时候,*和单引号和双引号之间不要有空格
3 楼
xakir [专家分:0] 发布于 2009-03-17 10:36:00
你说的那个语法不对
vb里出现红字了
4 楼
xakir [专家分:0] 发布于 2009-03-17 11:02:00
是我写的对但是
我把
If rs("姓名") Like "*" & uyls1.Text & "*" Then
写错了
算我马虎
If rs("姓名") Like "*" & uylspad1.Text & "*" Then
5 楼
kabc189 [专家分:100] 发布于 2009-03-17 11:17:00
老兄不好意思,没看到你的语句是在判断条件里。
你可以把SQL语句换成sql = "select * from oku where 姓名 like '*" & uyls1.Text & "*' and 职业 = '" & combo2 & "'"
这样查询的结果就是姓名里包含uyls1.text的值且职业等于combo2的值的记录了,就不用在判断了.
实时错误424 要求对象 应该是因为你的uyls1这个文本框的名字写错了,看看窗体上是不是有这个控件,控件的名字是不是一样。如果是这个错误,你在窗体通用模块加上Option Explicit强制变量声明后,应该会提示,变量未声明
6 楼
xakir [专家分:0] 发布于 2009-03-17 12:51:00
谢谢你
我写出来以后 觉的这个代码优化一下但是我不知道怎么优化你帮帮我可以吗?
If Combo2.Text <> "全部" And Combo1.Text = "姓名" Then
Form1.g1.ListItems.Clear
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim sql As String
Set cn = New ADODB.Connection
cn.Open "provider=microsoft.jet.oledb.4.0;data source= E:\重要的东西\okuguqi\sandan.mdb;"
sql = "select * from oku"
Set rs = New ADODB.Recordset
rs.Open sql, cn, adOpenForwardOnly, adLockOptimistic
Do While Not rs.EOF
If rs("职业") = Combo2.Text Then
If rs("姓名") Like "*" & uylspad1.Text & "*" Then
Dim sss As ListItem
Set sss = Form1.g1.ListItems.Add()
sss.Text = rs("姓名")
sss.SubItems(1) = rs("性别")
sss.SubItems(2) = rs("年龄")
sss.SubItems(3) = rs("学费")
sss.SubItems(4) = rs("入学期")
sss.SubItems(5) = rs("停学期")
sss.SubItems(6) = rs("联系电话")
End If
End If
rs.MoveNext
Loop
rs.Close
cn.Close
Set rs = Nothing
Set cn = Nothing
Form1.Show
End If
'
'
'adiris tin izdax
'
'
If Combo2.Text <> "全部" And Combo1.Text = "地址" Then
Form1.g1.ListItems.Clear
Dim cn1 As ADODB.Connection
Dim rs1 As ADODB.Recordset
Dim sql1 As String
Set cn1 = New ADODB.Connection
cn1.Open "provider=microsoft.jet.oledb.4.0;data source= E:\重要的东西\okuguqi\sandan.mdb;"
sql1 = "select * from oku"
Set rs1 = New ADODB.Recordset
rs1.Open sql1, cn1, adOpenForwardOnly, adLockOptimistic
Do While Not rs1.EOF
If rs1("职业") = Combo2.Text Then
If rs1("地址") Like "*" & uylspad1.Text & "*" Then
Dim sss1 As ListItem
Set sss1 = Form1.g1.ListItems.Add()
sss1.Text = rs1("姓名")
sss1.SubItems(1) = rs1("性别")
sss1.SubItems(2) = rs1("年龄")
sss1.SubItems(3) = rs1("学费")
sss1.SubItems(4) = rs1("入学期")
sss1.SubItems(5) = rs1("停学期")
sss1.SubItems(6) = rs1("联系电话")
End If
End If
rs1.MoveNext
Loop
rs1.Close
cn1.Close
Set rs1 = Nothing
Set cn1 = Nothing
Form1.Show
End If
'BARLIK adris
'
'
'
If Combo2.Text = "全部" And Combo1.Text = "地址" Then
Form1.g1.ListItems.Clear
Dim cn2 As ADODB.Connection
Dim rs2 As ADODB.Recordset
Dim sql2 As String
Set cn2 = New ADODB.Connection
cn2.Open "provider=microsoft.jet.oledb.4.0;data source= E:\重要的东西\okuguqi\sandan.mdb;"
sql2 = "select * from oku"
Set rs2 = New ADODB.Recordset
rs2.Open sql2, cn2, adOpenForwardOnly, adLockOptimistic
Do While Not rs2.EOF
If rs2("地址") Like "*" & uylspad1.Text & "*" Then
Dim sss2 As ListItem
Set sss2 = Form1.g1.ListItems.Add()
sss2.Text = rs2("姓名")
sss2.SubItems(1) = rs2("性别")
sss2.SubItems(2) = rs2("年龄")
sss2.SubItems(3) = rs2("学费")
sss2.SubItems(4) = rs2("入学期")
sss2.SubItems(5) = rs2("停学期")
sss2.SubItems(6) = rs2("联系电话")
End If
rs2.MoveNext
Loop
rs2.Close
cn2.Close
Set rs1 = Nothing
Set cn1 = Nothing
Form1.Show
End If
'
'barlik isim
'
'
'
If Combo2.Text = "全部" And Combo1.Text = "姓名" Then
Form1.g1.ListItems.Clear
Dim cn3 As ADODB.Connection
Dim rs3 As ADODB.Recordset
Dim sql3 As String
Set cn3 = New ADODB.Connection
cn3.Open "provider=microsoft.jet.oledb.4.0;data source= E:\重要的东西\okuguqi\sandan.mdb;"
sql3 = "select * from oku"
Set rs3 = New ADODB.Recordset
rs3.Open sql3, cn3, adOpenForwardOnly, adLockOptimistic
Do While Not rs3.EOF
If rs3("姓名") Like "*" & uylspad1.Text & "*" Then
Dim sss3 As ListItem
Set sss3 = Form1.g1.ListItems.Add()
sss3.Text = rs3("姓名")
sss3.SubItems(1) = rs3("性别")
sss3.SubItems(2) = rs3("年龄")
sss3.SubItems(3) = rs3("学费")
sss3.SubItems(4) = rs3("入学期")
sss3.SubItems(5) = rs3("停学期")
sss3.SubItems(6) = rs3("联系电话")
End If
rs3.MoveNext
Loop
rs3.Close
cn3.Close
Set rs3 = Nothing
Set cn3 = Nothing
Form1.Show
End If
7 楼
kabc189 [专家分:100] 发布于 2009-03-17 14:46:00
谢谢你的信任,不过我也是菜鸟。仅能在能力范围内提出些许建议
对于你的需求,我不明确,所以无法对你的代码做出具体改动。只能提出实施的思路。
在你的代码中,我发现总是使用select * from oku查出oku表中的所有内容,然后在循环中筛选符合条件的信息,这是不对的,假如,表中有1000条记录,这并不多,那么你就要循环1000次,而实际,可能只有1条是符合的,即使,符合条件的一条也没有,仍然要循环1000次,这中消耗是不需要的。你应该在执行查询的时候就去掉不符合条件的内容。比如,你要查询姓张的人所有的资料,假定数据库中表示姓名的字段名是student_name,表名是student那么sql语句应该这么写,select * from student where student_name like '张*' 如果是使用变量作条件,比如text1.text,那就这么写select * from student where student_name like '" & text1.text & "*',如果是查姓张,住址中包含西安的人的所有资料,假设表示地址的字段名为address,也在stundent表中的话 ,那就写成select * from student where student_name like '张*' and address like '*西安*'这样的话,数据库中有多少条符合的就查了多少条,不会有不和要求的记录被返回到记录集
这是很简单的SQL语句,你随便找本书都有,如果赶时间的话,我最近SQL看了那么一点点,你可以写清需求后,发到359594025@qq.com , 帮你看看
8 楼
alfa52374 [专家分:0] 发布于 2009-03-27 20:34:00
好像明白点!再看看
我来回复