Aller au menu - Aller au contenu

[Plan du site] Vous êtes ici --- > Le Site du Zéro > Les forums > Programmation > Langage C++ > [Qt] Base de données > Lecture du sujet

[Qt] Base de données

Se connecter à une BDD

Vous devez être inscrit pour pouvoir poster des messages

Page : 1 
Auteur Message
1 visiteur sur ce sujet (1 anonyme)
Page : 1 
Hors ligne Maître_Noïr # Posté le 27/06/2008 à 09:43:52
Groupe : Membres
Bonjour tout le monde, c'est encore moi ! J'ai encore un problème mais cette fois-ci pour me connecter à une BDD avec Qt...

J'ai bien modifié le fichier .pro en ajoutant la ligne Code : C++
1
QT += sql
et mon programme compile maintenant correctement.

Cependant, lors de l'exécution du programme, et plus particulièrement lorsque ce code est exécuté :
Code : C++
1
2
3
4
5
6
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("ADRESSE");
db.setDatabaseName("BDD");
db.setUserName("NOM");
db.setPassword("PASS");
bool ok = db.open();

le programme plante et me demande si je veux envoyer les infos de débogage patati patata (le truc de windows quoi...)

Sauriez-vous d'où ce problème peut venir, ce que je devrais faire ou ne pas faire pour que ça marche ?
Merci.
Édité le 06/07/2008 à 20:54:00 par Maître_Noïr
Hors ligne altic # Posté le 27/06/2008 à 09:45:38
Avatar
Groupe : Membres
Hors ligne Maître_Noïr # Posté le 28/06/2008 à 20:31:23
Groupe : Membres
Non elle y est il n'y a pas d'erreur quand je lance le programme, seulement quand ces lignes sont exécutées...
Hors ligne Orionis # Posté le 28/06/2008 à 21:32:52
ooprog
Avatar
Groupe : Membres
J'ai une erreur similaire, le plugin MySQL est compilé et lors de l'exécution du programme (le code est celui de la doc de Qt), l'erreur est :

Code : Autre
1
Unknown MySQL Server 'HOTE'


Ne peut-on donc pas créer de base de données en local avec MySQL ?

Mes projets :
  • Programme de révisions (v0.2.0.0) : |||||||||||||||||||| 60%


ooprog
 
Hors ligne Maître_Noïr # Posté le 06/07/2008 à 20:52:46
Groupe : Membres
Bon j'ai recompilé Qt avec le plugin MySQL et il ne me met plus d'erreur ni rien. Ma BDD est sur un serveur, et lorsque le script est effectivement exécuté, rien ne se passe (mon pare-feu ne me demande pas si je veux autoriser la connexion), j'en déduis donc qu'il n'y a pas de connexion, mais pourquoi?

Merci de vos réponses !
Édité le 06/07/2008 à 20:54:49 par Maître_Noïr
Hors ligne Tetris # Posté le 07/07/2008 à 00:26:52
Avatar
Groupe : Membres
@ Maître_Noïr

J'immagine que tu sais déjà ce qui suit, mais juste au cas ou (et peut être que ca pourra aider quelqu'un d'autre) ...

Tu as testé le booléen que renvoit la méthode QSqlDatabase::open()? Si il est a false il n'y a effectivement pas de connection, et tu peux avoir plus d'info avec la méthode QSqlDatabase::lastError(). Cette dernière renvoit un QSqlError, tu peux en avoir un QString avec la méthode QSqlError::text().

@ tout le monde

Je suis un vrai zéro qui n'y connais rien ;) Je cherche a faire tourner une base de donnée en interne (sans serveur, distant ou local, du moins dans les apparences) avec Qt. C'est possible?

J'ai bien trouvé des infos dans la doc de Qt, mais je ne comprend pas tout. En gros il faudrait utiliser une version surchargée de QSqlDatabase::addDatabase(...) qui prend en argument un driver. J'ai pas encore réussi a la faire marcher correctement, et je ne suis même pas sûr que ca soit ce qu'il me faut :euh: Quelqu'un pourrait me donner un p'tit coup de pouce? :D

