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