2010-05-06 7 views
0

J'utilise QSqlQuery pour insérer des données dans une base de données MySQL. Actuellement, tout ce qui m'importe c'est que cela fonctionne avec MySQL, mais idéalement, je voudrais garder cela aussi indépendant que possible de la plate-forme.QSqlQuery UPDATE/INSERT DateTime avec l'heure du serveur (par exemple CURRENT_TIMESTAMP)

Ce que je suis après, dans le contexte de MySQL, est de finir avec le code qui exécute efficacement quelque chose comme la requête suivante:

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

Le code suivant est ce que j'ai essayé, mais il échoue : L'erreur que j'obtiens est: Incorrect datetime value: 'CURRENT_TIMESTAMP()' for column 'time_field' at row 1 QMYSQL3: Unable to execute statement. Je ne suis pas surpris car je suppose que Qt fait un contrôle de type quand il lie des valeurs.

J'ai parcouru la documentation Qt aussi bien que je sais, mais je ne trouve rien dans l'API spécialement conçu pour supporter la fonction CURRENT_TIMESTAMP() de MySQL, ou celle de tout autre SGBD.

Des suggestions?

Répondre

2

J'ai pas de serveur SQL pour tester ici , mais addBindValue() lie les types de données de Qt. Vous devriez mettre la fonction timestamp directement dans la requête

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

devrait faire l'affaire.

1

Je ne vois pas un moyen d'obtenir la commande de temps de base de données. Je pense que ce serait dans QSqlDriver car il est spécifique à la base de données.

La seule façon que je peux penser à:

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

Edit: En fait, je ne suis pas sûr CURRENT_TIMESTAMP() est spécifique DB ...