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

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

Параметры в запросе


Kostafey ©   (2006-11-16 01:08:00) 

Прошу подсказать где я потерял мозги, так как не смотря на всю глупость вопроса не смог с ним разобраться.

Посылаю запрос в датасет:
Select ...
from ...
where (DATE_ZVK1 between :DateFrom and :DateTo)
union
Select ...
from ...
where (DATE_ZVK1 between :DateFrom and :DateTo)
order by ...

ADODataSet1.Parameters.ParamByName('DateFrom').Value:='2006.04.01';
ADODataSet1.Parameters.ParamByName('DateTo').Value:='2006.05.01';

И не работает ! Пишет ошибка в параметре.

Вот так будет работать, но это слишком некрасиво:
Select ...
from ...
where (DATE_ZVK1 between :DateFrom and :DateTo)
union
Select...
where (DATE_ZVK1 between :DateFrom_1 and :DateTo_1)
order by ...

ADODataSet1.Parameters.ParamByName('DateFrom').Value:='2006.04.01';
ADODataSet1.Parameters.ParamByName('DateTo').Value:='2006.05.01';
ADODataSet1.Parameters.ParamByName('DateFrom_1').Value:='2006.04.01';
ADODataSet1.Parameters.ParamByName('DateTo_1').Value:='2006.05.01';

Я уж пытался и статические объекты Parameters делать, и без них - ничего не помогает.


Anatoly Podgoretsky   (2006-11-16 09:16:00) [1]

Другими словами ParamByName это "ассоциативный" массив.


Anatoly Podgoretsky   (2006-11-16 09:13:00) [2]

> Kostafey  (16.11.2006 01:20:02)  [2]

Буковки в запросе ничего не значат, это всего лишь алиасы для плейсхолдеров, у тебя четыре параметра и все. Ты даже запрос можешь записать так

select ... where a=:? and a=:? ... a=:?

Смотрим ADODataSet1.Parameters.Count делаем выводы
Не нравится?
Тогда перепеши АДО и БДЕ или все таки используй ADODataSet1.Parameters[I]
А что делать когда это будет не левое, а правое выражение, вешать прикажешь или монетку бросать?


ЮЮ   (2006-11-16 03:12:00) [3]

Subj-евый запрос порождает 4 параметра, а двукратное использование ParamByName заплняет только два из них. Напиши свою фунцию SetParamByName,  в которой пробежав по всем Parameters и найдя с нужным именем присваивай значение и используй её в дальнейшем.

Если движок/сервер позволяет несколько операторов в запросе, как например, MS SQL, то текст запроса можно написать так:

Declare @DateFrom datetime
Set @DateFrom = : DateFrom
Declare @DateTo datetime
Set @DateTo = :DateTo 
Select ...
from ...
where (DATE_ZVK1 between @DateFrom and @DateTo)
union
Select ...
from ...
where (DATE_ZVK1 between @DateFrom and @DateTo)
order by ...


В этом случае будем иметь по одному экземплру в Parameters с имнами 'DateFrom' и 'DateTo'


ЮЮ   (2006-11-16 03:10:00) [4]

Subj-евый запрос порождает 4 параметра, а двукратное использование ParamByName заплняет только два из них. Напиши свою фунцию SetParamByName,  в которой пробежав по всем Parameters и найдя с нужным именем присваивай значение и используй её в дальнейшем.

Если движок/сервер позволяет несколько операторов в запросе, как например, MS SQL, то текст запроса можно написать так:

Declare @DateFrom datetime
Set @DateFrom = : DateFrom
Declare @DateTo datetime
Set @DateTo = :DateTo 
Select ...
from ...
where (DATE_ZVK1 between @DateFrom and @DateTo)
union
Select ...
from ...
where (DATE_ZVK1 between @DateFrom and @DateTo)
order by ...


В этом случае будем иметь по одному экземплру в Parameters с имнами 'DateFrom' и 'DateTo'


sniknik   (2006-11-16 01:54:00) [5]

> Это я опечатался. ВЫДАВАЛИ ОШИБКУ.
не важно. в BDE опечатка действительна...


MikePetrichenko   (2006-11-16 01:49:00) [6]


> sniknik ©   (16.11.06 01:44) [5]
> > Одинаковые названия параметров не выдавали ошибку.
> это в BDE... там да, можно, с одним именем на несколько.
>

Это я опечатался. ВЫДАВАЛИ ОШИБКУ.

P.S. BDE никогда не пользовал. Терпеть его не могу.


sniknik   (2006-11-16 01:44:00) [7]

> Одинаковые названия параметров не выдавали ошибку.
это в BDE... там да, можно, с одним именем на несколько.


MikePetrichenko   (2006-11-16 01:40:00) [8]


> Ух, а если мне надо 10 дат одинаковых проставить, а затем
> еще 10 других (тоже одинаковых) что ж писать
> простое перечисление одинаковых значений ??? Да притом все
> с разными именами. Так и запутаться несложно.

Скажем так. Часто встречался с потребностью указать одно и тоже значение для нескольких параметров. Одинаковые названия параметров не выдавали ошибку. Долго ковырялся в классе TParam (давно это было). В итоге понял, что так оно не работает. Забил.. И стал писать много разных параметров...


Kostafey   (2006-11-16 01:20:00) [9]

> > И не работает ! Пишет ошибка в параметре.
> И не будет. Правильно пишет.
> > Вот так будет работать, но это слишком некрасиво:
> Только так и будет, нравится это тебе или нет.


Ух, а если мне надо 10 дат одинаковых проставить, а затем еще 10 других (тоже одинаковых) что ж писать
простое перечисление одинаковых значений ??? Да притом все с разными именами. Так и запутаться несложно.

Ну что ж. Все равно спасибо за помошь, то б может еще чего пробовать стал бы - лишь время бы потерял.
Будем перечислять значит...


Kostafey   (2006-11-16 01:20:00) [10]

> > И не работает ! Пишет ошибка в параметре.
> И не будет. Правильно пишет.
> > Вот так будет работать, но это слишком некрасиво:
> Только так и будет, нравится это тебе или нет.


Ух, а если мне надо 10 дат одинаковых проставить, а затем еще 10 других (тоже одинаковых) что ж писать
простое перечисление одинаковых значений ??? Да притом все с разными именами. Так и запутаться несложно.

Ну что ж. Все равно спасибо за помошь, то б может еще чего пробовать стал бы - лишь время бы потерял.
Будем перечислять значит...


MikePetrichenko   (2006-11-16 01:14:00) [11]


> И не работает ! Пишет ошибка в параметре.

И не будет. Правильно пишет.


> Вот так будет работать, но это слишком некрасиво:

Только так и будет, нравится это тебе или нет.


Наверх

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