Qt-Windows Evaluation (MySQL, g++)

Verschiedenes zu Qt
Antworten
kowi1134
Beiträge: 120
Registriert: 1. Mai 2005 17:48
Wohnort: Arnsberg

Qt-Windows Evaluation (MySQL, g++)

Beitrag von kowi1134 »

Hallo!

Ich habe die folgende Email an info@trolltech.com geschickt und möchte sie hier nun noch einmal vorzeigen, falls jemand eine Idee für meine Probleme hat.
Hello!

My name is Konrad and I am evaluating the QSA package for Windows.
I'd like to know two Qt specific things (I'm only using Qt, not QSA. Both are installed!):

1. I am confused. During the installation process a menu showed up. It showed some modules that are available in the evaluation version. Some points (checkboxes) of this menu were greyed out and unselectable. I remember that MySQL was one of those points. As I want to use a MySQL database as backend for some projects I am planning, I wanted to know if there is a Qt-API for MySQL or if I must use the C-API. The reason I asked this question is, I found this piece of text in C:\Qt_QSA\Qt3.3.3Evaluation\README under "Database Drivers": "The client libraries for MySQL and PostgreSQL are included in the package." Does this mean, I can use at Qt based API to access my MySQL database? If yes, how (e.g. which class to use)?

2. The second question is: How can I change the compiler, Qt is using, to g++? I read that I have to change an environment variable called QMAKESPEC from win32-msvc to win32-g++. And go to $QTDIR\qmake and run make or nmake. My first problem is: the directory $QTDIR exists, but it has no subdirectory called qmake. Do you know any solutions to this problem? I have to say, that I am using a book edition of Visual Studio 6.0 which lets your programs show up with a nasty note. Because of that and my disagreement with the microsoft policy I want to use g++.

I hope you can help me!

Thanks
Konrad Kleine
FlorianBecker
Beiträge: 1213
Registriert: 2. Dezember 2004 10:54
Kontaktdaten:

Beitrag von FlorianBecker »

Datenbanken:
Die Datenbanken werden bei Qt als Module bereitgestellt, die geladen werden können und dann einfach mit dem SQL Modul der Qt Libs verwendet werden können:
Quelle: http://doc.trolltech.com/3.3/sql.html
Das Modul basiert allerdings auf der libmysqlclient, die du aber nicht verwenden musst. Dadurch das allerdings viele Funktionen in vielen Dankenbanken unterschiedlich sind oder gleich gar nicht unterstützt werden, ist das mit Qt nicht immer unproblematisch eine passende Lösung zu finden. Ich denke da z.B. an die Rückgabe der zuletzt eingefügten auto_increment id.

Gcc:
Warum ein subdir qmake? qmake sollte unter $QTDIR/bin/qmake liegen, es ist ein Programm, das aus einer Projektdatei (*.pro) ein Makefile generiert. Und nmake ist ms.net compiler und make ist g++. $QMAKESPECS sollte nach einer Installation unter den Umgebungsvariablen gesetzt sein, hier musst du dann den entsprechenden Wert für den g++ eintragen.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Man kann nicht einfach ein qt-win, welches für msvc kompiliert wurde mit mingw/g++ linken - man braucht dann schon etxra ein Paket für mingw/g++... aber das gibts m.E. nicht als eval-Version.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
kowi1134
Beiträge: 120
Registriert: 1. Mai 2005 17:48
Wohnort: Arnsberg

Beitrag von kowi1134 »

Erstmal abgesehen von MySQL:
1. Du hast ja Recht, qmake liegt unter $QTDIR\bin
2. In $QTDIR\PLATFORMS steht folgendes:
Before you build the Qt library and example programs, you must run the
"configure" program to set the platform information and other build
settings. You can use the -platform option, or set the QMAKESPEC
environment variable to specify the operating system and compiler you
are using.

Supported platforms and compilers:

win32-borland
win32-g++
win32-icc
win32-msvc
win32-msvc.net

Compilation problems:

If you experience problems compiling Qt 3.x consult the platform
notes found at http://www.trolltech.com/developer/platforms/ where
we post workarounds and known issues as we become aware of them.

Example:

