Seite 1 von 1
MYSQL Verbindung aufbauen
Verfasst: 31. Januar 2009 21:57
von anno1988
Hallo,
ich ahbe ein Problem mit einem Aufbau der Verbindung zu einem MYSQL-Server unter Windows XP. Ich habe mir Xampp drauf gemacht und wollte dann mit folgendem code darauf zugreifen:
Code: Alles auswählen
void MainWindow::MySqlConnect() {
QSqlDatabase db;
QMessageBox msg;
db.setConnectOptions("CLIENT_IGNORE_SPACE=1");
db.setHostName("localhost");
db.setPassword("");
db.setUserName("root");
db.setPort(3306);
db.open();
if (db.isOpen() == false) {
msg.setText("keine Verbindung aufgebaut");
msg.setWindowTitle("Warnung");
msg.exec();
}
else {
msg.setText("Alles OK!");
msg.setWindowTitle("Info");
msg.exec();
}
Ich bekomme aber immer die meldung zurück, verbidung konnte nicht aufgebaut werden, also die isOpen Methode ist immer false.
Verfasst: 31. Januar 2009 22:05
von upsala
Und was sagt db.lastError().text() ?
Verfasst: 31. Januar 2009 22:12
von anno1988
ok, ich erhalte "Driver not loaded" zurück
ich habe mir jetzt noch einen MYSQL ODBC Treiber installiert und noch den Code
Code: Alles auswählen
db.setConnectOptions("SQL_ATTR_ACCESS_MODE=SQL_MODE_READ_ONLY;SQL_ATTR_TRACE=SQL_OPT_TRACE_ON");
eingefügt.
Zuvor habe ich mit dem ODBC Treiber die Verbindung getestet, da funktioniert es, allerdings auch nur da, in meinem qt programm nicht. Da kommt die gleiche Meldung "Driver not found".
Verfasst: 1. Februar 2009 09:29
von solarix
Und den Treiber hast du mittels "addDatabase(..)" hinzugefügt, wie unter
http://doc.trolltech.com/4.4/qsqldatabase.html#details
beschrieben..
Und (falls du nicht ODBC sondern direkt das MySQL-Plugin verwenden möchtest) auch den MySQL-Treiber kompiliert/installiert?
http://doc.trolltech.com/4.4/sql-driver ... on-windows
Verfasst: 1. Februar 2009 11:47
von anno1988
ich habe mich jetzt erstmal für den odbc treiber entschieden, das mit dem kompilierenr kapiere ich nicht so richtig.
Die Meldung drivernot found kommt allerdings immer noch.
Hier ist mal mein code von der mainwindow.cpp:
Code: Alles auswählen
#include <QSqlDatabase>
#include <QMessageBox>
#include <QtGui/QPushButton>
#include <QSqlError>
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent), ui(new Ui::MainWindowClass)
{
ui->setupUi(this);
connect(ui->btn_MYSyqlConnect, SIGNAL(clicked()), this, SLOT(MySqlConnect()));
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::MySqlConnect() {
QSqlDatabase db;
QMessageBox msg;
db.setConnectOptions("SQL_ATTR_ACCESS_MODE=SQL_MODE_READ_ONLY;SQL_ATTR_TRACE=SQL_OPT_TRACE_ON");
db.addDatabase("QODBC");
db.setDatabaseName("test");
db.setUserName("anno");
db.setPassword("123");
db.setPort(3306);
db.open();
if (db.isOpen() == false) {
msg.setText(db.lastError().text());
msg.setWindowTitle("Warnung");
msg.exec();
}
else {
msg.setText("Alles OK!");
msg.setWindowTitle("Info");
msg.exec();
}
}
und noch von der header datei:
Code: Alles auswählen
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QtGui/QMainWindow>
namespace Ui
{
class MainWindowClass;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = 0);
~MainWindow();
public slots:
void MySqlConnect();
private:
Ui::MainWindowClass *ui;
};
#endif // MAINWINDOW_H
Verfasst: 1. Februar 2009 11:55
von franzf
Du bist dir sicher, dass du db nicht als Member nehmen willst? (geht ja auch mittels QSqlDatabase::database() zu bekommen)
Aber trotzdem ist und bleibt addDatabase eine statische Methode die ein fertiges QSqlDatabase-Objekt zurückliefert. ein db.addDatabase("QODBC") macht gar nix, zumindest nicht für dein db, mit dem du ja weiter arbeiten willst.
Korrekter wäre:
aber addDatabase nur einmal machen, zum holen nimmst du dann QSqlDatabase::database() [static].
Grüße
Franz
Verfasst: 1. Februar 2009 12:26
von anno1988
ok die verbindung hat sowit funktioniert. danke für die hilfe.
bei gelegenheit sollte ich mir dann schon noch anschauen, wie ich den mysql treiber direkt compilieren kann, den komfortabler ist das schon diesen gleich mitzuliefern.
Verfasst: 1. Februar 2009 13:12
von anno1988
wie sieht es jeztt aber aus, wenn ich mich von 2 verschiedenen pc's aus mit dem lgeichen benutzernamen an der mysql datenbank anmelden will?
kann man das machen, wenn ich immer nur daten aus der datenbank mit diesem benutzer selektieren möchte?
Verfasst: 1. Februar 2009 16:05
von franzf
anno1988 hat geschrieben:wie sieht es jeztt aber aus, wenn ich mich von 2 verschiedenen pc's aus mit dem lgeichen benutzernamen an der mysql datenbank anmelden will?
kann man das machen, wenn ich immer nur daten aus der datenbank mit diesem benutzer selektieren möchte?
Das hat nix mit Qt zu tun. Da musst du nen MySQL-Junky fragen.
Aber eigentlich sollte das gehen.Wenn du eine dynamische Webseite hast, verlangst du ja auch nicht von jedem (zufälligen) Betrachter, dass er sich registrierst, damit du ihm DB-Benutzer anlegen kannst.
Wäre im übrigen auch eine ziemliche Gefahr...
Genau so wird es hier im Forum sein. Für das Eintragen der Posts wird immer der selbe Datenbank-Benutzer verwendet.
Im übrigen kannst du das doch ganz einfach testen

