Форум: "Начинающим";
Текущий архив: 2006.12.03;
Скачать: [xml.tar.bz2];
ВнизПараметры в запросе Найти похожие ветки
← →
Kostafey © (2006-11-16 01:08) [0]Прошу подсказать где я потерял мозги, так как не смотря на всю глупость вопроса не смог с ним разобраться.
Посылаю запрос в датасет:
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 делать, и без них - ничего не помогает.
← →
MikePetrichenko © (2006-11-16 01:14) [1]
> И не работает ! Пишет ошибка в параметре.
И не будет. Правильно пишет.
> Вот так будет работать, но это слишком некрасиво:
Только так и будет, нравится это тебе или нет.
← →
Kostafey © (2006-11-16 01:20) [2]> > И не работает ! Пишет ошибка в параметре.
> И не будет. Правильно пишет.
> > Вот так будет работать, но это слишком некрасиво:
> Только так и будет, нравится это тебе или нет.
Ух, а если мне надо 10 дат одинаковых проставить, а затем еще 10 других (тоже одинаковых) что ж писать
простое перечисление одинаковых значений ??? Да притом все с разными именами. Так и запутаться несложно.
Ну что ж. Все равно спасибо за помошь, то б может еще чего пробовать стал бы - лишь время бы потерял.
Будем перечислять значит...
← →
Kostafey © (2006-11-16 01:20) [3]> > И не работает ! Пишет ошибка в параметре.
> И не будет. Правильно пишет.
> > Вот так будет работать, но это слишком некрасиво:
> Только так и будет, нравится это тебе или нет.
Ух, а если мне надо 10 дат одинаковых проставить, а затем еще 10 других (тоже одинаковых) что ж писать
простое перечисление одинаковых значений ??? Да притом все с разными именами. Так и запутаться несложно.
Ну что ж. Все равно спасибо за помошь, то б может еще чего пробовать стал бы - лишь время бы потерял.
Будем перечислять значит...
← →
MikePetrichenko © (2006-11-16 01:40) [4]
> Ух, а если мне надо 10 дат одинаковых проставить, а затем
> еще 10 других (тоже одинаковых) что ж писать
> простое перечисление одинаковых значений ??? Да притом все
> с разными именами. Так и запутаться несложно.
Скажем так. Часто встречался с потребностью указать одно и тоже значение для нескольких параметров. Одинаковые названия параметров не выдавали ошибку. Долго ковырялся в классе TParam (давно это было). В итоге понял, что так оно не работает. Забил.. И стал писать много разных параметров...
← →
sniknik © (2006-11-16 01:44) [5]> Одинаковые названия параметров не выдавали ошибку.
это в BDE... там да, можно, с одним именем на несколько.
← →
MikePetrichenko © (2006-11-16 01:49) [6]
> sniknik © (16.11.06 01:44) [5]
> > Одинаковые названия параметров не выдавали ошибку.
> это в BDE... там да, можно, с одним именем на несколько.
>
Это я опечатался. ВЫДАВАЛИ ОШИБКУ.
P.S. BDE никогда не пользовал. Терпеть его не могу.
← →
sniknik © (2006-11-16 01:54) [7]> Это я опечатался. ВЫДАВАЛИ ОШИБКУ.
не важно. в BDE опечатка действительна...
← →
ЮЮ © (2006-11-16 03:10) [8]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:12) [9]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"
← →
Anatoly Podgoretsky © (2006-11-16 09:13) [10]> Kostafey (16.11.2006 01:20:02) [2]
Буковки в запросе ничего не значат, это всего лишь алиасы для плейсхолдеров, у тебя четыре параметра и все. Ты даже запрос можешь записать так
select ... where a=:? and a=:? ... a=:?
Смотрим ADODataSet1.Parameters.Count делаем выводы
Не нравится?
Тогда перепеши АДО и БДЕ или все таки используй ADODataSet1.Parameters[I]
А что делать когда это будет не левое, а правое выражение, вешать прикажешь или монетку бросать?
← →
Anatoly Podgoretsky © (2006-11-16 09:16) [11]Другими словами ParamByName это "ассоциативный" массив.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.12.03;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.046 c