Acces bdd +Qsqlite

Koinkoin -  
loupius Messages postés 789 Statut Membre -
Bonjour,

J'essaye d'accéder a une base de donnée mysql ( WAMP ) Mais cela ne marche pas a l'exécution j'ai droit a un "no query Unable to fetch row". Merci d'avance :)

#include <QtCore/QCoreApplication> 
#include <QsqlDatabase> 
#include <QsqlError> 
#include <Qstring> 
#include <QSqlQuery> 
#include <QVariant> 
#include <iostream> 


int main(int argc, char *argv[]) 
{ 
 QCoreApplication a(argc, argv); 


 QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); 
 db.setHostName("localhost"); 
 db.setDatabaseName("test"); 
 db.setPort(3306); 
 bool ok = db.open("root",""); 

   QString cname = db.lastError().text(); 
   std::string off = cname.toStdString(); 
   std::cout<<off<<std::endl; 
  
 QSqlQuery query ("SELECT id FROM test1", db); 
 bool ok1 = query.exec(); 

   QString error1 = query.lastError().text(); 
   std::string aff1 = error1.toStdString(); 
   std::cout<<aff1<<std::endl; 

 while(query.next()) 
 { 
  QString chaine = query.value(0).toString(); 
  std::string ech = chaine.toStdString(); 
  std::cout<<ech<<std::endl; 
 } 

 return a.exec(); 
} 
A voir également:

1 réponse

loupius Messages postés 789 Statut Membre 148
 
Je n'ai pas la réponse à ton problème.
Le champ 'id' existe-t-il ? La table 'test1' existe-t-elle ?
Je voudrais faire 2 remarques:
- il s'agit de 'SQLite' et non de 'MySQL',
- avec Qt on peut oublier la STL.
On peut remplacer:
  QString chaine = query.value(0).toString(); 
  std::string ech = chaine.toStdString(); 
  std::cout<<ech<<std::endl;
par:
qDebug() << query.value(0).toString();
de même, on pourra écrire:
  qDebug() << db.lastError();
c'est plus simple et ceci permet aussi de supprimer toutes les sorties de qDebug par une déclaration QT_NO_DEBUG_OUTPUT dans le fichier projet.
Bonne continuation.
1