2010-05-06 1 views
0

Я использую QSqlQuery для вставки данных в базу данных MySQL. В настоящее время все, о чем я забочусь, это заставить работать работать с MySQL, но в идеале я хотел бы сохранить это как независимое от платформы.QSqlQuery UPDATE/INSERT DateTime со временем сервера (например CURRENT_TIMESTAMP)

То, что я после этого, в контексте 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, специально разработанном для поддержки функции CURRENT_TIMESTAMP() MySQL или любой другой СУБД.

Любые предложения?

ответ

2

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

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

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

1

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

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

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

Edit: На самом деле, я не уверен, CURRENT_TIMESTAMP() является DB конкретные ...