Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2003.08.28;
Скачать: [xml.tar.bz2];

Вниз

is not a valid timestamp   Найти похожие ветки 

 
Петров Денис   (2003-08-06 17:00) [0]

Доброе время суток.
В таблице есть поле типа TIME, при попытке добавить запись таким образом:
...
var CurrentTime: TDateTime;
...

CurrentTime := Time;
IDTable.FieldByName("TIME_FIELD").AsDateTime := CurrentTime;
...
генерируется исколючение вида ""0.xxxx" is not a valid timestamp".
Причем с полем типа DATE все в порядке. Со строковым представлением времени - та же фигня.

Как решить эту проблему?


 
Anatoly Podgoretsky   (2003-08-06 17:12) [1]

Наверно у тебя поставлено ограничение на дату и дата 30.12.1899 не доспустимая, проверь проходит ли Now
У меня нет под рукой документации по ИБ, так что не могу точно посмотреть что за тип timestamp и также проверь диалект


 
Петров Денис   (2003-08-06 17:22) [2]

Диалект - 3. О каком ограничении на дату идет речь? Где оно поставлено? И опять же, эта ошибка - это не ошибка Interbase (клас исключения - EConvertError), я не использую в Interbase поле типа TIMESTAMP, подчеркиваю - тип поля TIME.


 
dtm   (2003-08-06 17:28) [3]

CurrentTime := Time;
Может, туда не только надо время запихивать, а дату со временем? А то у тебя дата - 0 получается, то есть 30,12,1899...


 
Соловьев   (2003-08-06 17:36) [4]

Now используй. у тебя же поле типа даты+время , а ты пытаешся туда только время запихнуть.


 
Петров Денис   (2003-08-06 17:39) [5]

Ну это ж надо было такое сказать: у тебя же поле типа даты+время. Еще раз: поле типа TIME! Оно хранит ТОЛЬКО время.

Дату со временем туда "запихивать" не надо, тем более, что эффекта все равно ноль - та же ошибка


 
Петров Денис   (2003-08-06 17:41) [6]

Тем более, что мне нужно в идеале записывать не текущее занчение времени, блин, а произвольное. Такое впечатление, что все поняли строку
CurrentTime := Time;
буквально. Ведь та же ошибка возникает, если записать любое другое значение времени.


 
Петров Денис   (2003-08-06 18:02) [7]

Ну и где же ответы местных гениев типа Anatoly Podgoretsky?


 
Соловьев   (2003-08-06 18:08) [8]

а так?
insert into table
set field = cast(:par as time)

в проге
...
ParamByName("par").AsDateTime := CurrentTime;
...


 
Петров Денис   (2003-08-06 18:32) [9]

в данном конкретном случаем мне удобно работать именно с таблицей, а не с запросом, поэтому такой вариант не подходит


 
Петров Денис   (2003-08-06 20:52) [10]

Лекарство найдено.
Сомневаюсь в его адекватности, но может, пригодится для тех, кто столкнется с подобной проблемой.

Ошибка возникает в момент вызова Post при проверке корректности хранимого значения для поля типа time. Значение к этому времени хранится уже не в формате TDateTime, а TTimeStamp. Проверка производится с помошью процедуры ValidateTimeStamp из модуля SysUtils. Вот "родной" текст процедуры:

if (TimeStamp.Time < 0) or (TimeStamp.Date <= 0) then
ConvertErrorFmt(@SInvalidTimeStamp, [TimeStamp.Date, TimeStamp.Time]);

Ессно, так как пытаемся передать значение, хранящее только время, поле записи TTimeStamp.Date, хранящее дату, равно нулю. Как видно из условия, это - прямая дорога к генерации исключения, что и происходит.

Однозначно не помогает записывать и дату, и время, в значение, присваиваемое полю типа time - "временная" часть отрубается еще в недрах IBX, где-то в IBCustomDataSet, там есть соответсующий case.

Проще всего было изменить и перекомпилить SysUtils:

if (TimeStamp.Time < 0) or (TimeStamp.Date < 0) then
ConvertErrorFmt(@SInvalidTimeStamp, [TimeStamp.Date, TimeStamp.Time]);

С этим исправлением все работает. Отстается только гадать, почему создателям IBX захотелось конвертировать значение из TDateTime в TTimeStamp, и чем создателям типа TTimeStamp не понравилась дата 1 января 1 года, которой соответствует значение 0 поля Date.

Повторюсь, лекарство не претендует на оптимальность, поэтому критика будет вполне понятна.

Вот только возникает вопрос по поводу необходимости существования такого форума, где ответ можно получить только на стандартный или очень простой вопрос. Господа, посмотрите на свои ответы... Одни другого лучше, особенно у Anatoly Podgoretsky, у которого в анкете даже есть значок мастера... По-моему, не знаешь - не лезь. Неужели есть смысл в том, чтобы кидать в форум никчемные идеи?

Заранее спасибо модератору за то, что не удалил сообщение. :)


 
Anatoly Podgoretsky   (2003-08-06 21:24) [11]

Ты очень плозо предоставляешь информации. где то в конце выяснилось, что ты вроде бы используешь IBCustomDataSet и так же и по остальным данным, которые нужны для анализа и ответа.
Начать надо с зеркала. После этого польностьб отпало желание дальше рассматривать эту проблему, хотя хотел по приходу домой взглянуть в документацию по ИБ.
Но ты не волнуйся мы все поянли, что CurrentTime := Time; это функция или константа или переменная совместимого типа.
Насчет значком не выдумывай.



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2003.08.28;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.005 c
7-92275
Kirill_S
2003-06-06 18:01
2003.08.28
как получить список программ свернутых в SysTray?


14-92249
Омлет
2003-08-09 00:30
2003.08.28
Palladin, с днём рождения!


7-92267
Doc
2003-06-15 13:38
2003.08.28
Пути ко все программам Run-time.


3-92067
syte_ser78
2003-07-30 22:44
2003.08.28
Запись в DBGrib


14-92177
panov
2003-08-08 23:00
2003.08.28
О форумах.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский