QT4, MYSQL5 Verbindung schlägt ohne Grund fehl

Alles rund um die Programmierung mit Qt
Antworten
monte
Beiträge: 24
Registriert: 28. August 2004 17:04
Wohnort: Wiswiel
Kontaktdaten:

QT4, MYSQL5 Verbindung schlägt ohne Grund fehl

Beitrag von monte »

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
patrik08
Beiträge: 746
Registriert: 27. Februar 2006 10:48
Wohnort: DE Freiburg

Beitrag von patrik08 »

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...
monte
Beiträge: 24
Registriert: 28. August 2004 17:04
Wohnort: Wiswiel
Kontaktdaten:

Beitrag von monte »

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
patrik08
Beiträge: 746
Registriert: 27. Februar 2006 10:48
Wohnort: DE Freiburg

Beitrag von patrik08 »

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..

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...
monte
Beiträge: 24
Registriert: 28. August 2004 17:04
Wohnort: Wiswiel
Kontaktdaten:

Beitrag von monte »

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 :

Code: Alles auswählen

    
    QStringList list = QSqlDatabase::drivers();
    QStringList::Iterator it = list.begin();
    while( it != list.end() ) {
        cerr << (*it) << endl;
        ++it;
    }
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
patrik08
Beiträge: 746
Registriert: 27. Februar 2006 10:48
Wohnort: DE Freiburg

Beitrag von patrik08 »

Bitte lass es mir wissen ob ohne "./configure -static " die applikationen auch auf andere mac sichtbar sind... ohne mac installer zu bauen...
Eltharion
Beiträge: 74
Registriert: 4. Mai 2006 14:42
Wohnort: Magdeburg
Kontaktdaten:

Beitrag von Eltharion »

if( qRunDb.open() )
qDebug() << "Database not opened : " << qRunDb.lastError().text();
Qt-Doku:
bool QSqlDatabase::open ()

Opens the database connection using the current connection values. Returns true on success; otherwise returns false.
Also fehlt sicher nur ein "!". Ich frage mich, was Du an der connection.h angepasst hast ;-)

E*
Antworten