EDIT:
1) J'ai recompilé Qt selon ce tuto pour y inclure le plugin MySQL ... Ca ne marchait toujours pas.
2) J'ai noté que l'installation de MySQL n'avait pas rajouté <mysql>/bin dans le path ... Ca ne marchait toujours pas.
3) J'ai fouillé les forums et a la troisième page du topic du tuto en lien plus haut j'ai trouvé ca:
Citation : IrmatDen
Après avoir lu la doc du cache, je suis allé faire un tour dans la BdR (regedit.exe pour y aller, je sais pas si tu connais déjà ou pas) et ai effacé toutes les entrées qmysql* dans:
> HKEY_CURRENT_USER\Software\Trolltech\OrganizationDefaults\Qt Plugin Cache 4.3.debug\<le chemin vers le répertoire Qt sur ton pc>\plugins\sqldrivers
> HKEY_CURRENT_USER\Software\Trolltech\OrganizationDefaults\Qt Plugin Cache 4.3.false\<le chemin vers le répertoire Qt sur ton pc>\plugins\sqldrivers

Une fois ceci fait, relance ton appli, et hop, ça devrait être tout bon.

Pour info, une entrée invalide du cache debug est du type:
0 0 unknown 2008-01-18T21:51:52

et une valide:
40301 1 Windows os-msvc debug full-config 2008-01-18T21:51:52

Ca ne marche toujours pas, mais ce n'est plus le même message :lol: Cette fois ci je pense que ca marchera pour toi Maître_Noïr.
4) Et je cherche toujours a savoir si il est possible de faire fonctionner une base de donnée en "boite noire" ... C'est a dire sans trace exterieure de l'utilisation d'une BDD (si ce n'est un fichier pour stocker les données).

EDIT 2:
Je cherche toujours ;) Quelque chose qui m'intrigue depuis quelques temps maintenant et ce passage dans la doc de Qt:
Citation : Doc de Qt
QSqlDatabase QSqlDatabase::addDatabase ( QSqlDriver * driver, const QString & connectionName = QLatin1String( defaultConnection ) ) [static]

This is an overloaded member function, provided for convenience.

This function is useful if you need to set up the database connection and instantiate the driver yourself. If you do this, it is recommended that you include the driver code in your own application. For example, setting up a custom PostgreSQL connection and instantiating the QPSQL driver can be done like this:
#include "qtdir/src/sql/drivers/psql/qsql_psql.cpp"

[...]

Remember that you must link your application against the database client library as well. The simplest way to do this is to add lines like the ones below to your .pro file:

unix:LIBS += -lpq
win32:LIBS += libpqdll.lib

You will need to have the client library in your linker's search path.

Suis la liste des drivers, dont mysql/qsql_mysql.cpp
Mais quand je tente de compiler avec juste l'include (adaptée) et la ligne dans le .pro en plus ca plante joliement.

...

Par contre j'ai été voir les exemples de QT pour sql. Ils marchent, et comme je voudrais (je crois). J'ai été voir le code et je vois pas ce que je peut faire de travers, que ce soit pour le .pro, les includes ou le code ... Le message que j'ai c'est "Access Denied [bla bla]". Je vois pas pourquoi moi j'ai pas droit et l'exemple de QT lui si :o

moi:
Code : C++
1
2
3
4
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
//J'ai testé avec QSQLITE, même résultat
 db.setDatabaseName(":items:");
 if (!db.open()) {...}


lui:
Code : C++
1
2
3
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName(":memory:");
if (!db.open()) {...}


Bon ca devient le bordel, même dans ce post ;) Je lache l'affaire pour quelques heures. Si vous avez une idée lumineuse ...
Édité le 07/07/2008 à 06:37:30 par Tetris

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 215 Zéros connectés | Requêtes SQL 7 requêtes | Temps de génération de la page : Total (SQL) 0.0372s (0.0182s)