MS Access VBA Удалить определенные символы из строки - PullRequest
1 голос
/ 18 апреля 2019

У меня есть отчет, выбираемый из таблицы под названием «Волонтеры». Все предложение WHERE создается в VBA во время выполнения на основе следующих параметров, выбранных в форме

Тип добровольца: один из 2 флажков

Регион: 1 выпадающий список, но в VBA в каждом регионе может быть любое количество офисов

Положение: 4 варианта множественного выбора

Округ: 70 опций множественный выбор

Мой отчет должен компилировать все эти динамические переменные во время выполнения.

То, что я думал, будет моим последним вопросом - в отношении округов - на самом деле не работает, и вот где я сейчас.

В таблице "Волонтер" каждый из 70 округов является своим собственным логическим полем.

ReportFrom представляет графства в виде строк. Чтобы выполнить цикл до 70 выборок в операторе OR для оценки String и True / False, было предложено следующее решение:

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 оставляет за собой букву "О".

Мне нужно каким-то образом удалить только конечное ИЛИ, сохранив завершающие скобки.

Есть ли способ сделать это?

(я ненавижу отправлять вопросы после полудня (EST), так как я не смогу следить за ними до завтра, но я весь день ломал голову над этим)

Ответы [ 2 ]

1 голос
/ 18 апреля 2019

Не такой славный, но быстрый и грязный способ сделать это:

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

Или просто:

t.WhereCondition = Left(t.WhereCondition, Len(t.WhereCondition) - 4) & ")"
0 голосов
/ 18 апреля 2019

Сотруднику удалось подойти к этому по-другому, и он включил динамическое предложение WHERE в другой раздел кода

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

Инкапсуляция текущего WHERE в том виде, как он построен, выглядит так, как будто он обеспечивает дополнительное разделение, необходимое для правильной фильтрации записей.

...