Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Поиск записи. [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]

Я думаю, это не сложный вопрос, но почему-то никто ничего не может черкнуть.


Наверх

Титульная страница Поиск, карта сайта Написать письмо