MYSQL Verbindung aufbauen

Alles rund um die Programmierung mit Qt
Antworten
anno1988
Beiträge: 280
Registriert: 23. Januar 2009 20:49

MYSQL Verbindung aufbauen

Beitrag 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.
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Und was sagt db.lastError().text() ?
anno1988
Beiträge: 280
Registriert: 23. Januar 2009 20:49

Beitrag 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".
solarix
Beiträge: 1133
Registriert: 7. Juni 2007 19:25

Beitrag 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
anno1988
Beiträge: 280
Registriert: 23. Januar 2009 20:49

Beitrag 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

franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag 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:

Code: Alles auswählen

QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
aber addDatabase nur einmal machen, zum holen nimmst du dann QSqlDatabase::database() [static].

Grüße
Franz
anno1988
Beiträge: 280
Registriert: 23. Januar 2009 20:49

Beitrag 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.
anno1988
Beiträge: 280
Registriert: 23. Januar 2009 20:49

Beitrag 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?
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag 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 :D
Rufe zwei Intstanzen deines Programms auf. Dann hast du auch zwei Verbindungen mit der DB, mit dem selben User.
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag 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.
anno1988
Beiträge: 280
Registriert: 23. Januar 2009 20:49

Beitrag von anno1988 »

franzf hat geschrieben: Im übrigen kannst du das doch ganz einfach testen :D
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.
anno1988
Beiträge: 280
Registriert: 23. Januar 2009 20:49

Beitrag von anno1988 »

wenn ich so ein mysql plugin complilieren will, muss ich das dann machen, wenn ich mein projekt kompiliere?
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Wer lesen kann ist klar im Vorteil - siehe Post 4 von Solarix.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
anno1988
Beiträge: 280
Registriert: 23. Januar 2009 20:49

Beitrag 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.
Dateianhänge
mysql.zip
(8.25 KiB) 105-mal heruntergeladen
Antworten