PowerBuilder-SetFilter(字符串)错误-表达式无效

PowerBuilder-SetFilter(字符串)错误-表达式无效,filter,builder,powerbuilder,Filter,Builder,Powerbuilder,我有一个生成一些报告的应用程序。我在检索的数据中使用一些过滤器 wf_gen_filtro_conceptos() //PROBLEM--------------- dw_rp1.setfilter(string(is_filtro) + " " + "or IsNull(causa)") //---------------------- dw_rp1.filter() dw_rp1.sort() dw_rp1.groupcalc() 在wf\u gen\u filtro\u concept

我有一个生成一些报告的应用程序。我在检索的数据中使用一些过滤器

wf_gen_filtro_conceptos()

//PROBLEM---------------
dw_rp1.setfilter(string(is_filtro) + " " + "or IsNull(causa)")
//----------------------
dw_rp1.filter()
dw_rp1.sort()
dw_rp1.groupcalc()
wf\u gen\u filtro\u conceptos()中设置变量
is\u filtro

问题是当我使用
setfilter()
时。我无法连接这些字符串以创建新筛选器。如果我单独使用其中一个字符串,例如,
IsNull(causa)
,则没有问题。

在使用SetFilter方法之前,添加一行来连接字符串。 差不多

ls_filterstring = is_filtro + " " + "or IsNull(causa)"
dw_rp1.setfilter(ls_filterstring)
通过这种方式,您可以在调试器中检查filterstring发生了什么。如果is_filtro为空,则整个字符串将为空


如果正在设置is_filtro,请确保字符串中的引号(如果有)正确。

在使用SetFilter方法之前,添加一行以连接字符串。 差不多

ls_filterstring = is_filtro + " " + "or IsNull(causa)"
dw_rp1.setfilter(ls_filterstring)
通过这种方式,您可以在调试器中检查filterstring发生了什么。如果is_filtro为空,则整个字符串将为空


如果正在设置is_filtro,请确保字符串中的引号(如果有)正确。

我怀疑is_filtro的列无效,或值无效,或者is_filtro为空,或者is_filtro为空


初始化是有意义的

如果您想要所有值,则此操作有效

is_filtro = "(1 = 1)"

如果是,则过滤器为空(“”)

setfilter将是有效的

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

如果是,则filtro为空

setfilter将是有效的

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

您的筛选器需要与列数据类型匹配

假设causa是一个字符串列,您打算过滤值a、B和C

错误

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

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

我怀疑is_filtro的列无效,或值无效,或者is_filtro为null,或者is_filtro为空


初始化是有意义的

如果您想要所有值,则此操作有效

is_filtro = "(1 = 1)"

如果是,则过滤器为空(“”)

setfilter将是有效的

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

如果是,则filtro为空

setfilter将是有效的

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

您的筛选器需要与列数据类型匹配

假设causa是一个字符串列,您打算过滤值a、B和C

错误

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

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

如果要组合不同的筛选子句,则需要在它们之间使用and。

如果要组合不同的筛选子句,则需要在它们之间使用and。

感谢大家回答我的问题。 我试过你建议的东西,但还是出了同样的错误

下面是设置过滤器的函数

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

按下“显示空行”按钮时调用此函数。我把这些信息放在它总是打印的“Is filter 2”上

谢谢大家回答我的问题。 我试过你建议的东西,但还是出了同样的错误

下面是设置过滤器的函数

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

按下“显示空行”按钮时调用此函数。我把这些信息放在它总是打印的“Is filter 2”上

我们需要查看实例变量is_filtro中的内容才能解决这个问题。也不需要在实例变量和表达式的第二部分之间单独添加空格,只需使用“or IsNull(causa)”而不是“+”或IsNull(causa)”,但这更挑剔,因为它不会改变任何东西。另外,SetFilter确实有一个返回值来检查错误,但也有更多的吹毛求疵。我们需要查看实例变量is\u filter中的内容来解决这个问题。也不需要在实例变量和表达式的第二部分之间单独添加空格,只需使用“or IsNull(causa)”而不是“+”或IsNull(causa)”,但这更挑剔,因为它不会改变任何东西。此外,SetFilter确实有一个返回值来检查错误,但也有更多的挑剔。这意味着is_distro='*',并将其设置为“”。当您连接时,会得到
或IsNull(causa)
,这不是有效的筛选器。但整个代码是必需的。同时检查“Setfilter”之后的返回值。是的,但是当我单独使用两个过滤器时,(我单独使用main,每次tme一次),它工作正常。我认为问题在于我连接过滤器的方式,但我不知道为什么。打印连接字符串的值,并尝试在datawindow painter中以交互方式使用它。通过这种方式,您将能够测试各种可能性。这意味着is_distro='*',并将其设置为“”。当您连接时,会得到
或IsNull(causa)
,这不是有效的筛选器。但整个代码是必需的。同时检查“Setfilter”之后的返回值。是的,但是当我单独使用两个过滤器时,(我单独使用main,每次tme一次),它工作正常。我认为问题在于我连接过滤器的方式,但我不知道为什么。打印连接字符串的值,并尝试在datawindow painter中以交互方式使用它。这样,您将能够测试各种可能性。