Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.10.10;
Скачать: CL | DM;

Вниз

Поиск записи.   Найти похожие ветки 

 
Geoji   (2004-09-15 10:10) [0]

День добрый! Подскажите, пожалуйста, что нужно для того, чтобы производился поиск не только первой записи, а и следующей идентичной. Например, у меня находит фамилию "Иванов", но ниже есть еще "Иванов", которую поиск уже не осуществляет.
Что мне нужно изменить?

   case RadioGroup1.ItemIndex of
   0:strField:="FAM";
   1:strField:="DOTAR";
   end;
   Query1.Locate(strField, Edit1.Text, [loCaseInsensitive]);

Спасибо всем!


 
Geoji   (2004-09-15 10:33) [1]

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


 
Sergey13 ©   (2004-09-15 10:34) [2]

Можно вместо локате фильтровать и циклом бегать по результату.


 
Geoji   (2004-09-15 10:40) [3]

[2]
Но если фильтровать, все остальные записи будут не видны, только, к примеру "Иванов", а мне нужно чтобы и "Петров" был в "сетке". Как в простом поиске текстового документа, - нашел первую запись, дальше следущую и т. д.


 
Sergey13 ©   (2004-09-15 10:45) [4]

Поставть ЕхЛиб-овский грид. Там это реализовано.


 
Geoji   (2004-09-15 10:51) [5]

[4]
А где этот грид находится, подскажи, я не сталкивался с этим.


 
Sergey13 ©   (2004-09-15 10:52) [6]

http://www.ehlib.com/RUS/default.htm


 
Geoji   (2004-09-15 10:55) [7]

[6]
Спасибо!!!


 
сергей1   (2004-09-15 19:46) [8]

да можно и обычным гридом обойтись, кидай на форму помимо твоего грида пару 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. Теперь при каждом нажатии кнопки мы будем переходить к

нужному полю, пока они присутствуют в таблице.

у меня все это работает, хотя разумеется, до раб. варианта тут далековато

Возможно в эхлибе с этим проще работать, только есть такое мнение (которое уже проскакивало в форуме), что

использование левых компонентов в рабочих проектах не есть хорошо.


 
Zacho ©   (2004-09-15 20:26) [9]

Давно не пользуюсь BDE, но если не запямятовал - то самое простое RTFM TQuery.Filter, TDataSet.FindNext и т.п.

Или просто напиши свой аналог Locate, который будет начинать поиск с текущей записи, а не с начала НД. Ничего сложного, обычное сравнение в цикле.



Страницы: 1 вся ветка

Текущий архив: 2004.10.10;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.043 c
3-1095249310
stud
2004-09-15 15:55
2004.10.10
опять обновления ibdataset!


9-1086959423
Серый
2004-06-11 17:10
2004.10.10
Оцените прогу.


14-1095508040
Программер_
2004-09-18 15:47
2004.10.10
Вот привожу код и пусть кто мне сможет сказать что нем


1-1095793196
Dot
2004-09-21 22:59
2004.10.10
Удалить файл из себя


4-1094106544
Алексей
2004-09-02 10:29
2004.10.10
Как узнть активный язык ввода в другом приложении?