Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
2-1163869543
Berx
2006-11-18 20:05
2006.12.03
Delphi и заголовочне фалы *.h


11-1139940307
Boguslaw
2006-02-14 21:05
2006.12.03
MSEGUI


2-1163623690
framez
2006-11-15 23:48
2006.12.03
вопрос по БД: IB6.5 + BDE


15-1163660330
DelphiLexx
2006-11-16 09:58
2006.12.03
Какой метод есть у DBGridEh a аналогичный TBDGrid.CalcTitleRight?


2-1163766009
Grant
2006-11-17 15:20
2006.12.03
ODBC





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский