Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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


Страницы:   1 2

SyS ©   (2009-02-05 07:18:00) 

Добрый день!
Вопрос следующий:
В IBQuery запрос:
select * from t1
where date_otp+45 between :D1 and :D2
выполняется.
При попытке перейти на параметр
select * from t1
where date_otp+:P1 between :D1 and :D2, возникает ошибка.

Такой запрос не будет работать через параметр? или что можно в данном случае сделать?


dzr_gregory   (2009-02-20 16:21:00) [1]

А если модифицировать запрос вот так:

select * from t1
where DATEADD(:P1 DAY TO date_otp) between :D1 and :D2


Правда работать будет вроде начиная с Firebird 2.0 или даже 2.1


SyS   (2009-02-06 13:24:00) [2]

>Anatoly Podgoretsky ©   (06.02.09 11:54) [22]
а ответ в SyS   (06.02.09 06:32) [19] - это не то?
вроде, все типы данных названы.


Anatoly Podgoretsky   (2009-02-06 11:54:00) [3]


> Johnmen ©   (06.02.09 10:23) [21]

Ну мы так и не получили полной информации о типах.


Johnmen   (2009-02-06 10:23:00) [4]


> Но почему не работает запрос через параметр?

Всё дело в связке парсера и анализатора применительно к данному выражению. Его результат должен иметь тип. Этот тип определяется типом операндов с учетом выполняемых операций. По-видимому, соответствующая ф-ия клиентской библиотеки не может разрешить данную неоднозначность. В идеале она ожидает "единообразное" выражение.


SyS   (2009-02-06 06:35:00) [5]

>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.


SyS   (2009-02-06 06:32:00) [6]

>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


Johnmen   (2009-02-05 19:21:00) [7]

...а также давай версию сервера, версию клиента и диалект.
Но можешь не давать, а сделать по-простому:
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)


Anatoly Podgoretsky   (2009-02-05 15:17:00) [8]

> SyS  (05.02.2009 14:25:13)  [13]

Ты давай все, и параметра, и данных и на сервере


clickmaker   (2009-02-05 14:59:00) [9]

> Куда это вставить?

куда-куда... в запрос, конечно


SyS   (2009-02-05 14:31:00) [10]

>clickmaker ©   (05.02.09 14:28) [14]
А как запрос поймёт, что такое Delta?
>DECLARE VARIABLE Delta INTEGER;
Куда это вставить?


clickmaker   (2009-02-05 14:28:00) [11]

а если так
DECLARE VARIABLE Delta INTEGER;
Delta=:P1;
select * from t1
where date_otp+Delta between :D1 and :D2


SyS   (2009-02-05 14:25:00) [12]

>Anatoly Podgoretsky ©   (05.02.09 14:23) [12]
> SyS  (05.02.2009 14:11:11)  [11]

>Ну и какой у тебя Data type?

Чего Параметра?
Integer.


Anatoly Podgoretsky   (2009-02-05 14:23:00) [13]

> SyS  (05.02.2009 14:11:11)  [11]

Ну и какой у тебя Data type?


SyS   (2009-02-05 14:11:00) [14]

>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 13:10:00) [15]


> SyS   (05.02.09 12:18) [7]
> >Anatoly Podgoretsky ©   (05.02.09 11:49) [6]
> Field Name: Date_otp
> Field Type: DATE.

Кстати не понял, а откуда это?


Anatoly Podgoretsky   (2009-02-05 13:06:00) [16]

> SyS  (05.02.2009 12:18:07)  [7]

К DATE можно прибавлять только Integer


Johnmen   (2009-02-05 12:37:00) [17]


> SyS   (05.02.09 11:37) [5]

Мы код то увидим когда-нибудь или нет?


SyS   (2009-02-05 12:18:00) [18]

>Anatoly Podgoretsky ©   (05.02.09 11:49) [6]
Field Name: Date_otp
Field Type: DATE.


Anatoly Podgoretsky   (2009-02-05 11:49:00) [19]

Что есть поле формата даты.?
Не оперирует FB такими понятиями.


SyS   (2009-02-05 11:37:00) [20]

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.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо