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