我有一个报告,从一个名为“志愿者”的表中进行选择。整个WHERE子句是在运行时在VBA中构造的,基于在表单上选择的以下参数
志愿者类型:2个复选框之一
地区:1个下拉菜单-但是,在VBA中,每个地区可以是任意数量的办公室
位置:4选项多选
县:70个选项的多选
我的报告必须在运行时编译所有这些动态变量。
我想这是我关于县的最后一个问题,实际上是行不通的,这就是我现在所在的地方。
在“志愿者”表中,70个县中的每个县都是其自己的布尔字段。
ReportFrom将县表示为字符串。为了在一个OR语句中循环进行多达70个选择,以针对True / False评估String,提供了以下解决方案:
Dim s As Variant
Dim ctl As Control
Dim t As TCondition
Set ctl = Me.Counties
If ctl.ItemsSelected.Count <> 0 Then
For Each s In ctl.ItemsSelected
t.WhereCondition = t.whereCondition & ctl.ItemData(s) & " = -1 OR"
Next s
' trim trailing " OR"
t.WhereCondition = Left(t.WhereCondition, Len(t.WhereCondition)-3)
End If
除了用WHERE子句的其他参数编译这些选择之外,这非常有用。此选择周围没有足够的括号,并且不能正确过滤记录。
我尝试了几种解决方案-其中最接近的是:
If ctl.ItemsSelected.Count <> 0 Then
For Each s In ctl.ItemsSelected
t.WhereCondition = t.WhereCondition & "((" & ctl.ItemData(s) & ") = -1) OR )"
Next s
t.WhereCondition = Left(t.WhereCondition, Len(t.WhereCondition) - 4)
End If
问题是修剪4个字符会删除我需要的RParen,以便此语句正确过滤报表。仅修剪3会留下尾随的“ O”。
我需要以某种方式删除尾随OR,并保留尾随括号。
有办法吗?
(我讨厌发布下午(EST)的问题,因为直到明天我都无法跟进,但是我整天都在绞尽脑汁)
答案 0 :(得分:1)
执行此操作的方法不是那么光荣但又肮脏:
t.WhereCondition = Left(t.WhereCondition, Len(t.WhereCondition) - 4)
t.WhereCondition = t.WhereCondition & ")"
或者只是:
t.WhereCondition = Left(t.WhereCondition, Len(t.WhereCondition) - 4) & ")"
答案 1 :(得分:0)
一个同事设法以不同的方式处理此问题,并将动态WHERE子句封装在不同的代码段中
t.WhereCondition = "(" & t.WhereCondition & ") AND
在构建当前WHERE时,它看起来像提供了适当过滤记录所需的额外分隔。