【问题标题】:MS Access VBA Remove Specific Characters from StringMS Access VBA 从字符串中删除特定字符
【发布时间】:2019-04-18 18:24:52
【问题描述】:

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

【问题讨论】:

    标签: ms-access vba


    【解决方案1】:

    不那么光荣但又快又脏的方法是:

    t.WhereCondition = Left(t.WhereCondition, Len(t.WhereCondition) - 4)
    t.WhereCondition = t.WhereCondition & ")"
    

    或者只是:

    t.WhereCondition = Left(t.WhereCondition, Len(t.WhereCondition) - 4) & ")"
    

    【讨论】:

    • 这很有帮助,正是我想要的。谢谢!对延误表示歉意。这个数据库让我白发苍苍。
    【解决方案2】:

    一位同事设法以不同的方式解决此问题,并将动态 WHERE 子句封装在不同的代码部分中

    t.WhereCondition = "(" & t.WhereCondition & ") AND
    

    在构建时封装当前 WHERE 看起来像是提供了正确过滤记录所需的额外分隔。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-02
      • 1970-01-01
      • 1970-01-01
      • 2015-03-15
      • 1970-01-01
      相关资源
      最近更新 更多