PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Datenbank verbinden



Kirsche
25-05-2005, 11:31
Hallo Leute,

ich möchte mit meinem Programm auf eine MySQL-Datenbank zugreifen. Ich habe folgenden Code geschrieben:

bool MainWindow::createConnection()
{
QSqlDatabase* database = QSqlDatabase::addDatabase("QMYSQL3");
database->setHostName( "localhost" );
database->setDatabaseName( "test" );
database->setUserName( "root" );
//database->Password("");

if( !database->open() )
{
database->lastError().showMessage();
return false;
}
else
{
return true;
}
}

Ich bekomme folgende Fehlermeldung:
"driver not loaded driver not loaded"

Ich habe gelesen, dass bei der "NonCommercial"-Version für Windows fast keine Treiber dabei sind. Also habe ich bei Trolltech danach gesucht, aber ich verstehe nicht so ganz, wie ich an die Treiber herankomme und sie installiere. Ich glaube, ich sollte sie irgendwie als Plug-In einbinden, oder? Wie funktioniert das Ganze, wenn ich mein fertiges Programm auf einem anderen Computer laufen lasse? Steckt der Treiber dann mit in meinem Programm? Ich weiß, dass auf dem anderen Computer auf jeden Fall auch ein MySQL-Server liegt (ich weiß nur noch nicht, ob man da so einfach herankommt). Bei allen Computern handelt es sich im Windows-Rechner.

Vielen Dank, :confused:

anda_skoa
25-05-2005, 21:09
Ich habe gelesen, dass bei der "NonCommercial"-Version für Windows fast keine Treiber dabei sind.

Vermutlich ist der MySQL Treiber aus lizenztechnischen Gründen nicht bei der non-commercial dabei, weil der entweder GPL oder die kommerzielle MySQL Lizenz vorrausetzt.


Steckt der Treiber dann mit in meinem Programm?

Nein, ein Plugin ist, wie der Name schon sagt, etwas was zusätzlich ist.
Eine dynamisch zu Laufzeit geladenen und gelinkte Bibliothek.
Man würde so ein Plugin wie die Qt DLL mitliefern.

Ich befürchte wenn du mit der non-commercial arbeitest kannst du MySQL nur über deren API benutzen oder über einen darauf aufbauenden API Wrapper.
Dein Code ist dann logischerweise GPL kompatible zu lizenzieren oder du brauchst die kommerizielle Lizenz von MySQL.

Im Falle daß du als Lizenz für den Code GPL hast, solltest du noch eine Klausel einfügen, die das Linken gegen die GPL inkompatible Qt-non-comm erlaubt.

Ciao,
_

Kirsche
25-05-2005, 22:49
Hallo ando_skoa,

das habe ich jetzt nicht so genau verstanden. Was ist GPL?
Auf der Homepage von Trolltech gibt es eine Anleitung, wie man an den Treiber herankommt, aber das verstehe ich auch nicht so ganz.

Es gibt irgendwie zwei Möglichkeiten. Eine davon ist ein Plugin, darum habe ich gefragt, ob ich den Treiber als Plugin hinzufügen soll.

Building the drivers using configure

The Qt configure script automatically detects the available client libraries on your machine. Run "configure -help" to see what drivers can be built. You should get an output similar to this:

Possible values for <driver>: [ mysql oci odbc psql tds ]
Auto-Detected on this system: [ mysql psql ]

Note that on Windows, the configure script doesn't do any auto-detection.

