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

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

Как передать в TQuery параметр равный null [D7]


alsov1 ©   (2004-11-05 16:03:00) 

Приветствую Мастера!

Не получается передать в кверик параметр равный null

делаю так:

query.sql.add('select * from table1 where id=:id');
query.Parameters.Items[0].Value := 'Null';
query.open;

Делфя компилит, а при выполнении ругается.

Причём пробывал вместо
query.Parameters.Items[0].Value := 'Null';
писать и
query.Parameters.ParamValues['id'] := 'Null'
и
query.Parameters.ParamByName('id').value := 'Null'

Если кто знает - помогите

Заранее спасибо


Johnmen   (2004-11-06 00:04:00) [1]

>KSergey ©  (05.11.04 17:10) [15]

Ну про оптимизатор говорить - пустое. Ведь мы не знаем про тип СУБД.
А лог.выр. могут выч-ся слева-направо и наоборот.


KSergey   (2004-11-05 17:10:00) [2]

> [13] Johnmen ©   (05.11.04 17:06)
> >KSergey ©   (05.11.04 17:01) [12]
>
> Зависит от правила вычисления лог.выражений.

Это я не совсем понял, признАюсь...
Вообще я имел в виду то, что OR оптимизатор жутко не любит, фактически оптимизация сразу летит в чертям. Когда-то тоже таким баловался "отключая" ненужные в данный момент парамтеры, но скорость была отвратной. Переделал на несколько запросов, разных, по ситуации.


alsov1   (2004-11-05 17:08:00) [3]

Так выходит лучше два запроса писать?

Дело в том, что эта процедурка довольно часто повторяться будет, не сильно ли это замедлит работу?


Johnmen   (2004-11-05 17:06:00) [4]

>KSergey ©   (05.11.04 17:01) [12]

Да, ты прав. Зависит от правила вычисления лог.выражений.

where (:id1 is null) or ((id=:id2) and (:id3 is not null))
id1=id2=id3


alsov1   (2004-11-05 17:01:00) [5]

Johnmen
откуда idl взялся


KSergey   (2004-11-05 17:01:00) [6]

> [10] Johnmen ©   (05.11.04 16:56)
> where (:id1 is null) or (id=:id2)

Только оптимизатору это дюже не понравится...
Я бы 2 запроса сколбасил разных. В зависимости от ситуации.


Johnmen   (2004-11-05 16:56:00) [7]

where (:id1 is null) or (id=:id2)
где пар.id1=id2


alsov1   (2004-11-05 16:40:00) [8]

Есть таблица
id  ido   text
1   null  gjdg
2   null  dfgsdg
3    1    dfgdsfgds

надо выводить поочерёдно то все записи где ido = null,
то где ido = числу


alsov1   (2004-11-05 16:35:00) [9]

DataType - ftUnknown
direction - pdInput

Поигрался с параметрами - добился того чтоб не ругалось
Attributes - [paNullable]
DataType - тип поля ftInteger

но результат всё-равно отличается от запроса
select * from table1 where id is null


Соловьев   (2004-11-05 16:34:00) [10]


> 'select * from table1 where id=:id'

а что автор хочет получить от запроса
select * from table1 where id=null?
для сравнения с NULL надо писать where field is null


Vlad   (2004-11-05 16:29:00) [11]


> alsov1   (05.11.04 16:26) [5]

свойства DataType, Direction установлено?


alsov1   (2004-11-05 16:26:00) [12]

На это -
query.Parameters.Items[0].Value := Null;

тот же эффект - компилин но не работает
пишет "неправильно определён объект Parametr"


Vlad   (2004-11-05 16:14:00) [13]


> alsov1   (05.11.04 16:12) [2]

Сорри, тогда Value:= null;


Соловьев   (2004-11-05 16:14:00) [14]


> query.Parameters.Items[0].Value := 'Null';
>
> LOL :-)
>
> query.Parameters.ParamByName('id').Clear;

uses Variants;

query.Parameters.Items[0].Value := Null;


alsov1   (2004-11-05 16:12:00) [15]

Vlad

Не работает, даже делфя не компильнула - говорит нет метода Clear.

Может стоит оговориться, что используется TADOQuery


Vlad   (2004-11-05 16:06:00) [16]


> query.Parameters.Items[0].Value := 'Null';

LOL :-)

query.Parameters.ParamByName('id').Clear;


Наверх

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