如何基于布尔字段显示多个字符串值

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

我有一份报告,提取联系信息(姓名,地址等)。每个联系人可以与一个或多个县相关联。应用程序的设计方式,每个县都是yes / no字段。其中大约有70个。

为了防止这个报告变得难以处理,我希望有一个逗号分隔的字符串值列表的文本字段,其中每个适用的县都有一个逗号分隔的字符串列表,其中布尔值为true。

我以前做过IIF条件格式化。

IIf([County]="True", "CountyName", "")

但我只是以1比1(一个条件,一个字段,一个文本框)完成它们。如何将70个字段中的70个条件应用于一个文本框?

编辑:经过进一步的讨论(下面),听起来我需要一个自定义的VBA函数循环遍历字段并创建一个条件的值字符串。

我是VBA新手。我很感激在创建一个循环遍历记录中适用县的函数的任何帮助,并创建一个逗号分隔列表。

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

此示例假定唯一的YesNo字段是“大约70”县字段。过程可以在文本框或通用模块中的报告模块和调用函数中,并从任何地方调用:MakeList([ID])。在文本框中,在表达式前加上=符号。

Function MakeList(intID As Integer) As String
Dim rs As DAO.Recordset
Dim strList As String
Dim x As Integer
Set rs = CurrentDb.OpenRecordset("SELECT * FROM Contacts WHERE ID=" & intID)
For x = 0 To rs.Fields.Count - 1
    If rs(x).Type = dbBoolean Then
        If rs(x) = True Then strList = strList & rs(x).Name & ","
    End If
Next
If strList <> "" Then MakeList = Left(strList, Len(strList) - 1)
rs.Close
Set rs = Nothing
End Function

另一种方法是扩展If Then条件语句,以便仅按名称排除字段。另一种是按索引引用字段。如果所有的县字段都是索引10 - 80,则可以消除For x = 10 To 80和布尔类型的测试。索引从0开始,因此第一个字段是索引0.使用*通配符时,字段按表设计中列出的顺序拉出。

通过构建仅包含ID和县字段的查询对象来提高性能,然后将其保存,然后从该查询中打开记录集(或将非常长的语句复制/粘贴到VBA中)。使用索引来引用字段。

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