Note that configure cannot detect the neccessary libraries and include files if they are not in the standard paths, so it may be necessary to specify these paths using the "-I" and "-L" switches. For example, if your MySQL include files are installed in /usr/local/mysql (or in C:\mysql\include configure: -I/usr/local/mysql (or -I C:\mysql\include Windows).

Note that on Windows the -I parameter doesn't allow spaces in filenames, so use the 8.3 name instead, i.e. use C:\progra~1\mysql instead of C:\program files\mysql.

Use the -qt-sql-<driver> parameter to build the database driver statically into your Qt library or -plugin-sql-<driver> to build the driver as a plugin. Look at the sections that follow for additional information about required libraries.


How to build the plugin on Windows

You need to get the MySQL installation files. Run SETUP.EXE and choose "Custom Install". Install the "Libs & Include Files" Module. Build the plugin as follows (here it is assumed that MySQL is installed in C:\MYSQL):

cd %QTDIR%\plugins\src\sqldrivers\mysql
qmake -o Makefile "INCLUDEPATH+=C:\MYSQL\INCLUDE" "LIBS+=C:\MYSQL\LIB\OPT\LIBMYSQL.LIB" mysql.pro
nmake

If you are not using a Microsoft compiler, replace nmake with make in the statement above.

Ich verstehe nicht genau, ob ich beides machen muss und ob es später auch auf einem anderen Rechner läuft oder ob ich da das gleiche Spielchen noch einmal machen muss.

Schöne Grüße, :confused:

anda_skoa
26-05-2005, 09:48
das habe ich jetzt nicht so genau verstanden. Was ist GPL?

Der freie und gratis API von MySQL ist GPL, Qt non-commercial nicht.
Damit kann zumindest die Qt non-com den MySQL Treiber nicht mitliefern



Ich verstehe nicht genau, ob ich beides machen muss und ob es später auch auf einem anderen Rechner läuft oder ob ich da das gleiche Spielchen noch einmal machen muss.


Auf dem Rechner, auf dem du das Plugin erstellst, brauchst du die Header und Client Lib von MySQL.
Auf den Zielrechnern brauchst du dann nur dein Plugin, die Header braucht man ja nur zum kompilieren und die Lib wird bei der MySQL Installation dabei sein.

Ciao,
_

Kirsche
26-05-2005, 15:49
Hallo anda_skoa,

ich kann den Treiber nicht compilieren. Ich gebe Folgendes in die Kommandozeile unter DOS ein: make -o Makefile "INCLUDEPATH+=C:\MYSQL\INCLUDE" "LIBS+=C:\MYSQL\LIB\OPT\LIBMYSQL.LIB" mysql.pro

Ich bekomme die Meldung: C:\MINGW\BIN\MAKE.EXE ***No rule to make target 'mysql.pro'. Stop.

Was bedeutet das?

Bisher habe ich Folgendes gemacht:
1. Ich habe den Compiler MINGW installiert und in die Autoexec.bat eingetragen (Compilieren klappt auch).
2. Ich habe xampp installiert (da ist mysql mit dabei).
3. Ich habe versucht, den Treiber, wie oben beschrieben, zu compilieren.

Hab ich dabei was Wichtiges vergessen?
Übrigens: Unter mysql gibt es keinen Ordner include. Ich weiß nur nicht, welchen ich stattdessen benutzen muss.

Vielen Dank, :confused: :confused:

Kirsche
26-05-2005, 16:33
Hallo anda_skoa,

ich habe mir gerade MySQL (mysql-4.1.12-win32) heruntergeladen. Da ist nun auch ein include-Ordner dabei.
Ich habe alles entpackt und den Ordner mysql genannt. Er liegt direkt auf der c-platte.
Dann bin ich in den qt-Unterordner und habe configure ausgeführt:
configure -I C:\mysql\include -L C:\mysql\lib

Dann kamen ganz viele Meldungen, dass Dateinamen und Befehle von irgendwelchen Beispieldateien nicht gefunden wurden. Am Ende kommt die Meldung: Qt ist now configured for building. Just run nmake. To reconfigure, run nmake clean and configure.

Dann ging es weiter mit:
cd %QTDIR%\plugins\src\sqldrivers\mysql <-- mysql gibt es allerdings nicht

qmake -o Makefile "INCLUDEPATH+=C:\MYSQL\INCLUDE" "LIBS+=C:\MYSQL\LIB\OPT\LIBMYSQL.LIB" mysql.pro
nmake

Dann kommen die Meldungen: error processing project file [der ganze lange Pfad] mysql.pro

Nun weiß ich wirklich nicht mehr weiter. :eek:

Vielen Dank,

anda_skoa
26-05-2005, 20:37
Wie gesagt geh ich davon aus, daß die Qt non-comm die MySQL Treiber aus lizenztechnischen Gründen nicht dabei hat.

Du könntest versuchen sie von Qt/Free zu benutzen, solange deine Lizenz dann keine Probleme bekommt.

Ciao,
_

Kirsche
26-05-2005, 22:23
Hallo anda_skoa,

ich bin inzwischen etwas weiter. Es kommen die Fehlermeldungen nicht mehr. Keine Ahnung, woran das lag. Wenn ich es richtig verstanden habe, soll configure die *.pro Dateien liefern. Macht es aber irgendwie nicht (aber immerhin keine Fehlermeldung mehr). Also habe ich einfach selber eine geschrieben. Die ist nur vielleicht nicht ganz vollständig, weil ich nur "mysql.h" angebe. Jedenfalls wird tatsächlich ein makefile erzeugt. Wenn ich dann aber "make" eintippe, kommt die Meldung:
Makefile:57: *** Missing separator. Stop.

Die Meldung bekomme ich auch bei anderen makefiles, die in den Beispielen von Qt enthalten sind. Hat vielleicht "make" irgendwie einen Schaden?

Vielen Dank,

anda_skoa
27-05-2005, 08:45
Vielleicht nmake?

Ciao,
_

Kirsche
27-05-2005, 12:03
Hallo anda_skoa,

ich habe es mit nmake von Visual C++ versucht. Immerhin wird das makefile akzeptiert, aber es kommen andere Fehlermeldungen, hauptsächlich unaufgelöste externe Links. Ich weiß nicht, ob mein pro-File überhaupt in Ordnung ist. Das habe ich schließlich selber geschrieben. configure macht nämlich irgendwie gar nichts.

Übrigens: Ich habe auf meinem Computer eine mysql.dll gefunden. Könnte die mir irgendwie weiterhelfen?

Ich muss jetzt erst einmal bis morgen warten. Dann stellt sich evt. heraus, dass ich entweder eine ganz andere Datenbank benutzen muss oder sogar so an die Daten herankomme. Das habe ich gerade eben erfahren. Falls ich doch MySql brauche, muss ich es dann einfach weiterversuchen.

Vielen Dank für deine Hilfe,

Kirsche
30-05-2005, 16:55
Hallo anda_skoa,

das Problem hat sich erst mal erledigt. Ich brauche doch keinen Zugriff auf die Datenbank.

Schöne Grüße,
Kirstin