Bonjour,

Je teste QxOrm 1.2.6 depuis 2 jours pour vérifier qu'il convient bien à mes besoins.
Je suis parti de l'exemple qxBlog.
Je voudrais accéder à plusieurs bases: Par exemple, un singleton sur QSQLITE et une base perso sur QMYQSL.

Dans mon main, j'écris:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
qx::QxSqlDatabase::getSingleton()->setDriverName("QSQLITE");
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
QSqlError daoError = qx::dao::create_table<author>(&db);
Error de syntax mysql:
[QxOrm] execute sql query failed : CREATE TABLE author (author_id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, name TEXT, birthdate DATE, sex INTEGER)
Conclusion:
L'erreur de syntaxe est normale, car la syntaxe MySql est AUTO_INCREMENT.
C'est bien spécifié dans QString QxSqlGenerator_MySQL::getAutoIncrement() const { return "AUTO_INCREMENT"; }.
La génération de la requête "create table" s'est fait avec le SqlGenerator du singleton.
Si je vire, la ligne sur le singleton, c'est pareil car le générateur par défaut écrit AUTOINCREMENT.
Si je remplace QSQLITE par QMYSQL, ça passe, car le SqlGenerator est maintenant sur le bon driver.
Pouvez-vous vérifier le problème?

Lieu possible du conflit:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
QString IxDataMember::getSqlTypeAndParams(int iIndexName /* = -1 */) const
{
...

   if (m_bAutoIncrement)
   {
      qx::dao::detail::IxSqlGenerator * pSqlGenerator = QxSqlDatabase::getSingleton()->getSqlGenerator();
      if (! pSqlGenerator) { qAssert(false); sResult += " AUTOINCREMENT"; }
      else { sResult += " " + pSqlGenerator->getAutoIncrement(); }
   }

   return sResult;
}