foxpro中的网格过滤器

时间:2016-03-11 10:43:22

标签: visual-foxpro foxpro

我在表单上有一个网格,显示dbf表和文本框中的一些列。 我想在dbf表的所有列中搜索文本框中显示的值。有些字段是数字,其他字段是字符 如果我想查找一个数字,则应搜索所有列中包含该数字的所有记录,无论列类型如何。  如果我想搜索子字符串应该给我包含该子字符串的所有记录。

SET FILTER TO ALLTRIM(ThisForm.Text1.Value) $Content or ALLTRIM(val(ThisForm.Text1.Value)) $registrationNumber or ALLTRIM(ThisForm.Text1.Value) $holderNo

2 个答案:

答案 0 :(得分:1)

你使用" $"通配符"包含"方法似乎没问题。但是,您通过allt(val())的尝试将失败,因为您无法修剪数值,它必须预先转换为字符串。

现在,也就是说,您可以通过对所有列的连接执行$来缩短查询(假设您的注册号是数字字段)...

set filter to ALLTRIM(ThisForm.Text1.Value) ;
   $ ( Content +"," +str(registrationNumber) +," + holderNo )

如果您有日期或日期/时间字段,则可以执行DTOC(dateField)或TTOC(dateTimeField)。因此,通过构建所有值的单个字符串,您不必重复显式重复OR条件。

答案 1 :(得分:0)

您可以执行以下操作:

select curGrid
scan
    lcRow = transform(field1) + transform(field2) ... + transform(lastfield)
    if lcSearchValue $ lcRow
       DoWhatever()
    endif
endscan

这充分利用了transform()将给出任何数据类型的字符串表示的事实。