PowerBuilder - ошибка с SetFilter (строка) - выражение недопустимо - PullRequest
0 голосов
/ 17 мая 2018

У меня есть приложение, которое генерирует некоторые отчеты.Я использую некоторые фильтры в данных, которые извлекаются.

wf_gen_filtro_conceptos()

//PROBLEM---------------
dw_rp1.setfilter(string(is_filtro) + " " + "or IsNull(causa)")
//----------------------
dw_rp1.filter()
dw_rp1.sort()
dw_rp1.groupcalc()

В wf_gen_filtro_conceptos() установлена ​​переменная is_filtro.Проблема в том, когда я использую setfilter().Я не могу объединить эти строки для создания нового фильтра.Если я использую одну из этих строк, например, IsNull(causa) сама по себе, никаких проблем не будет.

Ответы [ 4 ]

0 голосов
/ 29 мая 2018

Спасибо всем за ответ на мой вопрос.Я попробовал то, что вы предложили, но все равно выдает ту же ошибку ..

Вот функция, которая устанавливает фильтр.

choose case  is_filtro_ca
case  ''
    messagebox("Filtro", "Is filter 1")
is_filtro = ""

case '*'
    messagebox("Filtro", "Is filter 2")
is_filtro = ""

case else
    messagebox("Filtro", "Is filter 3")
is_filtro = "causa in (" + is_filtro_ca + ")"

End choose

Эта функция вызывается, когда кнопка "Показать пустые строки "нажата.Я помещаю эти сообщения, и он всегда печатает «Фильтр 2».

0 голосов
/ 18 мая 2018

Я подозреваю, что is_filtro имеет недопустимый столбец или недопустимое значение, либо is_filtro имеет значение null, либо is_filtro пусто.


Инициализируйте is_filtro чем-то значимым.

Это работаетесли вам нужны все значения.

is_filtro = "(1 = 1)"

Если is_filtro пуст ("")

dw_rp1.setfilter(string(is_filtro) + " " + "or IsNull(causa)")

setfilter будет эффективно

dw_rp1.setfilter(" or IsNull(causa)")

Если is_filtro равен нулю

setfilter будет эффективно

dw_rp1.setfilter()

Ваш фильтр должен соответствовать типу данных столбца.

Предположим, что causa является строковым столбцом иВы собираетесь фильтровать значения A, B и C.

Неправильно

is_filtro = "causa in (A, B, C)"

Вправо

is_filtro = "causa in ('A', 'B', 'C')"
0 голосов
/ 21 мая 2018

Если вы комбинируете различные предложения фильтра, вам нужно и между ними.

0 голосов
/ 17 мая 2018

Добавьте строку для конкатенации строки перед использованием метода SetFilter. Что-то вроде

ls_filterstring = is_filtro + " " + "or IsNull(causa)"
dw_rp1.setfilter(ls_filterstring)

Таким образом, вы можете проверить, что происходит с вашей строкой фильтра в отладчике. Если is_filtro равен NULL, тогда вся строка будет NULL.

Если устанавливается is_filtro, убедитесь, что кавычки, если они есть, в строке правильные.

...