QSqlQuery UPDATE / INSERT DateTime со временем сервера (например, CURRENT_TIMESTAMP) - PullRequest
0 голосов
/ 06 мая 2010

Я использую QSqlQuery для вставки данных в базу данных MySQL. В настоящее время все, что меня волнует, - это заставить работать с MySQL, но в идеале я бы хотел сохранить это как можно более независимым от платформы.

В контексте MySQL я хочу получить код, который эффективно выполняет что-то вроде следующего запроса:

UPDATE table SET time_field=CURRENT_TIMESTAMP() WHERE id='5'

Следующий код - это то, что я пытался, но он не работает:

QSqlQuery query;
query.prepare("INSERT INTO table SET time_field=? WHERE id=?");
query.addBindValue("CURRENT_TIMESTAMP()");
query.addBindValue(5);
query.exec();

Я получаю ошибку: Incorrect datetime value: 'CURRENT_TIMESTAMP()' for column 'time_field' at row 1 QMYSQL3: Unable to execute statement. Я не удивлен, поскольку я предполагаю, что Qt выполняет некоторую проверку типов, когда связывает значения.

Я также изучил документацию по Qt, но не могу найти ничего в API, специально предназначенном для поддержки функции MySQL CURRENT_TIMESTAMP () или любой другой СУБД.

Есть предложения?

Ответы [ 2 ]

2 голосов
/ 06 мая 2010

У меня нет сервера SQL для тестирования, но addBindValue () связывает типы данных Qt. Вы должны поместить функцию отметки времени непосредственно в запрос

QSqlQuery query;
query.prepare("INSERT INTO table SET time_field=CURRENT_TIMESTAMP() WHERE id=?");
query.addBindValue(5);
query.exec();

должен сделать трюк.

1 голос
/ 06 мая 2010

Я не вижу способа получить команду времени базы данных.Я думаю, что это будет в QSqlDriver , поскольку это специфично для базы данных.

Единственный способ, которым я могу думать:

QString timeCommand("CURRENT_TIMESTAMP()");
query.prepare(QString("INSERT INTO table SET time_field=%1 WHERE id=?").arg(timeCommand));

Редактировать: На самом деле, яя не уверен, что CURRENT_TIMESTAMP () зависит от БД ...

...