![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проблемы с Locate [D7, IB6.x]
Rom © (2006-02-13 22:05:00)Здравствуйте.
Помогите, пожалуйста, разобраться с Locate. Для поиска предполагаю использую описанную ниже процедуру. Поиск только по фамилии (edit1) работает, а по имени (edit2) или двум параметрам нет. Помогите, пожалуйста, найти ошибку и обеспечить поиск по двум параметрам
procedure TForm1.Button4Click(Sender: TObject);
var
locopts: TLocateOptions;
locFields: string;
locValues: variant;
begin
locopts:=[];
locFields:='last_name';
if Length(edit2.Text)>0 then
begin
locFields:=locFields+'; first_name';
LocValues:=VarArrayCreate([0,1], varVariant); //создание вариантного массива
LocValues[0]:=Edit1.Text; //фамилия
LocValues[1]:=edit2.Text; //имя
end
else
LocValues:=edit1.Text;
if checkBox1.Checked then
locopts:=locopts+[loPartialKey]; // поиск с частичным совпадением
if checkBox2.Checked then
locopts:=locopts+[loCaseInsensitive]; //---- без учёта регистра
query1.Locate(LocFields, LocValues, locopts );
end;
Виталий Панасенко (2006-02-14 11:39:00) [1]Не, заню, как все реализовано, но, если в Query1 запрос вида select * from table, можно(нужно!!!) переделать на select * from table where last_name=(like) :last_name and firest_name=(like):first_name
Запрос можно создавать динамически, с учетом значений CheckBox1/2. На малых обьемах разницы не будет видно. Но на 1000 и более записях(при наличии индекса) ты будешь приятно удивлен(или НЕ приятно).
unknown (2006-02-13 22:49:00) [2]Как ни странно, но код рабочий.
проверил на D7, IBX 7.08