【问题标题】:Using result from a multi select listbox as query where clause使用多选列表框的结果作为查询 where 子句
【发布时间】:2018-01-08 06:13:57
【问题描述】:

这是我的第一篇文章,如果我还没有达到所有惯例,请原谅我。

问题如下,我刚开始创建MS Access数据库,我已经很擅长了,我刚刚完成了一个完整的项目,我目前正在创建报告,我正在尝试创建一个带有选项卡控件的过滤器表单,在每个页面上都有一个多选列表框,该列表框预先填充了表格中的数据,我无法使用按钮或类似内容创建过滤器,因为我希望它是动态的,过滤器必须支持多个条件,我正在尝试使用我的代码的结果在查询中使用列表框的选择结果,我创建了一个用逗号分隔的数字字符串(我没有引用这些数字,因为我将它们与数字字段进行比较) .我循环遍历列表框中的所有选定项目,并将它们相互添加,用逗号分隔

lstSel = lstSel & listbox.itemdata(index) &","

然后我使用

截断最后的逗号
lstSel = left(lstSel,Len(lstSel)-1)

然后我将值传递到表单上的文本框中,我试图在查询中使用
where [ID] in(Forms!myForm!myTxtbxResult)
我没有收到任何错误,我重新查询控件和报告但无济于事

【问题讨论】:

  • 看看 Allen Browne 提供的这个提示,绕过任何查询需求:Use a multi-select list box to filter a report
  • 如何问好问题stackoverflow.com/help/how-to-ask,并带你参观stackoverflow.com/tour
  • 它不起作用,因为 Access 将文本框内容视为字符串,而不是一组离散元素。 @Rene 引用的 Allen Browne 文章中显示的方法实际上是动态构建和使用 SQL IN 运算符的唯一方法。代替动态参数化查询,设置 DoCmd.OpenReport 方法的 WHERE CONDITION 参数。
  • 感谢您的回答!我还没有机会尝试...但是感谢您给我指导!

标签: ms-access file-access


【解决方案1】:

看看 Allen Browne 提供的绕过任何查询需求的提示:Use a multi-select list box to filter a report

【讨论】:

  • 关键是in参数中的元素需要用双引号分隔,这是一个保留字符。
【解决方案2】:

我知道这是一个很老的问题,但如果其他人对此感到困惑,我会通过在字符串周围添加单引号来动态使用 IN 运算符。

lstSel = lstSel & listbox.itemdata(index) &","

这将导致查询看起来像这样

Select * From ... IN(str1,str2,str3,...)

这不是 IN() 的正确语法(请参阅 here)。

但是,这-

lstSel = lstSel & "'" & listbox.itemdata(index) & "'" &","

这会显示

Select .... IN('str1','str2','str3',...)

这应该解决问题

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-20
    • 2018-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-07
    • 1970-01-01
    • 2018-12-12
    相关资源
    最近更新 更多