Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > вывести все значения


Автор: Cashey 8.6.2009, 15:52
загаловок не совсем корректный. не знаю как лучше назвать.

в общем смысл такой. есть запрос **** WHERE t.field1 = :P1 AND t.field2 = :P2 AND t.field3 = :P3, где Px это параметры ADOQuery1. Все нормально если нужно вывести отбор по всем этим значениям. Но что делать если надо вывести все значения в не зависимости от  параметра PЗ? Переписвть SQL не получается. так как в этом случае начинает ругатся на изменение в полях. Используются Lookup поля.
Надеюсь понятно описал smile

Автор: Romikgy 8.6.2009, 18:07
Цитата(Cashey @  8.6.2009,  14:52 Найти цитируемый пост)
Но что делать если надо вывести все значения в не зависимости от  параметра PЗ? 

т.е. р3 не учитывать?

Автор: Keeper89 8.6.2009, 19:25
А почему не формировать запрос в зависимости от того нужен ли последний параметр?

Автор: Deniz 9.6.2009, 05:11
Если я правильно понял, то:
Код
select ... from ... 
where (t.field1 = :P1 or :P1 is null)
  AND (t.field2 = :P2 or :P2 is null)
  AND (t.field3 = :P3 or :P3 is null)

Автор: Cashey 10.6.2009, 10:20
Цитата(Deniz @  9.6.2009,  06:11 Найти цитируемый пост)
Если я правильно понял, то:КодincludeSyntax('sql');select ... from ... where (t.field1 = :P1 or :P1 is null)  AND (t.field2 = :P2 or :P2 is null)  AND (t.field3 = :P3 or :P3 is null)

идея интересная, но не работает.


Цитата(Keeper89 @  8.6.2009,  20:25 Найти цитируемый пост)
А почему не формировать запрос в зависимости от того нужен ли последний параметр?

когда происходит замена SQL текста обнуляется список TFields, а к полям идет привязка как элементов формы так и lookup полей 

Автор: Frees 10.6.2009, 10:37
Цитата(Cashey @  10.6.2009,  12:20 Найти цитируемый пост)
идея интересная, но не работает.


должна работать если правельно пользовать такой запос

если P3 например не нужно то ты должен этому параметру присвоить NULL

Код

ADOQuery1.ParamByName('P3').Value := NULL;

Автор: Deniz 10.6.2009, 11:18
Цитата(Cashey @  10.6.2009,  13:20 Найти цитируемый пост)
идея интересная, но не работает.
А что не работает?

Автор: Cashey 10.6.2009, 11:27
Цитата(Frees @  10.6.2009,  11:37 Найти цитируемый пост)
должна работать если правельно пользовать такой запос

в этом случае при присваении значению P3 отбор происходит по всем записям, т.е. он игнорируется

В параметрах ADOQuery1 автоматически появляются 2 параметра с одним именем. у одного тип Integer, у второго оставяю NULL. возможно какая то ошибка в этом

Добавлено через 9 минут и 19 секунд
спасибо за идею. разобрался. надо так делать:
Код
AND (t.field3 = :P3 or :P4 is null)

и 
Код
ADOQuery1.ParamByName('P4').Value := NULL;

Автор: Deniz 10.6.2009, 13:32
Цитата(Cashey @  10.6.2009,  14:27 Найти цитируемый пост)
надо так делать:
нет, просто поменяй текст запроса, это, вероятно, глюки ADO в Delphi.
Код
declare @Param1 int
set @Param1 = :p1
select top 10 * from myTable t
where (t.MyField = @Param1 or @Param1 is null)
вот так точно работает, сам проверял.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)