Hi
ich wollte mich grad in meinem frisch installierten QT4.1.2 mit meiner MySQL 5 Datenbank unter Mac OSX verbinden.
Den MySQL treiber für QT hab ich als Plugin compiliert.
-> /usr/local/Trolltech/Qt-4.1.2/plugins/sqldrivers/libqsqlmysql.dylib
das Plugin scheint alle benötigten Bibliotheken zu haben :
amini:/usr/local/Trolltech/Qt-4.1.2/plugins monte$ otool -L sqldrivers/libqsqlmysql.dylib
sqldrivers/libqsqlmysql.dylib:
libqsqlmysql.dylib (compatibility version 0.0.0, current version 0.0.0)
/usr/local/Trolltech/Qt-4.1.2/lib/QtSql.framework/Versions/4.0/QtSql (compatibility version 4.1.0, current version 4.1.2)
/usr/local/Trolltech/Qt-4.1.2/lib/QtCore.framework/Versions/4.0/QtCore (compatibility version 4.1.0, current version 4.1.2)
/usr/lib/libz.1.dylib (compatibility version 1.0.0, current version 1.2.3)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 88.1.5)
/System/Library/Frameworks/ApplicationServices.framework/Versions/A/ApplicationServices (compatibility version 1.0.0, current version 19.0.0)
/usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 7.4.0)
/usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0)
/usr/lib/libmx.A.dylib (compatibility version 1.0.0, current version 92.0.0)
In meinem Projekt file habe ich die Zeile QT += sql eingefügt
Im construcktor meiner Klasse habe ich nun folgendes :
// **********************************************************
// Setting up Database connection
// **********************************************************
qRunDb = QSqlDatabase::addDatabase("QMYSQL");
qRunDb.setHostName("localhost");
qRunDb.setDatabaseName("qrun");
qRunDb.setUserName("dbuser");
qRunDb.setPassword("thisisnotmypassword");
if( qRunDb.open() )
qDebug() << "Database not opened : " << qRunDb.lastError().text();
als Ausgabe bekomme ich nun einen leeren Fehlerstring :
-> Database not opened : " "
wenn ich qRunDb.lastError() ausgebe kommt :
Database not opened : QSqlError(-1, """", """")
Hat jemand ne Ahnung was das bedeuten könnte ?
Oder wie kann ich feststellen ob das Plugin überhaupt geladen wurde.
Was ich noch gelesen habe ist das QT nicht statisch kompiliert worden sein darf. Hab ich imho nicht gemacht aber wie kann ich das Prüfen ?
MfG
Martin
QT4, MYSQL5 Verbindung schlägt ohne Grund fehl
Wen du Mac OSX Panther 10.3.9 hast
rate ich dir die libs unter
http://www.darwinports.org/
zu nehmen...
http://darwinports.opendarwin.org/ports ... bstr=mysql
die habe ich bis heute alle zum laufen gebracht....
und dan ... # sudo port install name_apps
Und bereits bei der qt4 installation zu integrieren ...
./configure --help
whit sql ***** (dann ist die lib statisch in der applikationen - obwohl plug-in name!)
Fals du fink installiert hast ... den $PATH /sw rausnehmen ... warum ... weiss ich nicht ... ich denke es es sache vom compiler...
rate ich dir die libs unter
http://www.darwinports.org/
zu nehmen...
http://darwinports.opendarwin.org/ports ... bstr=mysql
die habe ich bis heute alle zum laufen gebracht....
und dan ... # sudo port install name_apps
Und bereits bei der qt4 installation zu integrieren ...
./configure --help
whit sql ***** (dann ist die lib statisch in der applikationen - obwohl plug-in name!)
Fals du fink installiert hast ... den $PATH /sw rausnehmen ... warum ... weiss ich nicht ... ich denke es es sache vom compiler...
Hab Tiger. Das MySQL Plugin hab ich aber mit den orginal Libs von MySQL compiliert. Dachte wenns schon ne nativ Version gibt warum dann ein Port verwenden.
Fink hab ich auch aber keine DEV Tools damit installiert. Den /sw Pfad rauszunehmen hat leider auch nix gebracht.
In der shell kann ich mich mit :
/usr/local/mysql/bin/mysql -u dbuser -h localhost
natürlich mit der DB verbinden.
Das Tool CocoaMySQL hat Probleme mit der neuen Passwort codierung in MySQL5 daher hab ich auch mal das Passwort entfernt. Leider ohne Erfolg.
cya
Martin
Fink hab ich auch aber keine DEV Tools damit installiert. Den /sw Pfad rauszunehmen hat leider auch nix gebracht.
In der shell kann ich mich mit :
/usr/local/mysql/bin/mysql -u dbuser -h localhost
natürlich mit der DB verbinden.
Das Tool CocoaMySQL hat Probleme mit der neuen Passwort codierung in MySQL5 daher hab ich auch mal das Passwort entfernt. Leider ohne Erfolg.
cya
Martin
wenn du Tiger hast dann ist sicher xcode 2.2 ... richtig?
... Ich mit Panther habe eben xcode 2.1 oder sogar 2.0 ... doch auf dem Ibook Tiger von meinem vater habe ich auch qt4.1 installiert um zu testen... mit xcode2.2 ... aber ohne sql support..
1 - hat du noch den ./configure log vom qt4..? hast nach configure noch was getipt?
2 - Warum installierst du in /usr/local ? ich habe wie anleitung nach
/Developer/qt/ installiert so kann ich auch via finder was sehen...
garantiert siehst du /usr/local .. nurm im terminal...
das ist mein config.status ... und bei ./configure --help kann man direkt libmysql angeben..
und heute morgen beim kompilieren auf mac ...
mac {
########### qt build libs! ##########
INCLUDEPATH += ./os_extra_lib/sqlite3
DEPENDPATH += ./os_extra_lib/sqlite3
LIBS += ./os_extra_lib/liblibsqlite3.a
########### qt build libs! ##########
#### http://www.darwinports.org/
#### sudo port install libxslt libxml2 curl zlib sqlite3
INCLUDEPATH += /opt/local/include
INCLUDEPATH += /opt/local/include/libxml2
INCLUDEPATH += /opt/local/include/libxslt
INCLUDEPATH += /opt/local/include/libxml2/libxml
INCLUDEPATH += /opt/local/include/libxml2/libxml
LIBS += -lxml2 -lcurl -lxslt
}
habe ich curl mit dem vollen pfad.... nicht reingebracht .. wenn eine lib nicht ****.a ist geht es nur mit -lcurl ...
den vollen namen libcurl.2.0.2.dylib vollte der compiler nicht! aber nur -lcurl ist sofort prima gelaufen! gleiche geschichte mit xml2 & xslt...
Ich rate dir wenn du ein schnellen cpu hast qt nochmals zu builden mit allem drauf was du gebrauchen kanst ... mit mac redet man nicht gerne von plug-in... oder such dei config.status... zum ansehen...
... Ich mit Panther habe eben xcode 2.1 oder sogar 2.0 ... doch auf dem Ibook Tiger von meinem vater habe ich auch qt4.1 installiert um zu testen... mit xcode2.2 ... aber ohne sql support..
1 - hat du noch den ./configure log vom qt4..? hast nach configure noch was getipt?
2 - Warum installierst du in /usr/local ? ich habe wie anleitung nach
/Developer/qt/ installiert so kann ich auch via finder was sehen...
garantiert siehst du /usr/local .. nurm im terminal...
das ist mein config.status ... und bei ./configure --help kann man direkt libmysql angeben..
Code: Alles auswählen
#!/bin/sh
if [ "$#" -gt 0 ]; then
/Developer/qt/configure -prefix /Developer/qt -release -static -qt-sql-sqlite -qt-zlib -qt-libpng -qt-gif -qt-libjpeg -confirm-license "$@"
else
/Developer/qt/configure -prefix /Developer/qt -release -static -qt-sql-sqlite -qt-zlib -qt-libpng -qt-gif -qt-libjpeg -confirm-license
fi
und heute morgen beim kompilieren auf mac ...
mac {
########### qt build libs! ##########
INCLUDEPATH += ./os_extra_lib/sqlite3
DEPENDPATH += ./os_extra_lib/sqlite3
LIBS += ./os_extra_lib/liblibsqlite3.a
########### qt build libs! ##########
#### http://www.darwinports.org/
#### sudo port install libxslt libxml2 curl zlib sqlite3
INCLUDEPATH += /opt/local/include
INCLUDEPATH += /opt/local/include/libxml2
INCLUDEPATH += /opt/local/include/libxslt
INCLUDEPATH += /opt/local/include/libxml2/libxml
INCLUDEPATH += /opt/local/include/libxml2/libxml
LIBS += -lxml2 -lcurl -lxslt
}
habe ich curl mit dem vollen pfad.... nicht reingebracht .. wenn eine lib nicht ****.a ist geht es nur mit -lcurl ...
den vollen namen libcurl.2.0.2.dylib vollte der compiler nicht! aber nur -lcurl ist sofort prima gelaufen! gleiche geschichte mit xml2 & xslt...
Ich rate dir wenn du ein schnellen cpu hast qt nochmals zu builden mit allem drauf was du gebrauchen kanst ... mit mac redet man nicht gerne von plug-in... oder such dei config.status... zum ansehen...
So Problem gelöst.
Zum Test hab ich das ich mal versucht mich mit einer SQLite DB zu verbinden und hatte dort das selbe Problem.
Ich wusste aber dass die QT Examples funktionieren.
Auch ein :
zeigte mir das sowohl MySQL als auch SQLite zur Verfügung stehen.
Zum test hab ich eines der QT SQL Examples neu compiliert und ausgeführt -> siehe da es geht .
Jedenfalls hab ich nun die connection.h include Datei von den QT examples angepast und in mein Programm eingefügt -> siehe da es geht
thx
Martin
Zum Test hab ich das ich mal versucht mich mit einer SQLite DB zu verbinden und hatte dort das selbe Problem.
Ich wusste aber dass die QT Examples funktionieren.
Auch ein :
Code: Alles auswählen
QStringList list = QSqlDatabase::drivers();
QStringList::Iterator it = list.begin();
while( it != list.end() ) {
cerr << (*it) << endl;
++it;
}
Zum test hab ich eines der QT SQL Examples neu compiliert und ausgeführt -> siehe da es geht .
Jedenfalls hab ich nun die connection.h include Datei von den QT examples angepast und in mein Programm eingefügt -> siehe da es geht
thx
Martin
Qt-Doku:if( qRunDb.open() )
qDebug() << "Database not opened : " << qRunDb.lastError().text();
Also fehlt sicher nur ein "!". Ich frage mich, was Du an der connection.h angepasst hastbool QSqlDatabase::open ()
Opens the database connection using the current connection values. Returns true on success; otherwise returns false.
E*