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

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

Арифметические операции с датами в Interbase [D5, IB5.x]


Sergei Ivanov ©   (2002-10-31 14:21:00) 

Столкнулся с граблями.

Программа использует компонент IBQuery (Delphi 5) для получения данных из БД (InterBase 5). Запрос выглядит сведущим образом (параметр DateStat = 30.08.2002 (тип Date))

Select сount(StaffId) from Staff
where (s.EndDate - :DateStat) > 180


Возвращается ошибка: SQL error code = -303
conversion error from string "30-AUG-2002"

При этом запросы следующего вида отрабатывают нормально.

Select сount(StaffId) from Staff
where s.EndDate = :DateStat


Select сount(StaffId) from Staff
where (s.EndDate - "30-AUG-2002")> 180


Так же пробовал задавать параметр DateStat = "30-AUG-2002" (тип String) происходит тоже самое, т.е возвращается ошибка -303.

При использование CAST происходит следующее:

Select сount(StaffId) from Staff
where (s.EndDate - Cast( :DateStatAs Date)) > 180


Возвращается ошибка:SQL error code = -804
Data type unknown

Не зависимо от того, как я задаю параметр String-ом или Date.

Может, кто сталкивался с такой проблемой. Дело в том, что без параметра DateStat обойтись нельзя.


Sergei Ivanov   (2002-10-31 15:53:00) [1]

> Johnmen
Спасибо!


Johnmen   (2002-10-31 15:46:00) [2]

Тогда все просто :
where (s.EndDate - 180)>:DateStat


Johnmen   (2002-10-31 15:39:00) [3]

>Sergei Ivanov

Да, виноват... Действительно возвращает...:)


Johnmen   (2002-10-31 15:26:00) [4]

>Sergei Ivanov (31.10.02 15:11)
>Для справки: (

Откуда взята такая интересная справка ?


Wolf226   (2002-10-31 15:26:00) [5]

Да не в дате тут дело!
Просто непозволяется с параметрами арифметические операции производить.
По пробуй тоже с вещественными числами - та же ошибка.

Генерируй SQL вручную, без параметров.

IBQuery1.sql.text:="select s.enddate-"+DateToStr(... и.т.д


Sergei Ivanov   (2002-10-31 15:11:00) [6]

Да прошу прощения за опечтку

Select сount(StaffId) from Staff S
where (s.EndDate - :DateStat) > 180

sэто алиас для таблицы Staff, а s.endDate - это поле типа дата из таблицы Staff

Для справки: (s.EndDate - "30-AUG-2002") данное выражение возвращает количество дней между двумя датами.




Johnmen   (2002-10-31 14:32:00) [7]

Интересно, а что будет результатом выражения
"Sergei Ivanov"-"Ivanov" ? (Это намек...:))
И что тобою ожидается от s.EndDate - :DateStat ?


Alexandr   (2002-10-31 14:25:00) [8]

сдается, мне запрос у тебя неправдоподобный...
откуда s.endDate? таблицы такой у тебя в запросе нету.

Что - то вы скрываете, сударь.


Наверх

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