MS Access从ListBox中检索值

问题描述 投票:0回答:1

更新:3/20/2019在子线程对话(下面)之后,我重命名了ListBox。 ItemsSelected属性WORKS。值仍然在代码中返回NULL


这是我第一次在Access中处理多选列表。我有一个包含下拉菜单,复选框和列表框的报告表单。列表框包含近70个项目 - 我们称之为“城市”。

ListBox允许多个选择。在VBA中,我将从表单上的其他控件中获取每个参数,以创建一个巨大的WHERE条件来为我的报表提供信息。

问题是Access不会读取从ListBox中选择的值。当我单步执行该行代码时,该值为NULL。

至今:

Dim s As Variant
s = Me.City.Value & "" 

这是我知道错误转向的地方,但是,之前没有处理过多选ListBox,我不知道获取值的语法。

下一步:检查列表“s”中是否选择了值:

If s <> "" Then

检查当前WHERE条件中的其他参数。如果不存在,那么

If c.WhereCondition = "" Then
c.WhereCondition =

通过将List值(字符串)与Source表中的等效字段的Yes / No值进行比较来设置WHERE Con​​dition。

我必须将List值与表中的70个字段进行比较 - 以拉出那些匹配的记录。

不,没有一个领域 - 比如城市,有70个可能的值。相反,70个可能的城市中的每一个都有自己的是/否字段。我继承了这个DB。这就是它的构建方式。

目前,我的尝试看起来像:

c.WhereCondition = "( City1 = -1 OR City2 = -1 OR City3 = -1 OR .....)

`如果当前WHERE子句中有参数,则将List与Source表中的值进行比较,并将AND APPEND结果与带有“AND”的WHERE条件进行比较

ELSE
       c.WhereCondition = c.WhereCondition & " AND (City1 = -1 OR City2 = -1, OR ...)

    End If
    End If

我希望我能够很好地解释这一点。第一个问题是读取值。如果没有这个,我不知道我的比较尝试是对还是错。

vba ms-access access-vba
1个回答
0
投票

这需要很多面包屑才能让我来到这里!

解:

Dim s As Variant
Dim i As Integer
Dim ctl As Control
Set ctl = Me.Counties

If ctl.ItemsSelected.Count <> 0 Then
    For Each s In ctl.ItemsSelected
            t.WhereCondition = ctl.ItemData(s) & " = -1"
                                Next s
    End If
  1. 我不得不将控件从县重命名为县。看起来前者是报告的一部分,并将其他一切搞砸了。我在最初删除并重新添加控件后执行了此操作。
  2. 这里的评论确实有帮助。我只需要弄清楚如何使用属性以获得我想要的东西。
  3. 我必须将70个是/否字段与数据进行比较,只取出那些返回True的字段。因此-1。

它汇编。它运行。手指交叉以获得数据准确性。

谢谢!

© www.soinside.com 2019 - 2024. All rights reserved.