Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / PowerBuilder Новый топик    Ответить
 Проблема работы с DATETIME...  [new]
Antoxa
Member

Откуда: Санкт-Петербург
Сообщений: 13
Уважаемые господа!

Требуется помощь по решению проблемы работы с датой и временем. В базе имеется таблица, в таблице есть поле суть DATETIME (TIMESTAMP). По спецификации требуется, чтобы работа с этим полем велась посредством двух контролов – в одном дата, в другом время. Замечу, что проект разрабатывается для работы с тремя СУБД: ASA, MS SQL-Server, Oracle. Одно из возможных (на мой взгляд) решений состоит в следующем... В SQL-запрос помещаются два computed field’а ссылающиеся на ту самую колонку, которую надо редактировать. Эти два поля помещаются на датавинду. Для первого поля задается формат [shotdate], для второго [time] (формат устанавливается как для редактирования, так и для отображения). При изменении даты (первое поле) происходит сброс времени в 00:00:00. При этом полученое занчение даты-времени является вполне валидным. При изменении же времени (второе поле) происходит сброс даты в 00.00.0000. Полученое значение даты-времени является невалидным. Чтобы избежать невалидности на событие ItemError была закодирована подстановка ненулевой даты. НО!!! Оказалось, что не всякое значение времени ведет к сбросу даты в ноль. Например, если ввести значение времени 13:13:13, то получим 00.00.0000 13:13:13. А если ввести, например, 11:11:11 то в результате получим что-то вроде этого – 11.11.2011 00:00:00 (введенное время сбросилось, «перейдя» в дату). И так, теперь собственно вопрос – можно ли бороться с данным «феноменом» (и если можно, то как)? Возможно существует и принципиально иные подходы к решению поставленной выше задачи. Если кто сталкивался, посоветуйте, пожалуйста. Но еще раз отмечу, что приложение разрабатывается для работы с тремя СУБД, и крайне желательно, чтобы сам SQL-запрос был унифицированным для всех трех СУБД.

Ну и на всякий случай приведу версию среды разработки: Sybase PowerBuilder Enterprise Version 9.0.1 Build 7048

Заранее благодарю.
20 янв 04, 12:28    [498647]     Ответить | Цитировать Сообщить модератору
 Re: Проблема работы с DATETIME...  [new]
gerss
Member

Откуда: Москва
Сообщений: 1002
Насколько я работал с полем TIMESTAMP оно является не совсем полем даты и времени, поэтому работать с ним как с датой и временем - затруднительно.

С DateTime с таким никогда не сталкивался.
20 янв 04, 13:29    [498774]     Ответить | Цитировать Сообщить модератору
 Re: Проблема работы с DATETIME...  [new]
Локшин Марк
Member

Откуда: Воронеж
Сообщений: 3154
И еще. "Перескакивает" оно у вас в DataWindow или в базе? Если в DataWindow, то это должно делаться каким-то скриптом в котором содержится какая-то ошибка. Сами по себе они никак не связаны, хоть и создавались из одного поля.
20 янв 04, 13:46    [498830]     Ответить | Цитировать Сообщить модератору
 Re: Проблема работы с DATETIME...  [new]
ASCRUS
Member

Откуда: МО Электросталь
Сообщений: 5994
gerss
В Sybase ASA DATETIME - домен, который на самом деле является TIMESTAMP, что вполне равноценно, так как TIMESTAMP хранит так же, как и DATETIME дату и время. Это автор и имел ввиду.

Antoxa
Можно попробовать так:
в запросе возвращать само поле DATETIME и 2 вычисляемых поля, полученных с DATETIME, выщемляя в первое поле дату и приводя к типу DATE (DATETIME для MSSQL), а во второе поле время, но приводя к типу VARCHAR(5). Тогда редактирование времени можно будет легко сделать через EditMask (##:##). Соотвествующе после изменения любого из этих вычисляемых полей можно легко собрать дату и время как DATETIME и занести значение в исходное поле, которое потом и будет писаться PB в таблицу. Для проверки введенного времени можно также написать свою функцию и нацепить ее на проверку колонки времени в DataWindow.
20 янв 04, 14:09    [498909]     Ответить | Цитировать Сообщить модератору
Все форумы / PowerBuilder Ответить