Форум: "Базы";
Текущий архив: 2011.12.25;
Скачать: [xml.tar.bz2];
Внизпроблема с датами и временем в ADOComand Найти похожие ветки
← →
Slym © (2010-03-20 00:23) [0]База Firebird, подключаюсь через ODBC, использую ADO
проблема с датами и временем (тип Date, Time) Restricted data type attribute violation при операции видаADOComand.Parameters[0].DataType:=ftDate;
ADOComand.Parameters[0].Value:=Now;
ADOComand.Execute;
если передавать строку то сработаетADOComand.Parameters[0].Value:=DateTimeToStr(Now);
но из-за разници форматов даты клиента и сервера (dd.MM.yyyy и MM.dd.yyyy) меняются день с месяцем
Как победить проблему?
← →
sniknik © (2010-03-20 00:39) [1]DataType:= ftDateTime
попробуй.
← →
Slym © (2010-03-20 00:47) [2]а параметру всеравно ftDate сбрасывает на ftDateTime
что
DataType:=ftDate
Value:=Now;
что
Value:=Now;
DataType:=ftDate
ЛОГ:UPDATE ADV SET ID= :ID,NAME= :NAME,CHANGE_DATE= :CHANGE_DATE,CHANGE_TIME= :CHANGE_TIME,IS_DELETED= :IS_DELETED WHERE (REPLIC_ID= :REPLIC_ID);
ID=2(ftInteger)
NAME=ТВ(ftString)
CHANGE_DATE=20.03.2010 4:16:34(ftDateTime)
CHANGE_TIME=20.03.2010 4:16:34(ftDateTime)
IS_DELETED=0(ftSmallint)
REPLIC_ID={13F36713-3584-407E-839B-FF2462AE93E6}(ftString)
← →
Slym © (2010-03-20 01:33) [3]поборол так прямым присвоением ADO в обход дельфевой обертки
ADOComand.Parameters[0].ParameterObject.Value:=Now;
ADOComand.Parameters[0].ParameterObject.Type_:=adDBDate;
← →
sniknik © (2010-03-20 07:49) [4]т.е. чтобы работало нужно было задавать с глюком?... шаман.
Now возвращает значение типа TDateTime со временем, явное приписывание типа (в общем то не нужное) задает тип дата, без времени. и это так и нужно? однако...
← →
Slym © (2010-03-20 09:27) [5]исследование показало что виновник находится в
ADODB.DataTypeValuesDataTypeValues: array[TDataType] of TOleEnum = (
т.е. любой тип даты времени дельфи (ftDate, ftTime, ftDateTime) приравнивался к ADOтипу дата (adDate)
adEmpty, adVarChar, adSmallint, adInteger, adUnsignedSmallint,
adBoolean, adDouble, adDouble, adCurrency, adDate, adDate,
adDate, adBinary,...ParameterObject.Type_ := DataTypeValues[Value];
ручное присваивание вроде ParameterObject.Type_:=adDBTimeStamp; решило проблему
← →
Anatoly Podgoretsky © (2010-03-20 09:35) [6]> Slym (20.03.2010 00:23:00) [0]
Интересно, а зачем ты время превращаешь в строку, что бы затем строку превратить во время.
Не надо так.
← →
sniknik © (2010-03-20 09:42) [7]> ручное присваивание вроде ParameterObject.Type_:=adDBTimeStamp; решило проблему
ну вот это совсем другое дело, и это практически то, что советовал в [1]
> т.е. любой тип даты времени дельфи (ftDate, ftTime, ftDateTime) приравнивался к ADOтипу дата (adDate)
почему тогда нет проблем у остальных? могу только предположить, что не все драйверы к этому чувствительны, а то может и специально сделано (исходно то делалось под MSSQL, а ему может пифигу/либо он только один тип признавал)
← →
Slym © (2010-03-20 11:11) [8]
> Интересно, а зачем ты время превращаешь в строку, что бы
> затем строку превратить во время.
> Не надо так.
это где?
вариант со строкой я не рассматривал всерьез, грабли с конвертациями/форматами мною приведены [0] и "идеологически" неверно...
вообще в итоге вся логика у меня в строках (т.к. прога экспорт/импорт в xml)
> почему тогда нет проблем у остальных?
может большинство не пользует ODBCFireBirdDriver, а пользуют нативный FIB+ или IBProvider... сменить способ доступа к ДБ мне нельзя только ADO-ODBC-Firebird
← →
Anatoly Podgoretsky © (2010-03-20 14:06) [9]
> это где?
Тренируем памятьADOComand.Parameters[0].Value:=DateTimeToStr(Now);
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2011.12.25;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.004 c