Russian Qt Forum

Qt => Базы данных => Тема начата: RVZ от Декабрь 01, 2010, 15:57



Название: Бяда с датой
Отправлено: RVZ от Декабрь 01, 2010, 15:57
В общем тихий ужос!
стандартная модель QSqlRelationalTableModel со стандарным делегатом и стандартным мапером
в базе данных поля типа DateTime а на форме dateedit

QDataWidgetMapper *mapper = new QDataWidgetMapper();
mapper->setItemDelegate(new QSqlRelationalDelegate());

при попытки поменять дату выдает такое сообщение
QODBCResult::exec: Unable to execute statement: "[Microsoft][SQL Server Native Client 10.0]Datetime field overflow. Fractional second precision exceeds the scale specified in the parameter binding."
движок MS SQL 2005
Причем в первый раз при изменение дифолтного значения на пользовательское все проходит а вот в последующие ругается или вообще при изменении одной записи меняется а при изменении другой ругонь
Кто нибудь с подобным сталкивался???????
Подскажите как вылечить
Зарание всем спасибо.


Название: Re: Бяда с датой
Отправлено: crossly от Декабрь 02, 2010, 00:16
http://bugreports.qt.nokia.com/browse/QTBUG-2192?actionOrder=desc (http://bugreports.qt.nokia.com/browse/QTBUG-2192?actionOrder=desc)


Название: Re: Бяда с датой
Отправлено: RVZ от Декабрь 02, 2010, 11:06
Спасибо за ссылку
но что то я так и не понял как решить проблему.


Название: Re: Бяда с датой
Отправлено: crossly от Декабрь 02, 2010, 14:34
берете исходники ODBC драйвера ... делаете вот это
Код:
So this issue might be fixed by simply changing in function QODBCResult::exec() the seventh Parameter from 0 to 6 (or 3):

case QVariant::DateTime: {

r = SQLBindParameter(d->hStmt,
i + 1,
qParamType[(QFlag)(bindValueType(i)) & QSql::InOut],
SQL_C_TIMESTAMP,
SQL_TIMESTAMP,
19,
6,
(void *) dt,
0,
*ind == SQL_NULL_DATA ? ind : NULL);
и пересобираете драйвер