Aller au menu - Aller au contenu

[Plan du site] Vous êtes ici --- > Le Site du Zéro > Les forums > Programmation > Langage C++ > [Qt(encore)]QSQLITE et Mysql? > Lecture du sujet

[Qt(encore)]QSQLITE et Mysql?

Vous devez être inscrit pour pouvoir poster des messages

RésoluLe problème de ce sujet a été résolu

Page : 1 
Auteur Message
1 visiteur sur ce sujet (1 anonyme)
Page : 1 
Hors ligne cube45 # Posté le 30/06/2008 à 09:42:35
Avatar
Groupe : Membres
Bonjour,
Je fais actuellement différents tests sur des bases de données.
En fait, j'ai un site internet de mon club d'échecs qui est hébergé chez moi.
Sur ce site, j'ai une base de donnée MySql des joueurs qui répertorie les classements Elo des joueurs.
Ce classement Elo est publié par la FFE sous forme de fichier .mdb contenant une table CLUBS et une table JOUEURS.

Actuellement, je fais les modifications en transférant la table qui m'intéresse grâce à OpenOffice.org, mais ce n'est pas ce qu'il y a de plus rapide ni de plus pratique.

Mon but serait à terme de pouvoir faire des modifications dans les deux bases et/ou pouvoir transférer le fichier .mdb sur le serveur MySql grâce à un programme.

J'ai essayé d'utiliser le plugin MySql mais impossible de l'installer, même avec la méthode décrite ici

J'ai essayé de me tourner vers SQLITE, mais est-ce compatible avec MySql et si oui, pourquoi ce code ne marche-t-il pas?

Code : C++
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <QtSql>
#include <QtGui>

int main(int argc, char* argv[])
{
   QApplication app(argc, argv);
   QMainWindow *fenetre = new QMainWindow();
   QWidget *centre = new QWidget();
   fenetre->setCentralWidget(centre);
   QGridLayout *layout = new QGridLayout(centre);
   QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
   db.setDatabaseName("DRIVER={Microsoft Access Driver (*.mdb)};FIL={MS Access};DBQ=Data.mdb");
   if (db.open())
   {
      QLabel *test = new QLabel("cc");
      layout->addWidget(test);
      QSqlQueryModel *model = new QSqlQueryModel;
      model->setQuery("SELECT NrFFE, Nom, Prenom, Sexe, NeLe, Cat, Elo, Rapide, Fide, FideCode, FideTitre, AffType FROM JOUEUR WHERE ClubRef = 496");
      QTableView *view = new QTableView();
      layout->addWidget(view);
      view->setModel(model);
      for(int i=0;i<QSqlDatabase::drivers().size();i++)
      {
         test->setText(test->text() + QSqlDatabase::drivers()[i] + " ");
      }
      QSqlDatabase dbOnline = QSqlDatabase::addDatabase("QSQLITE", "online");
      dbOnline.setHostName("192.168.0.2");
      dbOnline.setPort(3306);
      dbOnline.setUserName("root");
      dbOnline.setPassword("********");
      dbOnline.setDatabaseName("joueurs");
      if(dbOnline.open())
      {
         QSqlQueryModel *model2 = new QSqlQueryModel;
         model2->setQuery("SELECT * FROM joueurs", dbOnline);
         QTableView *view2 = new QTableView();
         layout->addWidget(view2);
         view2->setModel(model2);
      }
   }
   fenetre->show();
   return app.exec();
}

Ce code m'affiche:
Image utilisateur
Or, si j'enlève la ligne surlignée,
la partie du bas s'enlève ce qui laisse supposer que "if(dbOnline.open())" n'est plus vrai...

Je dois probablement faire une erreur pour la requête, mais où?

Merci d'avance :D
Édité le 30/06/2008 à 09:43:06 par cube45

Citation : Alexander Kotov
Un plan correct fait de nous des héros ; l'absence de plan fait de nous des zéros.

Citation : Linus Torvalds
Software is like sex; it's better when it's free.
Vraiment, je ne suis pas là pour détruire Microsoft. Ce sera juste un effet secondaire complètement involontaire.
 
Hors ligne cube45 # Posté le 01/07/2008 à 12:16:49
Avatar
Groupe : Membres
Aucune idée?
Est-ce possible d'utiliser SQLITE et si oui, comment?
J'ai remarqué que si je changeait le nom d'hôte, même en une adresse qui n'existe pas, le même problème se produisait...
Et puis le setDatabaseName me crée un fichier dans le dossier du programme...

