Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.12.25;
Скачать: CL | DM;

Вниз

проблема с датами и временем в 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.DataTypeValues

DataTypeValues: array[TDataType] of TOleEnum = (
   adEmpty, adVarChar, adSmallint, adInteger, adUnsignedSmallint,
   adBoolean, adDouble, adDouble, adCurrency, adDate, adDate,
   adDate,
adBinary,...
т.е. любой тип даты времени дельфи (ftDate, ftTime, ftDateTime) приравнивался к ADOтипу дата (adDate)
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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.008 c
2-1315490161
LAZudhic
2011-09-08 17:56
2011.12.25
зациклился на циклах(начинающий)


11-1236511074
Jon
2009-03-08 14:17
2011.12.25
CreateRestrictedToken


2-1316405617
i2e
2011-09-19 08:13
2011.12.25
Прозрачный фон при выводе текста


2-1316021139
pravd
2011-09-14 21:25
2011.12.25
работа с БД paradox


2-1316200336
Аня
2011-09-16 23:12
2011.12.25
Помогите пожалуйста!