Форум: "Начинающим";
Текущий архив: 2009.04.12;
Скачать: [xml.tar.bz2];
ВнизВ запросе прибавить к дате число через параметр Найти похожие ветки
← →
SyS (2009-02-05 07:18) [0]Добрый день!
Вопрос следующий:
В IBQuery запрос:
select * from t1
where date_otp+45 between :D1 and :D2
выполняется.
При попытке перейти на параметр
select * from t1
where date_otp+:P1 between :D1 and :D2, возникает ошибка.
Такой запрос не будет работать через параметр? или что можно в данном случае сделать?
← →
Sergey13 © (2009-02-05 08:35) [1]1. Со скобками поиграйся.
2. Почему в D1 и D2 сразу не учесть смещение?
← →
Johnmen © (2009-02-05 09:06) [2]
> возникает ошибка.
враньё...
← →
Anatoly Podgoretsky © (2009-02-05 09:18) [3]> SyS (05.02.2009 7:18:00) [0]
> возникает ошибка.
возникает ответ, пользуйся.
← →
clickmaker © (2009-02-05 11:08) [4]а что такое :P1? и можно ли его прибавлять к date_otp?
← →
SyS (2009-02-05 11:37) [5]date_otp-Это поле формата даты.
Ошибка такая: Data type unknown.
задавал параметру P1 тип Integer - ошибка та же.
перебрал все доступные для параметра типы - ошибка та же.
>Sergey13 © (05.02.09 08:35) [1]
>1. Со скобками поиграйся.
>2. Почему в D1 и D2 сразу не учесть смещение?
Со скобками тот же результат. А через D1 и D2 - может это как вариант... Но хочется сделать так, но не понятно, в чём ошибка.
>Johnmen © (05.02.09 09:06) [2]
> возникает ошибка.
> враньё...
У меня возникает. Может, что-то не добавил..
Использую FB, база данных формата gdb.
← →
Anatoly Podgoretsky © (2009-02-05 11:49) [6]Что есть поле формата даты. ?
Не оперирует FB такими понятиями.
← →
SyS (2009-02-05 12:18) [7]>Anatoly Podgoretsky © (05.02.09 11:49) [6]
Field Name: Date_otp
Field Type: DATE.
← →
Johnmen © (2009-02-05 12:37) [8]
> SyS (05.02.09 11:37) [5]
Мы код то увидим когда-нибудь или нет?
← →
Anatoly Podgoretsky © (2009-02-05 13:06) [9]> SyS (05.02.2009 12:18:07) [7]
К DATE можно прибавлять только Integer
← →
Anatoly Podgoretsky © (2009-02-05 13:10) [10]
> SyS (05.02.09 12:18) [7]
> >Anatoly Podgoretsky © (05.02.09 11:49) [6]
> Field Name: Date_otp
> Field Type: DATE.
Кстати не понял, а откуда это?
← →
SyS (2009-02-05 14:11) [11]>Johnmen © (05.02.09 12:37) [8]
При чём тут код?
в вопросе написан запрос
select * from t1
where date_otp+:P1 between :D1 and :D2, возникает ошибка.
В коде, вызывающим запрос идёт указание параметров:
IBQuery.Close;
IBQuery.ParamByName("D1").Value:=strtodate(edit1.text);
IBQuery.ParamByName("D2").Value:=strtodate(edit2.text);
IBQuery.ParamByName("P1").AsInteger:=45;
IBQuery.Open;
Ошибка: Data type unknown.
Если в запрос конкретно ставлю +45 (не через параметр P1), то он выполняется.
Мой вопрос: почему запрос не работает через параметр?
← →
Anatoly Podgoretsky © (2009-02-05 14:23) [12]> SyS (05.02.2009 14:11:11) [11]
Ну и какой у тебя Data type?
← →
SyS (2009-02-05 14:25) [13]>Anatoly Podgoretsky © (05.02.09 14:23) [12]
> SyS (05.02.2009 14:11:11) [11]
>Ну и какой у тебя Data type?
Чего Параметра?
Integer.
← →
clickmaker © (2009-02-05 14:28) [14]а если так
DECLARE VARIABLE Delta INTEGER;
Delta=:P1;
select * from t1
where date_otp+Delta between :D1 and :D2
← →
SyS (2009-02-05 14:31) [15]>clickmaker © (05.02.09 14:28) [14]
А как запрос поймёт, что такое Delta?
>DECLARE VARIABLE Delta INTEGER;
Куда это вставить?
← →
clickmaker © (2009-02-05 14:59) [16]> Куда это вставить?
куда-куда... в запрос, конечно
← →
Anatoly Podgoretsky © (2009-02-05 15:17) [17]> SyS (05.02.2009 14:25:13) [13]
Ты давай все, и параметра, и данных и на сервере
← →
Johnmen © (2009-02-05 19:21) [18]...а также давай версию сервера, версию клиента и диалект.
Но можешь не давать, а сделать по-простому:select * from t1 where date_otp between :D1 and :D2
IBQuery.ParamByName("D1").AsDateTime:=strtodate(edit1.text)-P1;
IBQuery.ParamByName("D2").AsDateTime:=strtodate(edit2.text)-P1;
где P1:=45;
PS
Не стОит писатьstrtodate(edit1.text)
← →
SyS (2009-02-06 06:32) [19]>Johnmen © (05.02.09 19:21) [18]
>IBQuery.ParamByName("D1").AsDateTime:=strtodate(edit1.text)-P1;
>IBQuery.ParamByName("D2").AsDateTime:=strtodate(edit2.text)-P1;
>где P1:=45;
Это как вариант.
Но почему не работает запрос через параметр?
Типы данных:
Параметр - Integer;
поле date_otp - DATE.
Диалект 3.
FB2.0
← →
SyS (2009-02-06 06:35) [20]>clickmaker © (05.02.09 14:28) [14]
если так
DECLARE VARIABLE Delta INTEGER;
Delta=:P1;
select * from t1
where date_otp+Delta between :D1 and :D2
Даёт ошибку: Token unknown VARIABLE.
← →
Johnmen © (2009-02-06 10:23) [21]
> Но почему не работает запрос через параметр?
Всё дело в связке парсера и анализатора применительно к данному выражению. Его результат должен иметь тип. Этот тип определяется типом операндов с учетом выполняемых операций. По-видимому, соответствующая ф-ия клиентской библиотеки не может разрешить данную неоднозначность. В идеале она ожидает "единообразное" выражение.
← →
Anatoly Podgoretsky © (2009-02-06 11:54) [22]
> Johnmen © (06.02.09 10:23) [21]
Ну мы так и не получили полной информации о типах.
← →
SyS (2009-02-06 13:24) [23]>Anatoly Podgoretsky © (06.02.09 11:54) [22]
а ответ в SyS (06.02.09 06:32) [19] - это не то?
вроде, все типы данных названы.
← →
dzr_gregory (2009-02-20 16:21) [24]А если модифицировать запрос вот так:
select * from t1
where DATEADD(:P1 DAY TO date_otp) between :D1 and :D2
Правда работать будет вроде начиная с Firebird 2.0 или даже 2.1
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2009.04.12;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.005 c