Во-первых, логическое поле, которое вам не нужно делать явным
, установите фильтр в Logicalfield = .t.
, вы можете просто
установить фильтр в LogicalField илиустановите для фильтра значение НЕ LogicalField
Далее по массиву.В VFP есть функция ASCAN (), которая сканирует массив на предмет значения, если найден, возвращает номер строки в массиве, который соответствует тому, что вы ищете.
Что касается массивов ... например: DIMENSIONMyArray [3] MyArray [1] = "test1" MyArray [2] = "что-то" MyArray [3] = "что-нибудь еще"
?ASCAN (MyArray, "else") && это вернет 0?ASCAN (MyArray, «что-нибудь еще») && это вернет 3
Если вы выполняете «set filter», массив должен находиться «в области видимости» на время действия фильтра.Если вы установите фильтр в процедуре, массив существует, оставьте процедуру и массив исчезнет, все готово.
Итак, вы можете сделать
set filter to LogicalField and ASCAN( YourArray, StringColumnFromTable ) > 0
Теперь, если хотитеподмножество WORK WITH, вы можете выполнить SQL-Select и перетащить данные в CURSOR (временную таблицу чтения-записи), которая имеет те же возможности, что и исходная таблица (за исключением автоматического увеличения при добавлении) ...
Обычно я называю свои временные курсоры с префиксом «C_» для «CURSOR OF», поэтому, когда я работаю с таблицами, я знаю, доступны ли их производственные данные или просто для временных целей для более быстрого отображения, представления, извлечения из другихпроисхождение по мере необходимости.
use in select( "C_FinalRecords" )
select * from YourTable ;
where LogicalField ;
and ASCAN( YourArray, StringColumnFromTable ) > 0;
into cursor C_FinalRecords READWRITE
Затем вы можете просто использовать это ...
select C_FinalRecords
scan
do something with the record, or values of it...
endscan
или .. привязать к сетке в форме, и т.д ...