Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
15-1234181465
desc
2009-02-09 15:11
2009.04.12
Где в Мазиле расположен КЭШ ?


2-1235452145
vegarulez
2009-02-24 08:09
2009.04.12
вопрос связи поток и DataModule


15-1234183264
OlegNik
2009-02-09 15:41
2009.04.12
Как узнать сколько ВЗУ (флешек) в компе?


2-1235523225
Abcdef123
2009-02-25 03:53
2009.04.12
Почему не работает функция StrToBool?


2-1235044788
Yellow_D
2009-02-19 14:59
2009.04.12
Как работать с Data (Pointer) в компоненте TreeView?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский