поиск по нескольким полям
поиск по нескольким полям
как сделать поиск по нескольким полям в базу? у меня на форме есть 2 edit-а имя и фамилия, хочу чтоб искал с обоями параметрами вместе и по отдельности тоже. как работать с фильтрами?
Re: поиск по нескольким полям
Это правилная решения?
Код: Выделить всё
try
myquery1.Filtered:=true;
myquery1.Filter:='';
if edit1.Text<>'' then begin
myquery1.Filter:=' id='''+edit1.text+''' ';
end;
if edit2.Text<>'' then begin
if myquery1.Filter='' then myquery1.Filter:=' username='''+edit2.Text+''' ';
if myquery1.Filter<>'' then myquery1.Filter:=myquery1.Filter+ ' and username='''+edit2.Text+''' ';
end;
myquery1.close;
myquery1.SQL.Clear;
myquery1.SQL.Text:='SELECT * FROM users';
myquery1.Open;
except
on E: exception do
showmessage(E.Message);
end;
myquery1.Refresh;
MyDataSource1.DataSet.Refresh;
DBGrid1.Refresh;
Re: поиск по нескольким полям
как работает filter с index ?
Re: поиск по нескольким полям
Вы привели работоспособное применение локальной фильтрации на клиенте. Обратите внимание, при использовании локального фильтра с сервера вычитываются все данные и только после этого происходит локальная фильтрация на клиенте. Вы можете использовать свойство TMyQuery.FilterSQL, чтобы использовать фильтрацию на стороне сервера. В этом случае, при открытии набора данных, условие фильтра будет добавлено к сгенерированному запросу и только необходимое количество записей будет возвращено.bex007 писал(а):Это правилная решения?
Код: Выделить всё
try myquery1.Filtered:=true; myquery1.Filter:=''; if edit1.Text<>'' then begin myquery1.Filter:=' id='''+edit1.text+''' '; end; if edit2.Text<>'' then begin if myquery1.Filter='' then myquery1.Filter:=' username='''+edit2.Text+''' '; if myquery1.Filter<>'' then myquery1.Filter:=myquery1.Filter+ ' and username='''+edit2.Text+''' '; end; myquery1.close; myquery1.SQL.Clear; myquery1.SQL.Text:='SELECT * FROM users'; myquery1.Open; except on E: exception do showmessage(E.Message); end; myquery1.Refresh; MyDataSource1.DataSet.Refresh; DBGrid1.Refresh;
Re: поиск по нескольким полям
Индексы сервера используются для сортировки и поиска данных на стороне сервера автоматически, например, при выполнении запроса с конструкциями WHERE, ORDER BY, и т.д. Поэтому при использовании свойство TMyQuery.FilterSQL индексы будут использоваться на стороне сервера. Клиент же не может использовать индексы сервера. Таким образом, при использовании локальной фильтрации мы не используем индексы сервера.bex007 писал(а):как работает filter с index ?
Re: поиск по нескольким полям
Спасибо за ответ Как я понял во время использование myquery1.Filter клиент читает все базу и потом фильтрует локально? а TMyQuery.FilterSQL фильтрует прямо на сервере? Когда применяется TMyQuery.FilterSQL как индексы можно использовать? надо прописать в запросе или он сам создает индексирование запроси к базе? просто у меня Большая база данных. простите за мой русски
Re: поиск по нескольким полям
Да, вы правы: при использовании свойства TMyQuery.Filter клиент вычитывает все данные, удовлетворяющие запросу, и фильтрация происходит локально, а при использовании свойства TMyQuery.FilterSQL фильтрация происходит на стороне сервера. Вопрос по использованию индексов не относится к функциональности MyDAC. Для его решения, пожалуйста, обратитесь к документации MySQL сервера: http://www.mysql.ru/docs/man/MySQL_indexes.html
Re: поиск по нескольким полям
Вы можете задавать вопросы на английском языке на нашем англоязычном форуме: http://forums.devart.com/