Probleme mit Datenbankanbinung per Postgre!

Alles rund um die Programmierung mit Qt
Illuminatus
Beiträge: 84
Registriert: 3. Dezember 2008 12:48

Probleme mit Datenbankanbinung per Postgre!

Beitrag von Illuminatus »

Hi, ich weis ich hab das Problem schonmal gepostet, allerdings sind einige wesentliche Unklarheiten aufgetreten. Vorweg: Wir arbeiten an einem FrontEnd für eine Postgre Datenbank. Diese soll mithilfe von Qt4 realisiert werden. Wir haben uns nun bei unseren Tutoren erkundigt, welche gemeint hatten dass die Datenbanktreiber in qt4 integriert wären. Wir haben also nun QT4 als Commercial Version mit Educational license beide installiert. Allerdings scheint das ganze bei meinem Komilitionen zu funktionieren, ohne dass wir bei der Installation was anderes getan hätten!!!
Wir nutzen die Integration mit Visual Studio 2008.

Code: Alles auswählen


#include <QtGui/QApplication>
#include <QtGui/QPushButton>
#include <QtSql/QSqlDatabase>
#include <QtSql/QSqlQuery>
#include <QtCore/QVariant>
#include <QtCore/qDebug>
#include <QtGui/QTableView>
#include <QtSql/QSqlTableModel>


int main(int argc, char* argv[]){
QApplication app(argc, argv);

QSqlDatabase db = QSqlDatabase::addDatabase("QPSQL7");
db.setHostName("p***************");
db.setDatabaseName("****");
db.setUserName("*****");
db.setPassword("*****");


QTableView tableView;
QSqlTableModel model;
model.setTable("criminals");
model.select();
model.setEditStrategy(QSqlTableModel::OnFieldChange);
tableView.setModel(&model);
tableView.setWindowTitle("SQL Demonstration");
tableView.show();
return app.exec();
}
Dieser Codeschnipsel funktioniert bei meinem Kumpanen und bei mir nicht! Ich erhalte vom Compiler jedes mal folgenden Fehler:
"explorer.exe": "C:\Qt\4.4.3\plugins\sqldrivers\qsqlmysqld4.dll" wurde geladen
"explorer.exe": "C:\Qt\4.4.3\plugins\sqldrivers\qsqlmysqld4.dll" entladen.
"explorer.exe": "C:\Qt\4.4.3\plugins\sqldrivers\qsqlpsqld4.dll" wurde geladen
LDR: LdrpWalkImportDescriptor() failed to probe C:\Qt\4.4.3\plugins\sqldrivers\qsqlpsqld4.dll for its manifest, ntstatus 0xc0150002
"explorer.exe": "C:\Qt\4.4.3\plugins\sqldrivers\qsqlpsqld4.dll" entladen.
QSqlDatabase: QPSQL7 driver not loaded
QSqlDatabase: available drivers: QSQLITE QODBC3 QODBC
"explorer.exe": "C:\WINDOWS\system32\BtMmHook.dll" geladen, Die Binärdaten wurden nicht mit Debuginformationen erstellt.
Das Programm "[5164] explorer.exe: Systemeigen" wurde mit Code 0 (0x0) beendet.
Könnt ihr mir weiterhelfen?
achja wir nutzen qt 4.4.3

VG und dankeschön!
Illuminatus
Beiträge: 84
Registriert: 3. Dezember 2008 12:48

Beitrag von Illuminatus »

Achja und ich habe eben wie im QT Assistant beschrieben:
How to Build the QPSQL Plugin on Windows
Install the PostgreSQL developer libraries. Assuming that PostgreSQL was installed in C:\psql, build the plugin as follows:

cd %QTDIR%\src\plugins\sqldrivers\psql
qmake "INCLUDEPATH+=C:\psql\include" "LIBS+=C:\psql\lib\ms\libpq.lib" psql.pro
nmake
musste es wegen der ordnerstruktur leicht anpassen. allerdings ist das programm nach diesem schritt immernoch nicht lauffähig! es komtm wieder derselbe fehler. hab ich irgendwas vergessen? es kamen auch keine fehlermeldungen beim erstellen des plugins.


"explorer.exe": "C:\Qt\4.4.3\plugins\sqldrivers\qsqlmysqld4.dll" wurde geladen
"explorer.exe": "C:\Qt\4.4.3\plugins\sqldrivers\qsqlmysqld4.dll" entladen.
"explorer.exe": "C:\Qt\4.4.3\plugins\sqldrivers\qsqlpsqld4.dll" geladen, Symbole wurden geladen.
"explorer.exe": "C:\Qt\4.4.3\plugins\sqldrivers\qsqlpsqld4.dll" entladen.
QSqlDatabase: QPSQL7 driver not loaded
QSqlDatabase: available drivers: QSQLITE QODBC3 QODBC
"explorer.exe": "C:\WINDOWS\system32\BtMmHook.dll" geladen, Die Binärdaten wurden nicht mit Debuginformationen erstellt.
Das Programm "[4816] explorer.exe: Systemeigen" wurde mit Code 0 (0x0) beendet.
Es werden wieder nur 3 Treiber angezeigt....


