Главная страница
    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.006 c
1-92109
Song
2003-08-15 11:48
2003.08.28
TVS_CHECKBOXES. Как определить что ветвь с галочкой?


3-92054
Алексей Петухов
2003-08-04 08:18
2003.08.28
Проблемы со вставкой записей в таблицу DBase


3-92039
Антон Ю.
2003-08-01 14:38
2003.08.28
Fetch All для запросов в FastReport автономных отчетах


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


14-92183
VEG
2003-08-03 20:42
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский