Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как правильно сформировать SQL запрос


alkin ©   (2006-05-04 08:40:00) 

Как правильно сформировать SQL запрос
Делаю так:
//------------------------------------
  DataModule.FindQuery.SQL.Clear;
  DataModule.FindQuery.SQL.Add('SELECT *');
  DataModule.FindQuery.SQL.Add('FROM Base');
  DataModule.FindQuery.SQL.Add('WHERE Field1 LIKE :SearchWord');
  DataModule.FindQuery.Parameters.ParamByName('SearchWord').Value := '%'+SearchWord.Text+'%';
//------------------------------------
В результате получаю выборку строк из базы Base
В выборке все строки, где есть вхождения подстроки SearchWord в колонке Field1

А как изменить запрос, чтобы он искал (и находил) эту подстроку SearchWord в
нескольких колонках например (Field1, Field2, Field3)?


Sergey13   (2006-05-04 10:43:00) [1]

2 [6] ЮЮ ©   (04.05.06 10:38)
> Такой подход работал в TQuery.Params
А тут видимо АДО. Не обратил внимания, сори.


ЮЮ   (2006-05-04 10:38:00) [2]


> При присвоении по имени

Это как? ParamByName - это лишь один из нескольких экземпляров TParameter в коллекции TParameters.
Такой подход работал в TQuery.Params


Sergey13   (2006-05-04 10:31:00) [3]

2[4] ЮЮ ©   (04.05.06 10:29)
>правда в Parameters будет два элемента, но тут и цикл можно использовать.
Зачем цикл? При присвоении по имени значение присвоится всем одинаковым элементам.


ЮЮ   (2006-05-04 10:29:00) [4]

никто не мешает использовать один и тот же параметр в нескольких местах
WHERE (Field1 LIKE :SearchWord) OR (Field2 LIKE :SearchWord)

правда в Parameters будет два элемента, но тут и цикл можно использовать.

З.Ы. БД какая


Sergey13   (2006-05-04 09:29:00) [5]

2 [2] alkin   (04.05.06 09:20)
>(Вот только переменных будет уже несколько)
Не факт. Сколько объявишь - столько и будет.


alkin   (2006-05-04 09:20:00) [6]

Кажется получилось:
//------------------------------------
  DataModule.FindQuery.SQL.Clear;
  DataModule.FindQuery.SQL.Add('SELECT *');
  DataModule.FindQuery.SQL.Add('FROM Base');
  DataModule.FindQuery.SQL.Add('WHERE (Field1 LIKE :SearchWord) OR (Field2 LIKE :SearchWord2)');
  DataModule.FindQuery.Parameters.ParamByName('SearchWord').Value := '%'+SearchWord.Text+'%';
  DataModule.FindQuery.Parameters.ParamByName('SearchWord2').Value := '%'+SearchWord.Text+'%';
//------------------------------------
В результате получаю выборку строк из базы Base
В выборке все строки, где есть вхождения подстроки SearchWord в колонки Field1 и Field2
(Вот только переменных будет уже несколько)

Спасибо > Anatoly Podgoretsky


Anatoly Podgoretsky   (2006-05-04 08:46:00) [7]

оператор OR


Наверх

Титульная страница Поиск, карта сайта Написать письмо