Работа с датами в FB

IBX, FIBPlus, UIB, ADO, .Net и прочее-прочее-прочее, в общем все, что относится к созданию приложений, работающих с InterBase, Firebird и Yaffil - клиент-серверных, трехзвенных, консольных и т.п.

Модератор: kdv

Ответить
Zhur
Сообщения: 125
Зарегистрирован: 01 мар 2006, 18:17

Работа с датами в FB

Сообщение Zhur » 11 апр 2006, 10:47

Добрый день...
Хочу поближе познакомиться с TIMESTAMP в FB2.0.
Конкретно - как лучше быть с региональными настройками и созданием SQL-запросов в клиентском приложении.
Думаю, что все прекрасно понимают о чем я.
Уважаемые, а у Вас нигде не имеется подобная ссылочка? Буду учиться читать 8)

Merlin
Динозавр IB/FB
Сообщения: 1502
Зарегистрирован: 27 окт 2004, 11:44

Сообщение Merlin » 11 апр 2006, 13:03

Самое простое решение - не связываться с форматами вообще и передавать даты как параметры соответствующего типа, а не строки. Если по каким-то причинам это совсем уж неудобно, то либо писать на клиенте процедурку опознавания формата и переформатирования строк в один из принимаемых FB жёстких форматов и гонять строки в запросы через неё, либо насильно управлять локалью/форматом внутри приложения через WinAPI и приводить приложение к требуемой локали.

Zhur
Сообщения: 125
Зарегистрирован: 01 мар 2006, 18:17

Сообщение Zhur » 11 апр 2006, 13:22

Merlin писал(а):Самое простое решение - не связываться с форматами вообще и передавать даты как параметры соответствующего типа, а не строки.
Как в таком случае построить запрос
SELECT * FROM MYTABLE T WHERE T.MYDATETIME BETWEEN DATETIME1 and DATETIME2
не используя хранимых процедур?
Сейчас я делаю вот так
IBQuery.SQL.Add('SELECT * FROM MYTABLE T WHERE T.MYDATETIME BETWEEN '+DateTimeToStr(var1)+' AND '+DateTimeToStr(var2)');

Dimitry Sibiryakov
Заслуженный разработчик
Сообщения: 1436
Зарегистрирован: 15 сен 2005, 09:05

Сообщение Dimitry Sibiryakov » 11 апр 2006, 13:29

Вот так:
SELECT * FROM MYTABLE T WHERE T.MYDATETIME BETWEEN :DATETIME1 and :DATETIME2
и потом
Query.Prepare; // где-нибудь
.....
Query.ParamByName('DATETIME1').AsDateTime := Var1;
Query.ParamByName('DATETIME2').AsDateTime := Var2;

Zhur
Сообщения: 125
Зарегистрирован: 01 мар 2006, 18:17

Сообщение Zhur » 11 апр 2006, 13:30

УсЁ понял. Спасибо.

Ответить