Mir ist desweiteren folgendes aufgefallen:
Zum einen gibt es den Ordner
C:\Qt\4.4.3\plugins\sqldrivers
in dem sich verschiedene dateien mit dem präfix qsqlite4.*, qsqlmysql.*, qsqlodbc.*, qsqlpsqld.* befinden.

C:\Qt\4.4.3\src\sql\drivers\psql : hier befinden sich qsql_psql.cpp und qsql_psql.h

C:\Qt\4.4.3\src\plugins\sqldrivers\psql Hier habe ich nmake ausgeführt wie es im QTAssistent beschrieben war. Hier habe ich nun mehrere Dateien, angefangen von einer main.cpp, über makefiles, bis hin zu Ressource Dateien.


Kann mir jemand erklären wie die Ordner in Verbindung zueinander stehen?
AuE
Beiträge: 918
Registriert: 5. August 2008 10:58

Beitrag von AuE »

mach mal dort wo deine exe ist nen ordner namens "sqldrivers" und in diesen packst du dann den erstellten Treiber für deine DB.

Wundert mich nur das du den nicht mit dabei hattest, hast in dem Ordner QTDIR\plugins\sqldrivers\
keine Datei namens qsqlpsql4.dll bzw qsqlpsqld4.dll?

Dann hättest nämlich entweder nen anderen Installer als die anderen oder en Problem... Ich weiß nicht wie das bei der Education Edition ist. Ich weiß nur das ich damals ne "30-day- trial" hatte.... dort waren auch nicht alle treiber mit bei.

Schon mal probiert aus den Dateien die in dem Ordner liegen ein Projekt aufzuziehen und das zu erstellen? Evtl kommt da ja dann die benötigte DLL bei raus
Illuminatus
Beiträge: 84
Registriert: 3. Dezember 2008 12:48

Beitrag von Illuminatus »

hi doch in dem ordner QTDIR\4.4.3\plugins\sqldrivers sind die drin! ich versteh halt nicht warums bei nem kumpel funkti9oniert und bei mir nicht. wir haben bei der installation nichts anders gemacht!"
Achja, hab Qt4 und VIsual neuinstalliert und es klappt dennoch nicht.


Sind vllt irgendwelche umgebungsvariablen falsch gesetzt, dass er in dem ordner gar nciht sucht?
AuE
Beiträge: 918
Registriert: 5. August 2008 10:58

Beitrag von AuE »

startest qt auch immer über die verknüpfung von qt(aus den qt odner) oder machst´s VS einfach so auf?
Über diese .bat werden die Variablen für Qt automatisch gesetzt beim Programmstart.


wenn du die treiber hast... probier doch einfach mal aus was ich nen Post vorher getippt hab. Mach neben die exe den "sqldrivers" ordner und gucke ob er sie findet. wenn er sie dann finden kann hats was mit den umgebungsvariablen zu tun wenn nicht.... mhhhhh...
Illuminatus
Beiträge: 84
Registriert: 3. Dezember 2008 12:48

Beitrag von Illuminatus »

hi
jo das hab ich probiert aber das klappt nicht. er bringt die selber fehlermeldung...
VG
marc
AuE
Beiträge: 918
Registriert: 5. August 2008 10:58

Beitrag von AuE »

Code: Alles auswählen

QSqlDatabase db = QSqlDatabase::addDatabase("QPSQL7");
woher hast den QPSQL7???? Den seh ich nirgends in der Doku....

Code: Alles auswählen

  QSqlDatabase db = QSqlDatabase::addDatabase("QPSQL");
     db.setHostName("acidalia");
     db.setDatabaseName("customdb");
     db.setUserName("mojito");
     db.setPassword("J0a1m8");
     bool ok = db.open();

QPSQL muss der Treiber doch heißen
Illuminatus
Beiträge: 84
Registriert: 3. Dezember 2008 12:48

Beitrag von Illuminatus »

hi jo sry, habs mit beiden ausprobiert weil im inet und in büchern beispiele mit beiden treiber standen! aber er findet ja keinen davon.... :? wir habens jetzt sogar auf nem dritten rechner installiert und dort wird er gefunden...also ich bin ernsthaft planlos!!!
AuE
Beiträge: 918
Registriert: 5. August 2008 10:58

Beitrag von AuE »

Sprich auf 2 rechnern gehts auf dem 3 (deinen) nicht???? und die sind alle gleich konfiguriert? Wann kommen die Fehlermeldungen in der Ausgabe? Direkt nach