Citation : Alexander Kotov
Un plan correct fait de nous des héros ; l'absence de plan fait de nous des zéros.

Citation : Linus Torvalds
Software is like sex; it's better when it's free.
Vraiment, je ne suis pas là pour détruire Microsoft. Ce sera juste un effet secondaire complètement involontaire.
 
Hors ligne cube45 # Posté le 02/07/2008 à 16:56:47
Avatar
Groupe : Membres
Up!
Personne n'utilise QSQLITE?

Citation : Alexander Kotov
Un plan correct fait de nous des héros ; l'absence de plan fait de nous des zéros.

Citation : Linus Torvalds
Software is like sex; it's better when it's free.
Vraiment, je ne suis pas là pour détruire Microsoft. Ce sera juste un effet secondaire complètement involontaire.
 
Hors ligne ipodishima # Posté le 03/07/2008 à 08:11:39
Groupe : Membres
Bonjour, je cherche aussi des infos sur SQLite... C'est pas si facile à trouver en fait...
Hors ligne cube45 # Posté le 03/07/2008 à 09:19:56
Avatar
Groupe : Membres
Merci, ça me rassure de savoir que je ne suis pas tout seul à chercher...
Il doit y avoir quelque chose de spécial à faire mais quoi et comment?
J'interromps mes recherches, car cet après-midi, j'ai quand même le bac de français à passer... :D

Citation : Alexander Kotov
Un plan correct fait de nous des héros ; l'absence de plan fait de nous des zéros.

Citation : Linus Torvalds
Software is like sex; it's better when it's free.
Vraiment, je ne suis pas là pour détruire Microsoft. Ce sera juste un effet secondaire complètement involontaire.
 
Hors ligne Spaz # Posté le 03/07/2008 à 11:37:32
Groupe : Membres
Je connais pas trop SQLite, mais, ça se base sur un fichier. Ca sort d'où l'IP et le port ?
Hors ligne cube45 # Posté le 03/07/2008 à 12:05:08
Avatar
Groupe : Membres
Ben en fait, c'est l'ip et le port de mon serveur mysql.
D'après toi, on ne peut pas utiliser SQLITE sur un serveur en réseau local?

Citation : Alexander Kotov
Un plan correct fait de nous des héros ; l'absence de plan fait de nous des zéros.

Citation : Linus Torvalds
Software is like sex; it's better when it's free.
Vraiment, je ne suis pas là pour détruire Microsoft. Ce sera juste un effet secondaire complètement involontaire.
 
Hors ligne Spaz # Posté le 03/07/2008 à 14:03:56
Groupe : Membres
Cette réponse a aidé l'auteur du sujet Cette réponse a aidé l'auteur du sujet
Citation : cube45
Ben en fait, c'est l'ip et le port de mon serveur mysql.
D'après toi, on ne peut pas utiliser SQLITE sur un serveur en réseau local?


Non, d'après moi, tu n'arriveras jamais a ouvrir une base MySQL avec SQLite.

Si tu n'arrives pas à installer le plugin MySQL pour Qt, tu devrais pourvoir passer par le pilote ODBC (de mysql), comme tu l'as fait pour Access.
Édité le 03/07/2008 à 14:08:46 par Spaz
Hors ligne cube45 # Posté le 03/07/2008 à 18:20:27
Avatar
Groupe : Membres
Bon, j'ai installé le pilote mysql pour ODBC et j'utilise le code suivant:
Code : C++
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include <QtSql>
#include <QtGui>

int main(int argc, char* argv[])
{
   QApplication app(argc, argv);
   QMainWindow *fenetre = new QMainWindow();
   QWidget *centre = new QWidget();
   fenetre->setCentralWidget(centre);
   QGridLayout *layout = new QGridLayout(centre);
   QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
   db.setDatabaseName("DRIVER={Microsoft Access Driver (*.mdb)};FIL={MS Access};DBQ=Data.mdb");
   if (db.open())
   {
      QLabel *test = new QLabel("cc");
      layout->addWidget(test);
      QSqlQueryModel *model = new QSqlQueryModel;
      model->setQuery("SELECT NrFFE, Nom, Prenom, Sexe, NeLe, Cat, Elo, Rapide, Fide, FideCode, FideTitre, AffType FROM JOUEUR WHERE ClubRef = 496");
      QTableView *view = new QTableView();
      layout->addWidget(view);
      view->setModel(model);
      QSqlDatabase dbOnline = QSqlDatabase::addDatabase("QODBC", "online");
      dbOnline.setHostName("192.168.0.2");
      dbOnline.setPort(3306);
      dbOnline.setDatabaseName("DRIVER={MySQL ODBC 3.51 Driver}");
      if(dbOnline.open("root", "********"))
      {
         QSqlQueryModel *model2 = new QSqlQueryModel;
         model2->setQuery("SELECT * FROM joueurs", dbOnline);
         QTableView *view2 = new QTableView();
         layout->addWidget(view2);
         view2->setModel(model2);
      }
      test->setText(dbOnline.lastError().databaseText());
   }
   fenetre->show();
   return app.exec();
}

