|
#1
|
||||
|
||||
Filter в IBQuery
Доброго времени суток ... столкнулся вот с такой проблемой:
есть БД на Firebird ... выбираю данные из базы с помощью запроса (IBQuery) ... кроме этого мне нужно организовать поиск по выбраным записям с максимальной скоростью ... раньше (в локальных БД) для этой цели делал Filter и этого было вполне достаточно ... в IBQuery эта функция почему-то не работает. Пробовал сделать через OnFilterRecord, но там запись находится только при полном написании введенного значени, а мне нужно чтобы записи фильтровались при каждом нажатии буквы. Может кто-то подскажет как мне обойти эту проблему P.S. Компоненты FIBPlus не предлагать Поживу - увижу, Доживу - узнаю, Выживу - учту. [P.S.]->Выражая благодарность за помощь - Вы получаете шанс на помощь в следующий раз
|
#2
|
|||
|
|||
Код обраболтчика события сюда выложи.
|
#3
|
||||
|
||||
Для Firebird\Interbase делаю так:
Код:
procedure TForm1.QFilterRecord(DataSet: TDataSet; var Accept: Boolean); begin Accept:=(Q.FieldByName('SPEC').AsString='строка'); end; procedure TForm1.Edit1Change(Sender: TObject); begin Q.Filtered:=True; end; Для локальной БД раньше делал так: Код:
procedure TForm1.Edit1Change(Sender: TObject); begin eQuery.Filter:='Icrtf_sht_num = '''+Ed_Pak.Text+'*'''; eQuery.Filtered:=True; end; Поживу - увижу, Доживу - узнаю, Выживу - учту. [P.S.]->Выражая благодарность за помощь - Вы получаете шанс на помощь в следующий раз
|
#4
|
|||
|
|||
ага, а самому сравнивать по частям слабо?
Код:
procedure TForm1.QFilterRecord(DataSet: TDataSet; var Accept: Boolean); begin // Начинается с... Accept:= Pos(Edit1.Text,DataSet.FieldByName('SPEC').AsString) = 1; end; |
#5
|
||||
|
||||
пасибо ... я был так близок к ответу:
Код:
Accept:= Pos(Edit1.Text,DataSet.FieldByName('SPEC').AsString) <> 0; слегка "не докопал" Поживу - увижу, Доживу - узнаю, Выживу - учту. [P.S.]->Выражая благодарность за помощь - Вы получаете шанс на помощь в следующий раз
Последний раз редактировалось Yurk@, 21.01.2009 в 22:24. |