![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Поиск записи. [D6, dBase, FoxPro]
Geoji © (2004-09-15 10:10:00)День добрый! Подскажите, пожалуйста, что нужно для того, чтобы производился поиск не только первой записи, а и следующей идентичной. Например, у меня находит фамилию "Иванов", но ниже есть еще "Иванов", которую поиск уже не осуществляет.
Что мне нужно изменить?
case RadioGroup1.ItemIndex of
0:strField:='FAM';
1:strField:='DOTAR';
end;
Query1.Locate(strField, Edit1.Text, [loCaseInsensitive]);
Спасибо всем!
Zacho (2004-09-15 20:26:00) [1]Давно не пользуюсь BDE, но если не запямятовал - то самое простое RTFM TQuery.Filter, TDataSet.FindNext и т.п.
Или просто напиши свой аналог Locate, который будет начинать поиск с текущей записи, а не с начала НД. Ничего сложного, обычное сравнение в цикле.
сергей1 (2004-09-15 19:46:00) [2]да можно и обычным гридом обойтись, кидай на форму помимо твоего грида пару query, кнопку и edit для
вписывания в него слова "Иванов" (и не только :)
пиши для всего этого хозяйства следующий код
var s_name:string;
procedure TForm1.Button1Click(Sender: TObject);
var v:string;
begin
v:=form1.ADOQuery2.FieldByName('ind').AsString;
form1.ADOQuery1.Locate('ind; text',VarArrayOf([v,s_name]),[loPartialKey]);
if not form1.ADOQuery2.Eof then form1.ADOQuery2.Next else showmessage('нету больше !');
end;
procedure TForm1.Edit1Change(Sender: TObject);
begin
s_name:=form1.edit1.text;
end;
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key=13 then
begin
form1.ADOQuery2.SQL.Text:='select ind from Table1 where text = '+quotedstr(form1.Edit1.Text);
form1.ADOQuery2.Open;
form1.ADOQuery2.First;
end;
end;
здесь в моей таблице поле "ind" - primary key для таблицы, поле "text" - то поле, где ищем твоего Иванова.
Зацепил идею ?
Пишем в едитбокс искомое слово, нажимаем enter - в query2 закачиваются все значения ключевого поля, в
строке которого поле "text"= form1.Edit1.Text. Теперь при каждом нажатии кнопки мы будем переходить к
нужному полю, пока они присутствуют в таблице.
у меня все это работает, хотя разумеется, до раб. варианта тут далековато
Возможно в эхлибе с этим проще работать, только есть такое мнение (которое уже проскакивало в форуме), что
использование левых компонентов в рабочих проектах не есть хорошо.
Geoji (2004-09-15 10:55:00) [3][6]
Спасибо!!!
Sergey13 (2004-09-15 10:52:00) [4]http://www.ehlib.com/RUS/default.htm
Geoji (2004-09-15 10:51:00) [5][4]
А где этот грид находится, подскажи, я не сталкивался с этим.
Sergey13 (2004-09-15 10:45:00) [6]Поставть ЕхЛиб-овский грид. Там это реализовано.
Geoji (2004-09-15 10:40:00) [7][2]
Но если фильтровать, все остальные записи будут не видны, только, к примеру "Иванов", а мне нужно чтобы и "Петров" был в "сетке". Как в простом поиске текстового документа, - нашел первую запись, дальше следущую и т. д.
Sergey13 (2004-09-15 10:34:00) [8]Можно вместо локате фильтровать и циклом бегать по результату.
Geoji (2004-09-15 10:33:00) [9]Я думаю, это не сложный вопрос, но почему-то никто ничего не может черкнуть.