Форум: "Базы";
Текущий архив: 2004.10.10;
Скачать: [xml.tar.bz2];
ВнизПоиск записи. Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.05 c