我在表单上有一个网格,显示dbf表和文本框中的一些列。 我想在dbf表的所有列中搜索文本框中显示的值。有些字段是数字,其他字段是字符 如果我想查找一个数字,则应搜索所有列中包含该数字的所有记录,无论列类型如何。 如果我想搜索子字符串应该给我包含该子字符串的所有记录。
SET FILTER TO ALLTRIM(ThisForm.Text1.Value) $Content or ALLTRIM(val(ThisForm.Text1.Value)) $registrationNumber or ALLTRIM(ThisForm.Text1.Value) $holderNo
答案 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()将给出任何数据类型的字符串表示的事实。