回 帖 发 新 帖 刷新版面

主题:Access 查询问题


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个回复)

沙发

我发现现在这里提问题
 好多是没答案了 
   高手都忙没时间来论坛
    或者什么愿意!

板凳

If rs("姓名") Like "*" & uyls1.Text & "*" Then

改成  if rs("姓名") like '*" & uyls1.Text & "*'  then

在SQL中使用变量的格式  '" & 变量名 & "' ,外边是单引号不是双引号 ,注意模糊查询的时候,*和单引号和双引号之间不要有空格

3 楼

你说的那个语法不对 
vb里出现红字了

4 楼

是我写的对但是
   我把
If rs("姓名") Like "*" & uyls1.Text & "*" Then
写错了
算我马虎
If rs("姓名") Like "*" & uylspad1.Text & "*" Then

5 楼

老兄不好意思,没看到你的语句是在判断条件里。
你可以把SQL语句换成sql = "select * from  oku where 姓名 like '*" & uyls1.Text & "*' and 职业 = '" & combo2 & "'"
这样查询的结果就是姓名里包含uyls1.text的值且职业等于combo2的值的记录了,就不用在判断了.

实时错误424   要求对象  应该是因为你的uyls1这个文本框的名字写错了,看看窗体上是不是有这个控件,控件的名字是不是一样。如果是这个错误,你在窗体通用模块加上Option Explicit强制变量声明后,应该会提示,变量未声明

6 楼

谢谢你
 我写出来以后 觉的这个代码优化一下但是我不知道怎么优化你帮帮我可以吗?




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 楼

谢谢你的信任,不过我也是菜鸟。仅能在能力范围内提出些许建议
对于你的需求,我不明确,所以无法对你的代码做出具体改动。只能提出实施的思路。
在你的代码中,我发现总是使用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 楼


好像明白点!再看看

我来回复

您尚未登录,请登录后再回复。点此登录或注册