![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как правильно сформировать 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