Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > Поиск в ADO через Locate по всем полям в таблице


Автор: Antiform 7.8.2008, 08:38
Такая проблемка! Нужно через Locate задать поиск по всем полям, по одному прекрасно ищет! Мучался, искал, не нашел!
И не просто запись найти, а выделить те буквы в записи которые написаны в Edit_Search и при последующих нажатиях на Button_Search (т.е. одна кнопка поиска, а не еще одна типа "найти далее") и так по кругу(т.б. доходит до последних найденных символов и возвращается к первому)
Код

procedure TForm1.Button_SearchClick(Sender: TObject);
begin
if not ADOTable1.Locate( 'как здесь задать все поля', '%' + Trim(Edit_Search.Text), [loCaseInsensitive, loPartialKey])
then  ShowMessage('Запись не найдена');
end;

Вообщем подобно "поиску на странице" в Opere, только там при вводе сразу выделяется, а мне надо чтобы после нажатия на кнопку

Автор: Frees 7.8.2008, 08:59
Цитата(Antiform @  7.8.2008,  08:38 Найти цитируемый пост)
'как здесь задать все поля'


Код

keyfields:='name;name_1;n_dom;n_kw';
keyvalues:=VarArrayOf([combobox1.Text, combobox2.Text, edit2.Text, edit3.text]);
if dmod.qrfiz.Locate(keyfields,keyvalues,[])=false then
dmod.qrfiz.Locate('id',id1,[]);

© DRKB


Цитата(Antiform @  7.8.2008,  08:38 Найти цитируемый пост)
Вообщем подобно "поиску на странице" в Opere, только там при вводе сразу выделяется, а мне надо чтобы после нажатия на кнопку

locate ом тут не обойтись

Автор: Antiform 7.8.2008, 13:46
Frees ты мне написал обращение к определенному полю а не к всей таблице как мне надо, а что вот это и зачем : if dmod.qrfiz.Locate(keyfields,keyvalues,[])=false thend mod.qrfiz.Locate('id',id1,[]); я так и не понял

Автор: Frees 7.8.2008, 14:01
Цитата(Antiform @  7.8.2008,  13:46 Найти цитируемый пост)
if dmod.qrfiz.Locate(keyfields,keyvalues,[])=false thend mod.qrfiz.Locate('id',id1,[]); я так и не понял

это вот что 
Код

if DataSet1.Locate(keyfields,keyvalues,[])=false thend ShowMessage('не нашел запись');


а как тебе надо? задал какуюто строку и встал на первую запись где в каком либо столбике есть эта строка?

Автор: Antiform 7.8.2008, 14:26
Цитата

а как тебе надо? задал какуюто строку и встал на первую запись где в каком либо столбике есть эта строка?

хотя бы так

Автор: Frees 7.8.2008, 14:28
какой DBGrid используеш? у DBGridEh это сразу есть

Автор: Antiform 7.8.2008, 15:04
bsSkinDBGrid <- библиотека с поддержкой скинов

Автор: Antiform 8.8.2008, 00:11
Фиг с этими выделениями!на счет поиска по всем полям вот тока до этого додумался:
Код

procedure TForm1.Button_SearchClick(Sender: TObject);
var
WSearch: string;
Options: TLocateOptions;
begin
WSearch := '%' + Trim(Edit_Search.Text);
Options := [loCaseInsensitive, loPartialKey];
if  not (ADOTable_Comp.Locate('CPU', WSearch, Options ))
    and not (ADOTable_Comp.Locate('Motherboard', WSearch, Options ))
    and not (ADOTable_Comp.Locate('Memory', WSearch, Options ))
    and not (ADOTable_Comp.Locate('Monitor', WSearch, Options ))
    and not (ADOTable_Comp.Locate('HDD', WSearch, Options ))
    and not (ADOTable_Comp.Locate('VideoCard', WSearch, Options ))
then  ShowMessage('Запись не найдена!')
end;

Вот главный вопрос! Как сделать, чтобы при нажатии снова на эту же кнопку выделение переходило на следующую запись и так по кругу!? Подскажите, может кто сталкивался уже???

Автор: Данкинг 8.8.2008, 00:18
Цитата(Antiform @  8.8.2008,  01:11 Найти цитируемый пост)
Как сделать, чтобы при нажатии снова на эту же кнопку выделение переходило на следующую запись и так по кругу!? 

Проще сделать выборку в AdoQuery и там уже по кругу гонять.

Автор: pseud 8.8.2008, 08:54
Цитата(Antiform @  8.8.2008,  00:11 Найти цитируемый пост)
Как сделать, чтобы при нажатии снова на эту же кнопку выделение переходило на следующую запись и так по кругу!? Подскажите, может кто сталкивался уже


а ты не боишься что в гриде будет сортировка не аналогичная датасету?
и в итоге в дата сете может ты и будешь бегать по кругу, а вот в гриде беспорядочно то вверх то вниз.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)