Russian Qt Forum

Qt => Базы данных => Тема начата: Андрей80 от Март 22, 2009, 15:28



Название: Проблема с вставкой из клиента в поле datetime таблицы MS SQL server
Отправлено: Андрей80 от Март 22, 2009, 15:28
Здравствуйте.
Столкнулся с такой проблемой:
Есть БД MS SQL SERVER 2000 , в ней таблица с полем типа datetime.
Выдержка из кода:
Код:
QSqlQuery locquery;
QString sql = "INSERT INTO party_delivered VALUES(\'"  + currentDate() + "\', 1, 0)";
if (!locquery.exec(sql))
{
QString error = locquery.lastError().text();
lib.qMessageBox("Error!", lib.rus("Ошибка добавления партии в таблицу") + "\n" + error + "\nSQL = " +          sql,"error");
}

после компиляции получаю ошибку
---------------------------
Error!
---------------------------
Ошибка добавления партии в таблицу
  [Microsoft][ODBC SQL Server Driver][SQL Server]The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value. [Microsoft][ODBC SQL Server Driver][SQL Server]The statement has been terminated. QODBC3: Unable to execute statement
SQL = INSERT INTO party_delivered VALUES('2009.03.21', 1, 0)
---------------------------
OK   
---------------------------

причём если вставить запрос INSERT INTO party_delivered VALUES('2009.03.21', 1, 0)
в MS SQL Query analizer и выполнить то работает на ура.

также при использовании вместо СУБД MS SQL SERVER 200 MySQL или SQLite клиент работает.
Понимаю что вопрос не по QT а по MS, но всё же может кто то в курсе...
 
Код
C++ (Qt)
 


Название: Re: Проблема с вставкой из клиента в поле datetime таблицы MS SQL server
Отправлено: break от Март 23, 2009, 02:21
вероятно то что функция currentDate() возвращает - БД не хочет понимать как Дата/Время...

может так попробовать:

Код:
QSqlQuery locquery;
QString sql = "INSERT INTO party_delivered VALUES(?, 1, 0)";
locquery.prepare( sql );
locquery.bindValue( 0, QDateTime::currentDateTime() ); // здесь вроде Qt драйвер Базы Данных должен сам правильно сконвертить
if (!locquery.exec(sql))
....