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

    Dann 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 Qt5

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

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


Anmelden zum Antworten