2019-06-21

Postgres SQL 和 QT

用QT在Windows系統上寫資料庫應用程式有點煩人,不是QT不好用,而是SqlDriver的問題。

#include
#include
#include

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    QSqlDatabase db = QSqlDatabase::addDatabase("QPSQL");
    db.setHostName("localhost");
    db.setDatabaseName("lab");
    db.setUserName("dbuser");
    db.setPassword("dbpw");
    if (! db.open()) {
        qDebug()<<"DB connection error; " << db.lastError().text();
    }
    return a.exec();
}


 
編譯執行後,出現
QSqlDatabase: QPSQL driver not loaded

原因是因為 QT 沒有將必要的DLL放在程式目錄內,解決之道有幾個,第一個是到 Postgres SQL目錄下的bin把下列幾個檔案複製到新創的專案目錄去


libeay32.dll
libiconv-2.dll
libintl-8.dll
libpq.dll
ssleay32.dll

另外,依照專案編譯的形式,還要把
qsqlpsql.dll (Release)
qsqlpsqld.dll (Debug)
複製到專案目錄去


第二個比較簡單,把Postgres SQL的bin目錄設定到Windows的path即可,但這只是可以在開發者的電腦上執行,打包給用戶時,還是要把必要的DLL複製進來才行。