设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

12下一页
返回列表 发新帖
查看: 3993|回复: 13

[Access本身] 列表框和文本框混合一起,如何实现查询?

[复制链接]
发表于 2019-5-11 20:44:57 | 显示全部楼层 |阅读模式
本帖最后由 snryga 于 2019-5-11 20:45 编辑

如何将列表框和文本框(或组合框)混合在一起查询子窗体,请大侠帮忙改写一下查询语句?谢谢!!!

附件中前3个是列表框,最后一个是文本框。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
发表于 2019-5-12 14:29:31 | 显示全部楼层
把里面的strWhere改成left(strWhere,len(strWhere)-1)再试试。
  1. Private Sub Command4_Click()
  2.     Dim strSQl As String
  3.     Dim strWhere As String
  4.     Dim ctl As Control
  5.     Dim varI As Variant
  6.     strSQl = "select * from 设备 where True "
  7.     If Me.设备名称.ItemsSelected.Count > 0 Then
  8.         Set ctl = Me.设备名称
  9.         strWhere = ""
  10.         For Each varI In ctl.ItemsSelected
  11.             strWhere = strWhere & "'" & ctl.Column(0, varI) & "',"
  12.         Next
  13.         strSQl = strSQl & " And 设备名称 in (" & Left(strWhere, Len(strWhere) - 1) & ")  "
  14.     End If
  15.         If Me.型号.ItemsSelected.Count > 0 Then
  16.         Set ctl = Me.型号
  17.         strWhere = ""
  18.         For Each varI In ctl.ItemsSelected
  19.             strWhere = strWhere & "'" & ctl.Column(0, varI) & "',"
  20.         Next
  21.         strSQl = strSQl & " And 型号 in (" & Left(strWhere, Len(strWhere) - 1) & ")  "
  22.     End If
  23.     If Me.生产厂家.ItemsSelected.Count > 0 Then
  24.         Set ctl = Me.生产厂家
  25.         strWhere = ""
  26.         For Each varI In ctl.ItemsSelected
  27.             strWhere = strWhere & "'" & ctl.Column(0, varI) & "',"
  28.         Next
  29.         strSQl = strSQl & " And 生产厂家 in (" & Left(strWhere, Len(strWhere) - 1) & ")  "
  30.     End If
  31.    
  32.     Debug.Print strSQl
  33.     Me.Child5.Form.RecordSource = strSQl

  34. End Sub
复制代码



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
 楼主| 发表于 2019-5-12 15:21:23 | 显示全部楼层
没有对呢,设备名称、型号、生产厂家是列表框,我需要的是再增加文本框“使用单位”的查询
发表于 2019-5-12 23:40:24 | 显示全部楼层
同样道理的。先判断文本框是否为空,如果不为空,再把strSQL与文本框拼接一下,如果为空,则直接使用前面的strSQL。
大体这样:
strSQL=strSQL & IIF(IsNull(txt文本),"",txt文本)
当然,你也可以写成if,例如:
if IsNull(txt文本)=False then
    strSQL=strSQL & txt文本
end if
 楼主| 发表于 2019-5-13 09:07:01 | 显示全部楼层
If Me.使用单位.ItemsSelected.Count > 0 Then
        Set ctl = Me.使用单位
        strWhere = ""
        For Each varI In ctl.ItemsSelected
            strWhere = strWhere & "'" & ctl.Column(0, varI) & "',"
        Next
        strSQl = strSQl & IIf(IsNull(Me.使用单位), "", Me.使用单位)
    End If

提示出错,“ItemsSelected”
发表于 2019-5-13 15:14:25 | 显示全部楼层
snryga 发表于 2019-5-13 09:07
If Me.使用单位.ItemsSelected.Count > 0 Then
        Set ctl = Me.使用单位
        strWhere = ""

你放if里面是几个意思?不是应该另起一行直接判断文本框的吗?看来你并没有理解这段代码啊(不会是抄别人的吧?)。



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
 楼主| 发表于 2019-5-13 21:37:29 | 显示全部楼层
这个还真是抄的
 楼主| 发表于 2019-5-13 23:33:04 | 显示全部楼层
本帖最后由 snryga 于 2019-5-13 23:40 编辑

再问一个问题,如果是在查询中参数查询条件。在窗体代码中就只需一句进行更新语句,查询中条件如下:
Like IIf(IsNull([Forms]![统计]![型号]),'*','*' & [Forms]![统计]![型号] & '*')

如果是这样,那么在窗体中又要使用“列表框”,该如何写代码呢?
发表于 2019-5-14 14:55:38 | 显示全部楼层
snryga 发表于 2019-5-13 23:33
再问一个问题,如果是在查询中参数查询条件。在窗体代码中就只需一句进行更新语句,查询中条件如下:
Like ...

建议统一吧。
要么用查询,要么有筛选(这个例子用的是筛选),而不要混着用。虽然从程序的角度来看,这并不存在做不到的情况,但从业务逻辑理解上来看,很容易引起混乱。
 楼主| 发表于 2019-5-14 15:10:59 | 显示全部楼层
谢谢!!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-3-29 17:23 , Processed in 0.098831 second(s), 35 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表