Code: Alles auswählen

QSqlDatabase::addDatabase("QPSQL");
das aber wirklich sehr sehr seltsam.

Mir fallen nur die Folgenden Möglichkeiten ein...

1) Qt und die Qt VS Integration für MS runter und neu drauf ballern
2) Checken ob .NET Framework mit richtigen SP drauf ist
3) Qt nur über die .bat starten
4) "sqldrivers" Ordner neben die exe kopieren


aber so wie ich das sehe gehts mit keiner von den Dingern-hast schon mal probiert ein neues Projekt aufzusetzen und dot dann ausdrücklich das QSql Modul mit hinzuzufügen?
Illuminatus
Beiträge: 84
Registriert: 3. Dezember 2008 12:48

Beitrag von Illuminatus »

jo hab ich au schon, hab auch schon neu installiert! kann es sein dass durch das neu kompilieren der aktuellen libpq klassen jedesmal was schiefgegangen ist? oder irgendwelche umgebungsvariablen nicht/falsch gesetzt wurden?

kann ich irgendwie die umgebungsvariablen von qt/ms vs compiler überprüfen?

und bei hat das neu erstellen des treiber mit den postgre bibliotheken ja funktioniert (bzw. keine fehler aufgeworden), wieso findet er dann diese nicht???
Illuminatus
Beiträge: 84
Registriert: 3. Dezember 2008 12:48

Beitrag von Illuminatus »

hi also mittlerweile sind wir immer noch an dem projekt und es ist wirklich so, dass es auf 2 rechnenr läuft und auf einem laptop nicht! allerdings funktioniert es auf diesem einen rechner nur nicht , wenn der debug modus beim erstellen eingeschaltet ist. macht man das auf release dann funktioniert es!!! wisst ihr woran dies liegen könnte?
peter999
Beiträge: 24
Registriert: 12. Januar 2006 11:28

Beitrag von peter999 »

Generell sind die plugins unter Windows recht wählerisch. Microsoft hat aus der DLL-Hell eine Manifest-Hell gemacht...

als erstes solltest Du wie in der Doku angegeben (DEPLOY) den Schalter
CONFIG-=embed_dll_manifest (sieh mal dort nach der exakten Doku) in die .PRO-Datei einfügen, danach qmake aufrufen und nochmals NMAKE.

Debug-Dlls kannst Du nicht veröffentlichen, wenn auf dem Zielrechner nicht das richtige Visual C installiert ist, denn Microsoft erlaubt nicht, die Debug-Dlls auf einem beliebigen Rechner zu installieren. Also, wenn Du mal Debug-Infos brauchst, nimm DBGVIEW und qDebug() << debugtxt in den Sourcen...

Anscheinend ist aber das Plugin (weder Debug noch Release) lt. deines Beitrags nicht erzeugt worden, sonst wäre er unter c:\qt\qt4.4.3\plugins\sqldrivers aufgetaucht.

Du musst Postgresql mit "Include" und "Libs", also mit Development Dateien installieren, sonst kannst Du das entsprechende Plugin nicht erzeugen....

Der Aufruf muss

QSqlDatabase db = QSqlDatabase::addDatabase("QPSQL");

so lauten, die beiden Plugins heißen dann:

qsqlpsqld4.dll
qsqlpsql4.dll

Die Fehlermeldung lautet auf QPSQL7 !!

P.S. PostgreSql ist für Windows ab Version 8.2 freigegeben, also das Entwicklungsset aus der aktuellen 8.3.6

Hole Dir das unter:
http://wwwmaster.postgresql.org/downloa ... .3.6-2.zip
Illuminatus
Beiträge: 84
Registriert: 3. Dezember 2008 12:48

Beitrag von Illuminatus »

hi doch in dem verzeichnis finden sich diese beiden dateien bereits!!! beim ausführen mit release funktioniert es auch nur wenn ich das programm mit dem punkt "debug" erstell, klappt es nicht
peter999
Beiträge: 24
Registriert: 12. Januar 2006 11:28

Beitrag von peter999 »

Nochmals:

Trotzdem ist das der QSqlDatabase Aufruf:

QSqlDatabase db = QSqlDatabase::addDatabase("QPSQL");

nicht QPSQL7 !
Illuminatus
Beiträge: 84
Registriert: 3. Dezember 2008 12:48

Beitrag von Illuminatus »

achsoo ja das weis ich =) hab ich mittlerweile auch geändert... ja ich hab das mit dem erstellen schonmal versucht, nur hat dann gar nichts mehr getan, weder beim debug noch beim release! wie sieht das denn aus wenn ich mir ne exe erstellt hab, reicht das wenn ich diese 2 dlls ins programmverzeichnis mitnehm?



Achja: ich hab die commercial educational edition!
Antworten