2016-03-11 4 views
0

У меня есть сетка в форме, которая отображает некоторые столбцы из таблицы dbf и текстового поля. Я хочу найти значение, отображаемое в текстовом поле по всем столбцам из таблицы dbf. Некоторые поля являются числовыми, а другие - символом Если я хочу найти номер, следует искать всю запись, содержащую это число во всех столбцах, независимо от типа столбца. Если я хочу найти подстроку, она должна дать мне всю запись, содержащую эту подстроку.фильтр сетки в foxpro

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

ответ

0

Ваш подход с подстановочным знаком «$» содержит «подход, кажется, в порядке. Тем не менее, ваша попытка с помощью allt (val()) завершится неудачно, поскольку вы не можете нарезать числовое значение, оно должно быть предварительно преобразовано в строку.

Теперь, что сказал, вы могли бы сократить ваш запрос, просто делая $ против конкатенации всех столбцов что-то вроде (предполагается, что ваш регистрационный номер представляет собой числовое поле) ...

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

если у вас есть даты или поля даты/времени, которые вы могли бы использовать DTOC (dateField) или TTOC (dateTimeField). Таким образом, создавая одну строку из всех значений, вам не нужно явно повторять условие ИЛИ повторно.

0

Вы могли бы сделать что-то вроде:

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

Это использует тот факт, что преобразование() даст строковое представление данных любого типа.