Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.04.12;
Скачать: CL | DM;

Вниз

В запросе прибавить к дате число через параметр   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.017 c
2-1235450566
Abcdef123
2009-02-24 07:42
2009.04.12
TDBGrid. Какие клавиши для множественного выбора?


2-1235503620
dmitry_12_08_73
2009-02-24 22:27
2009.04.12
Проверка на открытое окно в приложении


2-1235026821
CodeMaster
2009-02-19 10:00
2009.04.12
C++ to Delphi


11-1199562367
Willower
2008-01-05 22:46
2009.04.12
Incompatible types: TKOLApplet and PControl


8-1192453804
terc
2007-10-15 17:10
2009.04.12
Получить RGB из пикселя TImage (который не TColor)???