configure -platform win32-msvc.net -shared -debug
Jetzt bin ich also in $QDIR\bin gegangen, habe "configure -platform win32-g++ -shared" ausgeführt (auf debug lege ich im Augenblick keinen Wert). Dann bekomme ich folgende Nachricht:
C:\Qt_QSA\Qt3.3.3Evaluation\bin>configure -platform win32-g++ -shared

Qt is now configured for building. Just run nmake.
To reconfigure, run nmake clean and configure.
Wenn ich jetzt aber in meinem Projektverzeichnis die üblichen Schritte durchführe (1. qmake -project, 2. qmake) und dann die Makefile mit "make" aufrufen möchte, dann kommt folgende Fehlermeldung:
C:\Dokumente und Einstellungen\konrad\Desktop\RFID-Warehouse-Installer>make
makefile:61: *** missing separator. Stop.
Offensichtlich, denkt Qt immer noch, dass ich VC benutze, denn damit geht es dann wieder. D.h. wenn ich also "nmake" eingebe kompiliert alles anstandslos:
C:\Dokumente und Einstellungen\konrad\Desktop\RFID-Warehouse-Installer>nmake

Microsoft (R) Program Maintenance-Dienstprogramm: Version 6.00.8168.0
Copyright (C) Microsoft Corp 1988-1998. Alle Rechte vorbehalten.

cl -c -nologo -Zm200 -W3 -MD -O1 -GX -DUNICODE -DQT_DLL -DQT_THREAD_SUPPORT -DQT_NO_DEBUG -
I"." -I"C:\Qt_QSA\Qt3.3.3Evaluation\include" -I"C:\Dokumente und Einstellungen\konrad\Desktop\RFID-W
arehouse-Installer" -I"C:\Qt_QSA\Qt3.3.3Evaluation\mkspecs\win32-msvc" -Fo @C:\DOKUME~1\konrad\LOKAL
E~1\Temp\nma02876.
main.cpp
link /NOLOGO delayimp.lib /DELAYLOAD:comdlg32.dll /DELAYLOAD:oleaut32.dll /DELAYLOAD:winmm.d
ll /DELAYLOAD:wsock32.dll /DELAYLOAD:winspool.dll /SUBSYSTEM:windows /LIBPATH:"C:\Qt_QSA\Qt3.3.3Eval
uation\lib" /OUT:RFID-Warehouse-Installer.exe @C:\DOKUME~1\konrad\LOKALE~1\Temp\nmb02876.
LINK : warning LNK4199: /DELAYLOAD:comdlg32.dll wird ignoriert; keine Importe von comdlg32.dll gefun
den
LINK : warning LNK4199: /DELAYLOAD:oleaut32.dll wird ignoriert; keine Importe von oleaut32.dll gefun
den
LINK : warning LNK4199: /DELAYLOAD:winmm.dll wird ignoriert; keine Importe von winmm.dll gefunden
LINK : warning LNK4199: /DELAYLOAD:wsock32.dll wird ignoriert; keine Importe von wsock32.dll gefunde
n
LINK : warning LNK4199: /DELAYLOAD:winspool.dll wird ignoriert; keine Importe von winspool.dll gefun
den

