|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
06.11.2007, 09:48 | #1 |
Форумчанин
Регистрация: 06.09.2007
Сообщений: 908
|
Поиск в таблице БД
Здравствуйте, уважаемые программисты!
У меня возникла такая проблема: в ДБГриде я отображаю таблицу "firm", на этойже форме я размещаю Edit1, для поиска названия фирм, на кнопке для поиска я пишу следующий код: Код HTML:
procedure TForm1.BitBtn1Click(Sender: TObject); begin Form1.ADOQueFirmRatissDisk.Active:=false; Form1.ADOQueFirmRatissDisk.SQL.Clear; Form1.ADOQueFirmRatissDisk.SQL.Add('select *'); Form1.ADOQueFirmRatissDisk.SQL.Add('from firm'); Form1.ADOQueFirmRatissDisk.SQL.Add('where firm.name like '''+edit1.text+''''); Form1.ADOQueFirmRatissDisk.Active:=true; end; И еще такой вопрос: как сделать так, что бы при вводе в Edit1 названия фирмы, в ДБГриде автоматически производилась сортировка и фирма выводилась в первую строку ДБГрида? Надеюсь, что понятно изложил свою мысль. |
06.11.2007, 11:29 | #2 | |
Армия Рассейская
Форумчанин
Регистрация: 06.12.2006
Сообщений: 175
|
Цитата:
Код:
Сделаем ночь ярче!!! - Ракетные войска стратегического назначения
Центральный клуб туристов РВСН |
|
06.11.2007, 12:01 | #3 | |
*
Старожил
Регистрация: 22.11.2006
Сообщений: 9,201
|
Цитата:
Вообще-то, поиск логичнее было бы организовать через функцию Locate. У нее есть опция, позволяющая искать по части содержимого поля. Если условие поиска будет выполнено, то курсор позиционируется на похожую запись. |
|
06.11.2007, 12:11 | #4 |
Форумчанин
Регистрация: 06.09.2007
Сообщений: 908
|
Спасибо большое, Nemon! Все получилось. Блин, логика совершенно отсутствует.
|
06.11.2007, 12:27 | #5 | |
Форумчанин
Регистрация: 06.09.2007
Сообщений: 908
|
Цитата:
Цитата:
1. при вводе символов в edit1, т.е. наименования фирмы и в это время ДБГрид фильтровался, т.е. в первой строке выводились символы, т.е. фирма, которую пользователь вводит в Edit1 2. пользователь в edit1 вводит название фирмы и по нажатию кнопки в ДБГриде выводится только эта фирма, хотя я согласен, что это будет лишним если будет реализован первый способ. А что касается по поводу поиска части содержимого поля, то использую знак %-та. Вот пример: Код HTML:
Form1.ADOQueFirmRatissDisk.Active:=false; Form1.ADOQueFirmRatissDisk.SQL.Clear; Form1.ADOQueFirmRatissDisk.SQL.Add('select *'); Form1.ADOQueFirmRatissDisk.SQL.Add('from firm'); Form1.ADOQueFirmRatissDisk.SQL.Add('where firm.name like ''%'+edit1.text+'%'''); Последний раз редактировалось фЁдОр; 06.11.2007 в 12:32. |
|
06.11.2007, 12:56 | #6 |
Армия Рассейская
Форумчанин
Регистрация: 06.12.2006
Сообщений: 175
|
Зря наезжаешь на Михалыча. Locate действительно очень удобно использовать для поиска
Сделаем ночь ярче!!! - Ракетные войска стратегического назначения
Центральный клуб туристов РВСН |
06.11.2007, 13:14 | #7 |
Форумчанин
Регистрация: 06.09.2007
Сообщений: 908
|
Цитата:
Nemon, у меня и в мыслях такого не было. Совсем напротив, я уважаю Михалыча и очень благодарен ему за помощь, так же как и Вам я тоже очень признателен за оказаннюу помощь. Просто в справочнике по SQL'у, который я сейчас использую, был описан метод поиска только "LIKE" и не слова про "Locate", но я давно еще читал в другом справочнике про этот метод, только про него совсем забыл.
Последний раз редактировалось фЁдОр; 06.11.2007 в 13:17. |
06.11.2007, 13:25 | #8 | |
Форумчанин
Регистрация: 28.07.2007
Сообщений: 361
|
Цитата:
Если не устраивает Locate, должна быть возможность фильтровки локального буфера на стороне клиента. Попробуйте воспользоваться свойствами Filter и Filtered. Задаем в свойстве ADOQueFirmRatissDisk.SQL: select * from firm С помощью этого запроса тянем все записи из таблицы Firm на сторону клиента один раз и больше запрос не трогаем. procedure TForm1.Edit1Change(Sender: TObject); begin if Edit1.Text = '' then ADOQueFirmRatissDisk.Filtered = False else begin ADOQueFirmRatissDisk.Filter := 'NAME=''' + Edit1.Text + '*'''; ADOQueFirmRatissDisk.Filtered := True; end; end; При изменении Edit1.Text запрос будет фильтроваться на стороне клиента в локальном буфере. Если Edit1.Text = 'ЗАО', в гриде вы должны увидеть только строки начинающиеся с ЗАО. Очистите поле Edit1 и вернетесь к исходному виду... Но лично мне Locate нравится больше... Последний раз редактировалось Rik; 06.11.2007 в 13:28. |
|
06.11.2007, 14:16 | #9 |
Форумчанин
Регистрация: 06.09.2007
Сообщений: 908
|
Я же не говорю, что меня Locate не устраивает, он вообще вылетел у меня из головы, а справочнике описан только LIKE. Но я не пременно последую Вашему совету, раз все так его хвалят.
Последний раз редактировалось фЁдОр; 06.11.2007 в 14:25. |
06.11.2007, 14:24 | #10 |
Форумчанин
Регистрация: 06.09.2007
Сообщений: 908
|
Большое всем спасибо! Nemon'y, mihali4'y, Rik'y. Извеняйте если, что не так. Я решил сделать поиск только по нажатию кнопки через Locate.
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Поиск слова в таблице (datagridview) | kommunist | Общие вопросы .NET | 4 | 11.04.2010 20:38 |
Поле в таблице | s.mag | БД в Delphi | 7 | 15.05.2008 18:23 |
поиск в таблице | puma | Помощь студентам | 3 | 22.04.2008 23:56 |
Поиск в таблице | Voffka | БД в Delphi | 1 | 08.05.2007 01:16 |
поиск и замена в неиндексированной таблице Dbase Iv | Deicider | БД в Delphi | 2 | 07.12.2006 23:18 |