MS Access VBA从字符串中删除特定字符

时间:2019-04-18 18:24:52

标签: access-vba

我有一个报告,从一个名为“志愿者”的表中进行选择。整个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)的问题,因为直到明天我都无法跟进,但是我整天都在绞尽脑汁)

2 个答案:

答案 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时,它看起来像提供了适当过滤记录所需的额外分隔。