QT PostgreSQL Verbindung
-
Hört sich logisch an, für einen Anfänger aber verwirrend...
Also...
Projekt (rechte Maustaste)->Properties->Linker->Input->Additional Dependencies
Dort eingetragen: "C:\Program Files\PostgreSQL\9.0\lib";
key.cpp (rechte Maustaste)->Configuration Properties->C/C++->General->Additional Include Directories
Dort eingetragen: "C:\Program Files\PostgreSQL\9.0\include";
key.cpp (rechte Maustaste)->Configuration Properties->C/C++->General->Additional #using Directories
Dort eingetragen: "C:\Program Files\PostgreSQL\9.0\bin";
Ergebnis:
LINK : fatal error LNK1104: cannot open file 'C:\Program Files\PostgreSQL\9.0\lib.obj'
Was muss wo stehen?
-
Bei "Additional Dependencies" mußt du den konkreten Namen der Bibliothek (lib) eintragen (nicht den Pfad), also "qsqlite".
Aber dies hattest du doch selbst zitiert
-
Was ich zitiert habe, stammt aus dem Jahr 2007 und bezieht sich auf C & Visual Studio 2005. Ich nutze C++ & Visual Studio 2013 & Qt passend dazu.
Aber welche lib muss ich dort eintragen? Ich habe nun nicht den Pfad sondern jede .lib aus diesem Ordner dort eingetragen:
"C:\Program Files\PostgreSQL\9.0\lib\libecpg_compat.lib"; "C:\Program Files\PostgreSQL\9.0\lib\libecpg.lib";" C:\Program Files\PostgreSQL\9.0\lib\libpgtypes.lib"; "C:\Program Files\PostgreSQL\9.0\lib\libpq.lib"; "C:\Program Files\PostgreSQL\9.0\lib\libpgport.lib"; "C:\Program Files\PostgreSQL\9.0\lib\postgres.lib";
Dann erhalte ich aber wieder den Fehler:
1>key.obj : error LNK2019: unresolved external symbol _PQconnectdb referenced in function "public: __thiscall key::key(class QWidget *)" (??0key@@QAE@PAVQWidget@@@Z) 1>key.obj : error LNK2019: unresolved external symbol _PQstatus referenced in function "public: __thiscall key::key(class QWidget *)" (??0key@@QAE@PAVQWidget@@@Z) 1>M:\Dokumente - C++\Visual Studio 2013\key\Win32\Debug\\key.exe : fatal error LNK1120: 2 unresolved externals
Wie kann ich eine Verbindung zur postgresql Datenbank einrichten?
-
Neuer Versuch mit Visual Studio 2013 (64bit) & QT 5.3.1 (32bit) als Addin auf eine lokal installierte PostgreSQL 9.0 (32bit) Datenbank zuzugreifen.
Einstellungen in Visual Studio 2013
a) Properties->C/C++->General->Additional Include Directories: "C:\Program Files\PostgreSQL\9.0\include";
b) Properties->Linker->General-> Additional Libary Directories: "C:\Program Files\PostgreSQL\9.0\lib";
c) Properties->Linker->Input->Additional Dependencies: libpq.libDann habe ich noch folgende files kopiert...
a)
Von... C:\Program Files\PostgreSQL\9.0\bin nach.. Visual-Studio-Projekt\Win32\Debug und nach... Visual-Studio-Projekt\Win32\Release libeay32.dll libiconv-2.dll libintl-8.dll libpq.dll libxml2.dll libxslt.dll ssleay32.dll zlib1.dll
b)
Von... C:\Qt\Qt5.3.1\5.3\msvc2013\plugins\sqldrivers nach.. Visual-Studio-Projekt\Win32\Debug und nach... Visual-Studio-Projekt\Win32\Release qsqlpsql.dll
mein key.cpp code:
#include "key.h" #include <libpq-fe.h> key::key(QWidget *parent) : QMainWindow(parent) { ui.setupUi(this); // postgresql database connection PGconn *dbconn = NULL; PGresult *query; dbconn = PQconnectdb("user=postgres password=dbpass dbname=4DB hostaddr=localhost port=5432"); if (PQstatus(dbconn) == CONNECTION_BAD) { ui.label->setText("Connection Failed!"); } if (PQstatus(dbconn) != CONNECTION_BAD) { ui.label->setText("Connected"); } }
Und ich erhalte wieder den Fehler:
1>key.obj : error LNK2019: unresolved external symbol _PQconnectdb referenced in function "public: __thiscall key::key(class QWidget *)" (??0key@@QAE@PAVQWidget@@@Z) 1>key.obj : error LNK2019: unresolved external symbol _PQstatus referenced in function "public: __thiscall key::key(class QWidget *)" (??0key@@QAE@PAVQWidget@@@Z) 1>M:\Dokumente - C++\Visual Studio 2013\key\Win32\Debug\\key.exe : fatal error LNK1120: 2 unresolved externals
-
CodePerfect schrieb:
c) Properties->Linker->Input->Additional Dependencies: libpq.lib
Prüf das nochmal nach.
Kompilierst du dein Programm denn auch im 32-bit-Modus, wenn du schon die Libs nur in 32-bit hast?
-
Hallo,
ja...Debug/Win32
Ich fasse meinen aktuellen Lösungsweg noch einmal zusammen:
Folgende Installation unter Windows 8.1 (64bit) mit Visual Studio 2013...
a) Qt 5.3.1 for Windows 32-bit (VS 2013, 559 MB)
b) Visual Studio Add-in 1.2.3 for Qt5Visual Studio 2013 läuft mit Qt und ich habe ein erstes Qt GUI mit einem Button (objectName->pushButton) und einem Label (objectName->label) gebaut.
In MyApp.h steht nun folgendes:
#ifndef MyApp_H #define MyApp_H #include <QtWidgets/QMainWindow> #include "ui_MyApp.h" #include <QSqlDatabase> #include <QtSql> class MyApp : public QMainWindow { Q_OBJECT public: MyApp(QWidget *parent = 0); ~MyApp(); private: Ui::MyAppClass ui; // begin new code public slots: void on_pushButton_clicked() { QSqlDatabase db = QSqlDatabase::addDatabase("QPSQL"); db.setHostName("localhost"); db.setDatabaseName("4DB"); db.setUserName("postgres"); db.setPassword("dbpass"); if (!db.open()) ui.label->setText("Connection Failed!"); else ui.label->setText("Connected"); } // end new code }; #endif // MyApp_H
Der Visual Studio Fehler im Debug Mode lautet:
'MyApp.exe' (Win32): Loaded 'C:\Qt\Qt5.3.1\5.3\msvc2013\plugins\sqldrivers\qsqlpsqld.dll'. Symbols loaded. 'MyApp.exe' (Win32): Unloaded 'C:\Qt\Qt5.3.1\5.3\msvc2013\plugins\sqldrivers\qsqlpsqld.dll' QSqlDatabase: QPSQL driver not loaded QSqlDatabase: available drivers: QSQLITE QMYSQL QMYSQL3 QODBC QODBC3 QPSQL QPSQL7
GUI läuft, Verbindung klappt nicht. Nun habe ich viel recherchiert und einiges versucht. U.a. habe ich in den Visual Studio 2013 Projekteinstellungen folgendes eingetragen...
a) Properties->C/C++->General->Additional Include Directories: "C:\Program Files\PostgreSQL\9.0\include";
b) Properties->Linker->General-> Additional Libary Directories: "C:\Program Files\PostgreSQL\9.0\lib";
c) Properties->Linker->Input->Additional Dependencies: libpq.libAuch habe ich einmal die .dll der PostgreSQL Installation in andere Verzeichnisse kopiert...
Von... C:\Program Files\PostgreSQL\9.0\bin nach.. Visual-Studio-Projekt\Win32\Debug und nach... Visual-Studio-Projekt\Win32\Release libeay32.dll libiconv-2.dll libintl-8.dll libpq.dll libxml2.dll libxslt.dll ssleay32.dll zlib1.dll
Egal was ich mache, die Verbindung klappt nicht
-
Ich werd es heute Abend daheim mal nach deiner Vorgehensweise testen.
Aber wenigstens funktioniert jetzt das Kompilieren.
Edit: Sorry, verpeilt... Muss Qt und PostgreSQL noch installieren, wird wohl erst später ^^
-
Das würde mich freuen...Gruss
-
Das würde mich freuen...Gruss
-
Sorry, ich schaff es nicht so richtig, das Qt Addin zu installieren. Bekomme zwar das Qt Menü in VS, aber keine Projekt Templates.. Kann also keine Qt Projekte anlegen.