C:\Dokumente und Einstellungen\konrad\Desktop\RFID-Warehouse-Installer>RFID-Warehouse-Installer.exe
Zu MySQL wollte ich mal fragen, ob es sehr schwierig ist, den Datenbank-Server mittels ODBC anzusprechen?! Man muss soweit ich weiß dann noch zusätzlich auf dem Client-PC einen Treiber installieren (siehe: http://www.mysql.com/products/connector/odbc/).

Schon mal vielen Dank für Deine Antwort.
Konrad
FlorianBecker
Beiträge: 1213
Registriert: 2. Dezember 2004 10:54
Kontaktdaten:

Beitrag von FlorianBecker »

Ich habe es unter Windows noch nie mit g++ gebaut, da habe ich leider keine Ahnung. Aber wieso willst du unter Windows eigentlich g++ nehmen? vc.net und borland sind viel besser und schneller.

Also ich weiss da wirklich nicht weiter, aber vielleicht hilft dir die GPL Win Version ein wenig mehr weiter fürs erste.

Zu den Datenbanken, ja, deine Aussage trifft zu. Ob es schwierig ist? Mh, wenn du Qt nimmst ist die API genau die gleiche nur mit dem ODBC Modul anstelle dem MySQL Modul.
kowi1134
Beiträge: 120
Registriert: 1. Mai 2005 17:48
Wohnort: Arnsberg

Beitrag von kowi1134 »

Ich benutze das Paket XAMPP von apachefriends.
Da ist die MySQL-Version 4.1.10 mit drin.

Auf der MyODBC Downloadseite steht bei den Downloads zu windows:
Windows downloads
Driver Installer (EXE) 3.51.11 7.2M Pick a mirror
MD5: 7d6d7e0cd6ca4ba9a8659000434359b5 | Signature
Driver Installer (MSI) 3.51.11 3.8M Pick a mirror
MD5: fde63aa106dd5e919df06898fce5171b | Signature
Muss der ODBC Treiber gegen die exakte Version vom MySQL Server gebaut sein? Dann müsste es hier ja eigentlich einen Konflikt geben, oder? (siehe 4.1.10 vs. 3.51.11)

Konrad
FlorianBecker
Beiträge: 1213
Registriert: 2. Dezember 2004 10:54
Kontaktdaten:

Beitrag von FlorianBecker »

Also die OBDC Treiber sind vom logischen her wie alle anderen Programme auch nur gegen die Client Libs gelinkt. Und die Client Libs von 4 können auf jeden Fall untereinander zugreifen. Und soweit ich es auswendig sagen kann, stellt MySQL kompatible Client Libs für 3 + 4er Version bereit, falls du eben nur einen 3er Server hast. Das sollte also schon gehen.

Du musst bei der Implementierung deines Programmes nur darauf achten, das du natürlich dann die Syntax nimmst, die beide Server können und das ist in deinem Fall die 3er Version. Da ich selber nur mit MySQL arbeite würde ich die aber empfehlen alles auf MySQL 4.1 umzustellen, denn die sind schneller und vorallem bietet die Syntax einiges mehr an Kommandos, die durchaus hilfreich sind. Und ich glaube, das die 3er Version ja sowieso nur noch sporadisch weiter entwickelt wird, wenn überhaupt noch, da MySQL 5 in naher Zukunft kommen wird, die 2. Beta gibts ja schon.
kowi1134
Beiträge: 120
Registriert: 1. Mai 2005 17:48
Wohnort: Arnsberg

Beitrag von kowi1134 »

Hallo!

Erstmal vielen Dank Florian!

Damit auch andere etwas von diesem Thread haben, schreibe ich hier mal den Code, wie ich ihn mir aus der Dokumentation zusammengereimt habe:

Code: Alles auswählen

// Diese Includes sollten ausreichen
#include <qapplication.h>
#include <qsqldatabase.h>

// ...
// &box ist in meiner Application das Hauptwiget
// ...

	QSqlDatabase *defaultDB = QSqlDatabase::addDatabase( "QODBC3" );
  defaultDB->setDatabaseName( "DRIVER={MySQL ODBC 3.51 Driver}" );
  defaultDB->setUserName( "root" );
  defaultDB->setPassword( "" );
  defaultDB->setHostName( "localhost" );

	if ( ! defaultDB->open() )
	{
		QMessageBox::warning(
			&box, 
			"Application name",
			"Unable to establish MySQL database connection via ODBC\n"
			+ defaultDB->lastError().text()
	);
	
	defaultDB->close();
//
// ...
//
Ich habe mir MyODBC installiert und unter Systemsteuerung->Verwaltung->Datenquellen (ODBC)->Verbindungs Pooling (Registerkarte) auch wieder gefunden. Die Verbindung zu MySQL mit diesem Code war mir auch möglich.
Ich habe allerdings jetzt allerlei zusätzlichen Krams unterschlagen, den ich noch im ODBC-Datenquellen Administrator gemacht habe, einfach weil ich denke, dass er überflüssig war. Sollte jemand Probleme damit haben, dann fragt mich einfach, was ich noch gemacht habe.

Grüße
Konrad
Antworten