Qt mit SQL Unterstützung (MySQL)
-
KartoffelKiffer
- Beiträge: 101
- Registriert: 27. Februar 2008 15:59
Qt mit SQL Unterstützung (MySQL)
Hallo,
ich versuche nun schon eine Zeit lang MySQL unter Qt zum Laufen zu bekommen.
Ich nutze die Commercial Version 4.3.3 unter Visual Studio 6.0 und MySQL 5.0.
MySQL habe ich komplett mit den Includes und Libraries installiert.
Um Qt zu konfigurieren nutze ich
configure -platform win32-msvc -qt-sql-mysql -plugin-sql-mysql
nmake
Das Konfigurieren klappt auch wunderbar, nur bei nmake schmiert er mir bei folgender Fehlermeldung ab:
---------------
.\../../../sql/drivers/mysql/qsql_mysql.h(32) : fatal error C1083: Cannot open i
nclude file: 'mysql.h': No such file or directory
NMAKE : fatal error U1077: 'cl' : return code '0x2'
Stop.
NMAKE : fatal error U1077: '"C:\Programme\Microsoft Visual Studio\VC98\bin\NMAKE
.EXE"' : return code '0x2'
Stop.
NMAKE : fatal error U1077: 'cd' : return code '0x2'
Stop.
NMAKE : fatal error U1077: 'cd' : return code '0x2'
Stop.
NMAKE : fatal error U1077: 'cd' : return code '0x2'
Stop.
----------------
Trotz zahlreicher Versuche bekomme ich es einfach nicht ans laufen, dass ich einfach einen #include <QSql> und darauffolgend QSqlDatabase machen kann.
Ich hoffe hier weiß jemand Rat zu meinem Problem.
Mfg KK
ich versuche nun schon eine Zeit lang MySQL unter Qt zum Laufen zu bekommen.
Ich nutze die Commercial Version 4.3.3 unter Visual Studio 6.0 und MySQL 5.0.
MySQL habe ich komplett mit den Includes und Libraries installiert.
Um Qt zu konfigurieren nutze ich
configure -platform win32-msvc -qt-sql-mysql -plugin-sql-mysql
nmake
Das Konfigurieren klappt auch wunderbar, nur bei nmake schmiert er mir bei folgender Fehlermeldung ab:
---------------
.\../../../sql/drivers/mysql/qsql_mysql.h(32) : fatal error C1083: Cannot open i
nclude file: 'mysql.h': No such file or directory
NMAKE : fatal error U1077: 'cl' : return code '0x2'
Stop.
NMAKE : fatal error U1077: '"C:\Programme\Microsoft Visual Studio\VC98\bin\NMAKE
.EXE"' : return code '0x2'
Stop.
NMAKE : fatal error U1077: 'cd' : return code '0x2'
Stop.
NMAKE : fatal error U1077: 'cd' : return code '0x2'
Stop.
NMAKE : fatal error U1077: 'cd' : return code '0x2'
Stop.
----------------
Trotz zahlreicher Versuche bekomme ich es einfach nicht ans laufen, dass ich einfach einen #include <QSql> und darauffolgend QSqlDatabase machen kann.
Ich hoffe hier weiß jemand Rat zu meinem Problem.
Mfg KK
Zuletzt geändert von KartoffelKiffer am 19. Juni 2009 14:00, insgesamt 1-mal geändert.
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
-
KartoffelKiffer
- Beiträge: 101
- Registriert: 27. Februar 2008 15:59
Hallo Christian,
erstmal danke für Deine Antwort. Es scheint mit den Includes funktioniert zu haben.
Allerdings kommt nach etwa einer halben Stunde ein weiterer Fehler,
-------------------------
moc_controlinfo.cpp
Generating Code...
link /LIBPATH:"c:\Programme\Qt\4.3.3\lib" /LIBPATH:"c:\Programme\Qt\4.3.
3\lib" /NOLOGO /DEBUG /SUBSYSTEM:windows /OUT:debug\testcon.exe @C:\DOKUME~1\KK
\LOKALE~1\Temp\nmc03628.
midl C:\Programme\Qt\4.3.3/tools/activeqt/testcon/testcon.idl && move te
stcon.tlb
Microsoft (R) MIDL Compiler Version 5.01.0164
Copyright (c) Microsoft Corp 1991-1997. All rights reserved.
Processing C:\Programme\Qt\4.3.3\tools\activeqt\testcon\testcon.idl
midl : command line error MIDL1004 : cannot execute C preprocessor cl.exe
NMAKE : fatal error U1077: 'midl' : return code '0x3ec'
Stop.
NMAKE : fatal error U1077: '"C:\Programme\Microsoft Visual Studio\VC98\bin\NMAKE
.EXE"' : return code '0x2'
Stop.
NMAKE : fatal error U1077: 'cd' : return code '0x2'
Stop.
NMAKE : fatal error U1077: 'cd' : return code '0x2'
Stop.
NMAKE : fatal error U1077: 'cd' : return code '0x2'
Stop.
-------------------------
der mich nun völlig aus der Fassung bringt.
Ich habe heute morgen ein nmake confclean durchlaufen lassen. Danach habe ich mittels
configure -L C:\MySQL\lib\opt -I C:\MySQL\include -platform win32-msvc -qt-sql-mysql -plugin-sql-mysql
konfiguriert und anschließend ist er beim nmake mit der obigen Fehlermeldung abgeschmiert.
Was kann es denn damit nun noch aufsich haben?
// Edit: Noch ein kleiner Nachtrag. Und zwar kann ich nun mit der QtSql arbeiten, und bekomme auch beim Kompilieren des Programms keine Fehlermeldungen.
Mein Quellcode sieht wiefolgt aus:
Nur springt er in die Else-Bedingung und spuckt den Fehler aus: "Driver not loaded". Nach einigem Suchen und Probieren habe ich es dennoch nicht ans Laufen bekommen. In meiner Entwicklungsumgebung habe ich die libs und includes von MySQL eingefügt und in die Main-Methode eine Zeile
eingefügt. Natürlich ohne nennenswerte Ergebnisse. Dieselbe Fehlermeldung.
Im sqldrivers-Ordner wurden ettliche dll´s neu kompilliert, das zeigt mir das Datum. Sie sind also auf dem aktuellen Stand.
Nun habe ich es immernoch nicht am Laufen, und bitte immernoch um Hilfe.
// Edit2: Noch ein kleiner Nachtrag, meine .pro-Datei des Projekts sieht wiefolgt aus:
Mfg KK
erstmal danke für Deine Antwort. Es scheint mit den Includes funktioniert zu haben.
Allerdings kommt nach etwa einer halben Stunde ein weiterer Fehler,
-------------------------
moc_controlinfo.cpp
Generating Code...
link /LIBPATH:"c:\Programme\Qt\4.3.3\lib" /LIBPATH:"c:\Programme\Qt\4.3.
3\lib" /NOLOGO /DEBUG /SUBSYSTEM:windows /OUT:debug\testcon.exe @C:\DOKUME~1\KK
\LOKALE~1\Temp\nmc03628.
midl C:\Programme\Qt\4.3.3/tools/activeqt/testcon/testcon.idl && move te
stcon.tlb
Microsoft (R) MIDL Compiler Version 5.01.0164
Copyright (c) Microsoft Corp 1991-1997. All rights reserved.
Processing C:\Programme\Qt\4.3.3\tools\activeqt\testcon\testcon.idl
midl : command line error MIDL1004 : cannot execute C preprocessor cl.exe
NMAKE : fatal error U1077: 'midl' : return code '0x3ec'
Stop.
NMAKE : fatal error U1077: '"C:\Programme\Microsoft Visual Studio\VC98\bin\NMAKE
.EXE"' : return code '0x2'
Stop.
NMAKE : fatal error U1077: 'cd' : return code '0x2'
Stop.
NMAKE : fatal error U1077: 'cd' : return code '0x2'
Stop.
NMAKE : fatal error U1077: 'cd' : return code '0x2'
Stop.
-------------------------
der mich nun völlig aus der Fassung bringt.
Ich habe heute morgen ein nmake confclean durchlaufen lassen. Danach habe ich mittels
configure -L C:\MySQL\lib\opt -I C:\MySQL\include -platform win32-msvc -qt-sql-mysql -plugin-sql-mysql
konfiguriert und anschließend ist er beim nmake mit der obigen Fehlermeldung abgeschmiert.
Was kann es denn damit nun noch aufsich haben?
// Edit: Noch ein kleiner Nachtrag. Und zwar kann ich nun mit der QtSql arbeiten, und bekomme auch beim Kompilieren des Programms keine Fehlermeldungen.
Mein Quellcode sieht wiefolgt aus:
Code: Alles auswählen
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("localhost");
db.setDatabaseName("demo");
db.setUserName("root");
db.setPassword("root");
bool ok = db.open();
if (ok)
{
QMessageBox::information(0, "MySQL", "Connected");
}
else
{
QMessageBox::information(0, "MySQL", "Cannot connect: " + db.lastError().text());
}
Code: Alles auswählen
QApplication app(argc, argv); app.addLibraryPath("C:\\Programme\\Qt\\4.3.3\\plugins\\sqldrivers");
Im sqldrivers-Ordner wurden ettliche dll´s neu kompilliert, das zeigt mir das Datum. Sie sind also auf dem aktuellen Stand.
Nun habe ich es immernoch nicht am Laufen, und bitte immernoch um Hilfe.
// Edit2: Noch ein kleiner Nachtrag, meine .pro-Datei des Projekts sieht wiefolgt aus:
Code: Alles auswählen
DEPENDPATH += .
INCLUDEPATH += .
TARGET = proggi
QT = core gui sql
TEMPLATE = app
SOURCES += main.cpp
SOURCES += proggi.cpp
HEADERS += proggi.h
FORMS += proggi.ui
RESOURCES += proggi.qrc
Mfg KK
Zuletzt geändert von KartoffelKiffer am 19. Juni 2009 14:02, insgesamt 3-mal geändert.
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
midl.exe ist in der kommerziellen VisualStudio-Version dabei. Allerdings wird das Verzeichnis für midl nicht in der open-source-Version von Qt kompiliert --> Du benutzt VSExpress + Qt Commercial soweit ich das sehe. Ist ein Fall für den Qt-Support, kann aber erstmal ignoriert werden.
MfG Christian
'Funktioniert nicht' ist keine Fehlerbeschreibung
'Funktioniert nicht' ist keine Fehlerbeschreibung
-
KartoffelKiffer
- Beiträge: 101
- Registriert: 27. Februar 2008 15:59
Hallo Christian,
ich habe in meinem Thread noch ein paar Informationen hinzugefügt.
Ich arbeite mit der Microsoft Visual C++ v6.0. Also keine Express-Version. Ein original lizensiertes Microsoft-Produkt.
Mfg KK
ich habe in meinem Thread noch ein paar Informationen hinzugefügt.
Ich arbeite mit der Microsoft Visual C++ v6.0. Also keine Express-Version. Ein original lizensiertes Microsoft-Produkt.
Mfg KK
Zuletzt geändert von KartoffelKiffer am 19. Juni 2009 14:00, insgesamt 1-mal geändert.
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
-
KartoffelKiffer
- Beiträge: 101
- Registriert: 27. Februar 2008 15:59
Hallo Christian,
die midl.exe liegt im Verzeichnis C:\Programme\Microsoft Visual Studio\VC98\Bin\.
Sie ist also vorhanden.
Wie es scheint kann ich den Fehler auch ignorieren.
Ich komme bloß mit meiner Meldung "Driver not loaded" nicht klar. Es gibt zwar noch einige Threads dazu, nur lief keine der Möglichkeiten bei mir.
Wie gesagt wurden die dll´s korrekt übersetzt. Das Verzeichnis der sqldrivers habe ich meinem Programm auch mittels app.addLibraryPath("C:\\Programme\\Qt\\4.3.3\\plugins\\sqldrivers"); beigebracht.
Ein Kompilieren gelingt nun auch, nur kein Connect.
Mfg KK
die midl.exe liegt im Verzeichnis C:\Programme\Microsoft Visual Studio\VC98\Bin\.
Sie ist also vorhanden.
Wie es scheint kann ich den Fehler auch ignorieren.
Ich komme bloß mit meiner Meldung "Driver not loaded" nicht klar. Es gibt zwar noch einige Threads dazu, nur lief keine der Möglichkeiten bei mir.
Wie gesagt wurden die dll´s korrekt übersetzt. Das Verzeichnis der sqldrivers habe ich meinem Programm auch mittels app.addLibraryPath("C:\\Programme\\Qt\\4.3.3\\plugins\\sqldrivers"); beigebracht.
Ein Kompilieren gelingt nun auch, nur kein Connect.
Mfg KK
Zuletzt geändert von KartoffelKiffer am 19. Juni 2009 14:00, insgesamt 1-mal geändert.
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
-
KartoffelKiffer
- Beiträge: 101
- Registriert: 27. Februar 2008 15:59
Hallo,
ich habe mir das Programm einmal angeschaut und meine EXE (aus dem debug-Ordner) laufen lassen.
Es wird eine DWMAPI.dll nicht gefunden, bzw. kann nicht geöffnet werden.
Parrallel zur exe habe ich noch die drei dll´s QtSqld4.dll, QtCored4.dll und QtGuid4.dll kopiert, sie liegen also alle im selben Verzeichnis.
Die exe lässt sich auch problemlos starten, nur kommt halt wieder beim connect die Fehlermeldung.
In meine %PATH%-Variable habe ich nun das Verzeichnis sqldrivers hinzugefügt, dennoch ohne Erfolg.
Ich starte die Visual C++-Umgebung über die von Qt angelegte .bat-Datei mit folgendem Inhalt
Vielleicht hat das noch etwas zu bedeuten? Welche Datei ist für das Qt-Programm denn der "Driver"? Also welche .dll benötigt er?
Die aus dem plugins-Verzeichnis? Oder die QtSqld4.dll aus dem bin-Verzeichnis?
Mfg KK
ich habe mir das Programm einmal angeschaut und meine EXE (aus dem debug-Ordner) laufen lassen.
Es wird eine DWMAPI.dll nicht gefunden, bzw. kann nicht geöffnet werden.
Parrallel zur exe habe ich noch die drei dll´s QtSqld4.dll, QtCored4.dll und QtGuid4.dll kopiert, sie liegen also alle im selben Verzeichnis.
Die exe lässt sich auch problemlos starten, nur kommt halt wieder beim connect die Fehlermeldung.
In meine %PATH%-Variable habe ich nun das Verzeichnis sqldrivers hinzugefügt, dennoch ohne Erfolg.
Ich starte die Visual C++-Umgebung über die von Qt angelegte .bat-Datei mit folgendem Inhalt
Code: Alles auswählen
@echo off
rem
rem This file is generated
rem
echo Setting up a Qt environment...
echo -- QTDIR set to C:\programme\Qt\4.3.3
echo -- Added C:\programme\Qt\4.3.3\bin to PATH
echo -- QMAKESPEC set to win32-msvc
set QTDIR=C:\programme\Qt\4.3.3
set PATH=C:\programme\Qt\4.3.3\bin;%PATH%
set QMAKESPEC=win32-msvc
regedit /e S$D$K$ "HKEY_LOCAL_MACHINE\Software\Microsoft\MicrosoftSDK"
if not exist S$D$K$ goto ENDSDK\r
find "Install Dir" < S$D$K$ > D$I$R$
del S$D$K$
for /f "tokens=2 delims==" %%i in (D$I$R$) do call %%i\setenv
del D$I$R$
:ENDSDK\r
if not "%1"=="vsvars" goto END
call "C:\Programme\Microsoft Visual Studio\VC98\bin\vcvars32.bat"
:END
if not "%1"=="vsstart" goto ENDSTARTVS
call "C:\Programme\Microsoft Visual Studio\VC98\bin\vcvars32.bat"
msdev /useenv
:ENDSTARTVS
Die aus dem plugins-Verzeichnis? Oder die QtSqld4.dll aus dem bin-Verzeichnis?
Mfg KK
Zuletzt geändert von KartoffelKiffer am 19. Juni 2009 14:01, insgesamt 1-mal geändert.
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
Viellicht habe ich mich nicht klar ausgedrückt.
Das Plugin, welches ja offensichtlich nicht geladen wird, hat dependencies (z.B. zur sql lib). Sind diese nicht auffindbar (im PATH), kann es nicht geladen werden. sqldrivers in den PATH aufzunehmen ist nicht nötig.
Das Plugin, welches ja offensichtlich nicht geladen wird, hat dependencies (z.B. zur sql lib). Sind diese nicht auffindbar (im PATH), kann es nicht geladen werden. sqldrivers in den PATH aufzunehmen ist nicht nötig.
MfG Christian
'Funktioniert nicht' ist keine Fehlerbeschreibung
'Funktioniert nicht' ist keine Fehlerbeschreibung
-
KartoffelKiffer
- Beiträge: 101
- Registriert: 27. Februar 2008 15:59
Hallo,
da ich die Entwicklungsumgebung mittels .bat-Datei gestartet habe, hat mir diese das Setzen der PATH-Variablen (siehe Beitrag vorher) abgenommen.
Ich habe nun den bin-Pfad von Qt und MySQL in die PATH-Variable eingetragen. Ein Analysieren der Datei qsqlmysqld4.dll im sqldrivers-Ordner mittels Depends ergab auch, dass er die libMySQL.dll, die QtCored4.dll und die QtSqld4.dll nicht finden konnte.
Dies ist nun mit Setzen der Pfade in die PATH-Variable verschwunden.
Allerdings kann die qsqlmysqld4.dll zu einer DWMAPI.dll nicht auflösen (Error opening file. Das System kann die angegebene Datei nicht finden). Was offensichtlich stimmt, da ich sie auch auf meinem ganzen System nicht finden kann.
Wenn ich Dich jetzt richtig verstanden habe, löst die qsqlmysqld4.dll nur auf, wenn sie alle Beziehungen auch aufbauen kann. Dies ist wohl nicht der Fall, also kann das Plugin nicht geladen werden.
// Edit: Ich sehe gerade, dass die DWMAPI.dll in so gut wie jeder Qt-.dll fehlt. Auch in der /bin/QtCored4.dll
Mfg KK
da ich die Entwicklungsumgebung mittels .bat-Datei gestartet habe, hat mir diese das Setzen der PATH-Variablen (siehe Beitrag vorher) abgenommen.
Ich habe nun den bin-Pfad von Qt und MySQL in die PATH-Variable eingetragen. Ein Analysieren der Datei qsqlmysqld4.dll im sqldrivers-Ordner mittels Depends ergab auch, dass er die libMySQL.dll, die QtCored4.dll und die QtSqld4.dll nicht finden konnte.
Dies ist nun mit Setzen der Pfade in die PATH-Variable verschwunden.
Allerdings kann die qsqlmysqld4.dll zu einer DWMAPI.dll nicht auflösen (Error opening file. Das System kann die angegebene Datei nicht finden). Was offensichtlich stimmt, da ich sie auch auf meinem ganzen System nicht finden kann.
Wenn ich Dich jetzt richtig verstanden habe, löst die qsqlmysqld4.dll nur auf, wenn sie alle Beziehungen auch aufbauen kann. Dies ist wohl nicht der Fall, also kann das Plugin nicht geladen werden.
// Edit: Ich sehe gerade, dass die DWMAPI.dll in so gut wie jeder Qt-.dll fehlt. Auch in der /bin/QtCored4.dll
Mfg KK
Zuletzt geändert von KartoffelKiffer am 19. Juni 2009 14:01, insgesamt 1-mal geändert.
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
Die dll kann fehlen - ist nicht weiter wichtig -> google
Wenn es jetzt immer noch nicht geht, einfach mal den Plugin-Cache von Qt löschen -> HKCU oder HKLM/Software/Trolltech/Qt Plugin Cache
Ggf. auch mal dort etwas rumstöbern was so drinsteht -> Foren-Suche, habe ich schonmal mit jemanden diskutiert
Wenn es jetzt immer noch nicht geht, einfach mal den Plugin-Cache von Qt löschen -> HKCU oder HKLM/Software/Trolltech/Qt Plugin Cache
Ggf. auch mal dort etwas rumstöbern was so drinsteht -> Foren-Suche, habe ich schonmal mit jemanden diskutiert
MfG Christian
'Funktioniert nicht' ist keine Fehlerbeschreibung
'Funktioniert nicht' ist keine Fehlerbeschreibung
-
KartoffelKiffer
- Beiträge: 101
- Registriert: 27. Februar 2008 15:59
Hallo,
db.open() gibt ein true zurück.
Ich danke Dir!!!!!!!
Löschen des Qt Plugin Caches hat es gebracht.
Ich habe jetzt einfach komplett Laufwerk C: aus dem Cache gelöscht. Und siehe da, mein Programm hat eine komplett neue Plugin Struktur aufgebaut. Nun auch mit den (frisch) installierten MySQL-Treibern.
Vorher hat QSqlDatabase::drivers() nur eine kleine Anzahl von Treibern angezeigt, welche (so schätze ich) bei der Installation von Qt aktiviert wurden. Da MySQL nicht standardmäßig aktiviert wird, muss Qt mit MySQL neu übersetzt werden und der veraltete Cache gelöscht werden.
Er wird dann bei Start eines Qt-Programmes wieder neu angelegt.
Vielen dank nochmal Christian.
Mfg KK
db.open() gibt ein true zurück.
Ich danke Dir!!!!!!!
Löschen des Qt Plugin Caches hat es gebracht.
Ich habe jetzt einfach komplett Laufwerk C: aus dem Cache gelöscht. Und siehe da, mein Programm hat eine komplett neue Plugin Struktur aufgebaut. Nun auch mit den (frisch) installierten MySQL-Treibern.
Vorher hat QSqlDatabase::drivers() nur eine kleine Anzahl von Treibern angezeigt, welche (so schätze ich) bei der Installation von Qt aktiviert wurden. Da MySQL nicht standardmäßig aktiviert wird, muss Qt mit MySQL neu übersetzt werden und der veraltete Cache gelöscht werden.
Er wird dann bei Start eines Qt-Programmes wieder neu angelegt.
Vielen dank nochmal Christian.
Mfg KK
Zuletzt geändert von KartoffelKiffer am 19. Juni 2009 14:01, insgesamt 1-mal geändert.
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
-
KartoffelKiffer
- Beiträge: 101
- Registriert: 27. Februar 2008 15:59