Rufe zwei Intstanzen deines Programms auf. Dann hast du auch zwei Verbindungen mit der DB, mit dem selben User.
Verfasst: 1. Februar 2009 18:32
von upsala
Da musst du nen MySQL-Junky fragen.
Dazu tuts auch die MySQL-Doku, die man sich auch mal ansehen sollte, wenn man schon mit diesem Datenbank-System arbeiten will.
Verfasst: 1. Februar 2009 19:12
von anno1988
franzf hat geschrieben:
Im übrigen kannst du das doch ganz einfach testen

Rufe zwei Intstanzen deines Programms auf. Dann hast du auch zwei Verbindungen mit der DB, mit dem selben User.
Richtig, das habe ich auch gemacht. Ich wollte so für das verständnis einfach mal wissen, was ihr so darüber denkt.
Verfasst: 1. Februar 2009 19:35
von anno1988
wenn ich so ein mysql plugin complilieren will, muss ich das dann machen, wenn ich mein projekt kompiliere?
Verfasst: 1. Februar 2009 19:47
von Christian81
Wer lesen kann ist klar im Vorteil - siehe Post 4 von Solarix.
Verfasst: 1. Februar 2009 19:49
von anno1988
na also ich habe mir die mysql source mal heruntergeladen, alles eignestellt und kompiliert, es wurden zwar 2 ordner erstellt und noch ein paar ander sdachen im ordner "%QtDir%\src\plugins\sqldrivers\mysql" allerdings in dem debug und release ordner ist nix drin. das wundert mich etwas, denn eine fehlermeldung wurde auch nicht ausgegeben.
Code: Alles auswählen
C:\Qt\QtCreator\qt\src\plugins\sqldrivers\mysql>C:/Qt/QtCreator/qt/bin/qmake.exe
"INCLUDEPATH+=C:\MySQL\mysql5130\include" "LIBS+=C:\MYSQL\MySQL5130\lib\opt\lib
mysql.lib" mysql.pro
diesen befhelt hatte ich ausgeführt und auch geschaut, dass alles in den ordnern vorhanden ist.
im anhang noch das,was kompiliert wurde.