Image utilisateur
Citation : Erreur
[MySQL][ODBC 3.51 Driver]Can't connect to MySQL server on 'localhost' (10061)

o_O
Mais moi, je lui ai pas demandé localhost :'(

Citation : Alexander Kotov
Un plan correct fait de nous des héros ; l'absence de plan fait de nous des zéros.

Citation : Linus Torvalds
Software is like sex; it's better when it's free.
Vraiment, je ne suis pas là pour détruire Microsoft. Ce sera juste un effet secondaire complètement involontaire.
 
Hors ligne Spaz # Posté le 03/07/2008 à 23:13:09
Groupe : Membres
Cette réponse a aidé l'auteur du sujet Cette réponse a aidé l'auteur du sujet
Mets toutes les infos lors du setDatabaseName

Code : C++
1
dbOnline.setDatabaseName("DRIVER={MySQL ODBC 3.51 Driver}");


=>

Code : C++
1
dbOnline.setDatabaseName("DRIVER={MySQL ODBC 3.51 Driver};SERVER=192.168.0.2;PORT=3306;UID=root;PASSWORD=*********;DATABASE=*db*");


D'ailleurs, j'ai rajouté Database, car ta base MySQL doit avoir un nom, ta requête (SELECT * FROM joueurs) ne spécifiant pas la base
Hors ligne cube45 # Posté le 04/07/2008 à 09:09:15
Avatar
Groupe : Membres
Whaaa, ça marche impecable!!! Merci à toi!
Mon problème est que je n'ai trouvé nulle part la liste des options à mettre (SERVER, PORT...), où les as-tu trouvés?
OK, ben voilà une bonne chose de faite, je vais pouvoir passer au niveau supérieur :D
Encore merci et @+

Citation : Alexander Kotov
Un plan correct fait de nous des héros ; l'absence de plan fait de nous des zéros.

Citation : Linus Torvalds
Software is like sex; it's better when it's free.
Vraiment, je ne suis pas là pour détruire Microsoft. Ce sera juste un effet secondaire complètement involontaire.
 
Hors ligne Spaz # Posté le 04/07/2008 à 09:21:05
Groupe : Membres
trouvé sur google.
En fait il faut chercher "DSN less" en plus de "ODBC Mysql" ;)
ce qui m'a fait tomber sur http://www.mysql.com/search/?q=dsn qui, résultat 4, renvoit, en suivant, vers la doc mysql qui donne la liste des paramètres :
http://dev.mysql.com/doc/refman/5.0/en [...] rameters.html

Au plaisir :)
Hors ligne cube45 # Posté le 04/07/2008 à 11:11:08
Avatar
Groupe : Membres
Merci!
Je n'avais rien trouvé sur google, mais je n'avais pas essayé DSN less ;)
Édité le 04/07/2008 à 11:12:47 par cube45

Citation : Alexander Kotov
Un plan correct fait de nous des héros ; l'absence de plan fait de nous des zéros.

Citation : Linus Torvalds
Software is like sex; it's better when it's free.
Vraiment, je ne suis pas là pour détruire Microsoft. Ce sera juste un effet secondaire complètement involontaire.
 

Retour au forum "Langage C++" ou à la liste des forums

Vous devez être inscrit pour pouvoir poster des messages

Changer de design | En savoir plus | Plan du site | Politique d'accessibilité | Règles | RSS tutoriels | RSS news
Édité par Simple IT SARL : Nous contacter | Notre blog | Revue de presse | Publicité

Y'a plus rien à lire, faut remonter maintenant !

Hébergement web - Correction de tutoriels - Créer un site
Vous souhaitez apparaître ici ? Contactez-nous.

Nombre de connectés 141 Zéros connectés | Requêtes SQL 7 requêtes | Temps de génération de la page : Total (SQL) 0.0389s (0.0237s)