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

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

Работа с параметрами в SQL.


Гриша1 ©   (2004-04-01 13:54:00) 

Могу ли я в SQL сравнить параметр с константой?

Например,

select * from ....
where :PARAM1='ABCD'


Гриша1   (2004-04-01 15:37:00) [1]

Пустые значения не NULL, а строки ''. Параметр PREZERV1 никогда равным NULL не бывает.

Результат все время равносилен следуещему

select * from  my_table
where  F1=:PREZERV3 or F1=''
order by F2,F3


Sergey_Masloff   (2004-04-01 15:34:00) [2]

Курдль ©   (01.04.04 15:19) [14]
>С пустым таким образом - не выйдет. Не сможешь передать >параметру NULL
Откуда такая уверенность?

ParamByName('XXX').Clear(); не помогает?


bushmen   (2004-04-01 15:24:00) [3]

>Не сможешь передать параметру NULL

Как я понимаю, у него пустые значения не NULL, а если и NULL, то можно передавать, например, 0, а в самой процедуре уже обработать


Курдль   (2004-04-01 15:19:00) [4]

С пустым таким образом - не выйдет. Не сможешь передать параметру NULL


Гриша1   (2004-04-01 15:11:00) [5]

Да не заморачивайся, Курдль. Намутю в коде что-нибудь.
Но если очень интересно, то запрос примерно такой.

СУБД Firebird.

Компонент TIBQuery.

select * from  my_table
where  F1=:PREZERV3 or F1='' or :PREZERV='ABCD'
order by F2,F3

Хочу сделать так, чтобы выводились записи с пустым полем F1, c F1=параметр, и при передаче особого значения параметра(ABCD) - все записи. Реально?


Johnmen   (2004-04-01 15:04:00) [6]

> Конечно, пробовал, похоже он вообще игнорирует это условие.
> Результат такой же как и без второго операнда OR.

>при определенном значение PARAM1 условие выполнялось всегда.

Видимо тебе надо AND, судя по всему...


Sergey_Masloff   (2004-04-01 15:03:00) [7]

Гриша1   (01.04.04 13:54)  
>Могу ли я в SQL сравнить параметр с константой?
>Например,
>select * from ....
>where :PARAM1='ABCD'

например

select * from ....
where 'ABCD'=:PARAM1

можешь


Курдль   (2004-04-01 14:58:00) [8]


> Конечно, пробовал, похоже он вообще игнорирует это условие.
> Результат такой же как и без второго операнда OR.

Ок! Давай разбираться, что за СУБД, как объявлены параметры, как передаются и т.п.


Гриша1   (2004-04-01 14:47:00) [9]

To BushMen - Извини, не так выразился, динамически формируется не сам запроc, а значения параметров.


Johnmen   (2004-04-01 14:45:00) [10]

>Могу ли я в SQL сравнить параметр с константой?

Можно, разрешаю :)


Гриша1   (2004-04-01 14:44:00) [11]

То Курдль. Конечно, пробовал, похоже он вообще игнорирует это условие. Результат такой же как и без второго операнда OR.

To BushMen. 100% нельзя так сделать? Ты это знаешь наверняка или просто  так думаешь.


Курдль   (2004-04-01 14:30:00) [12]

Тарды сравнивай и не парься над гнусными мыслями об оптимизации проги и т.п. вредностями - главное, шоб тебе было хорошо!
Кстати, а ты, прежде чем спросить, сам запрос-то пробовал на реальной БД? Или это тоже лень - проще на форуме все разузнать...


bushmen   (2004-04-01 14:29:00) [13]

>и в нескольких местах динамически формируется SQL.Text

Если у тебя уже формируется запрос динамически, вот и дописывай туда. А запросов таких видов, как тебе надо нет


Гриша1   (2004-04-01 14:20:00) [14]

То Курдль: Ты зришь прямо в корень. Молодец. Лень, и потом придется не два раза написать. У меня несколько таких запросов в программе,  и в нескольких местах динамически формируется SQL.Text;


Курдль   (2004-04-01 14:13:00) [15]

А не проще достигать той же цели двумя разными запросами?
Или Вам лень 2 раза написать Query.SQL.Text := ...?


Гриша1   (2004-04-01 14:07:00) [16]

Ты не понял, я передаю разные значения PARAM1 и хочу, чтобы при определенном значение PARAM1 условие выполнялось всегда.

Вот так :

select * from ....
where [field]=:PARAM1 or 'ABCD=:PARAM1

Чтобы при ABCD выводились все значения, а при других включался фильтр по полю.


Лысый   (2004-04-01 13:59:00) [17]

Нафига. Параметр подразумевает, что меняется в процессе выполнения программы. Тебе же проще просто сделать
select * from ....
where [field]='ABCD'


Наверх

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