Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. QPSQL driver - Postgresql 9 & Windows 7
QtWS25 Last Chance

QPSQL driver - Postgresql 9 & Windows 7

Scheduled Pinned Locked Moved General and Desktop
17 Posts 9 Posters 21.7k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • H Offline
    H Offline
    hsfougaris
    wrote on 1 Apr 2011, 16:19 last edited by
    #1

    After getting a new PC I didn't backup the PSQL driver I managed to compile with a lot of heartache, and now I have to it again. Since the instructions are practically non existent for my setup (which I would have thought is very common), and there are numerous posts on the Internet with people trying to get it to work, each one trying something different, I'll try to get some help here, and if resolved maybe make a wiki out of it to solve the confusion.

    My environment is like this:

    • Windows 7 64 bit
    • PostgreSQL 9 64 bit [prepackaged and downloaded from EnterpriseDB] (installed locally)
    • QtCreator 2.1 (using minigw32)
    • Qt 4.7.2 [pre-built versions from qt.nokia.com].

    PostgreSQL is installed at C:\PSQL
    Qt is installed at C:\Qt\4.7.2

    My actions have been as follows:

    1. Add C:\PSQL\bin to the system path

    As I need to convert the libpq.lib to a format that can be used by mingw32:

    1. Downloaded the mingw-utils package and copied reimp.exe to C:\Qt\4.7.2\bin
    2. CD C:\PSQL\lib
    3. REIMP -d libpq.lib (this creates a file libpq.def)
    4. DLLTOOL --input-def libpq.def -dllname libpq.dll --output-lib libpq.a -k (this creates a file libpq.a)
    5. CD C:\Qt\4.7.2\src\plugins\sqldrivers\psql
    6. qmake "INCLUDEPATH+=C:\PSQL\include" "LIBS+=C:\PSQL\lib\libpq.a" psql.pro
    7. mingw32-make debug
    8. mingw32-make release

    The compilation gives some warnings
    @
    ......\sql\drivers\psql\qsql_psql.cpp: In member function 'virtual QSqlIndex QPSQLDriver::primaryIndex(const QString&) const':
    ......\sql\drivers\psql\qsql_psql.cpp:979: warning: enumeration value 'VersionUnknown' not handled in switch
    ......\sql\drivers\psql\qsql_psql.cpp: In member function 'virtual QSqlRecord QPSQLDriver::record(const QString&) const':
    ......\sql\drivers\psql\qsql_psql.cpp:1056: warning: enumeration value 'VersionUnknown' not handled in switch
    @
    but they seem harmless to me, as the DLLs are generated ok (libqsqlpsqld4.a & qsqlpsqld4.dll in the debug folder, and libqsqlpsql4.a & qsqlpsql4.dll in the release folder).

    At this stage, I also delete anything related to qsqlpsql in the QtPluginCache in the registry (HKCU\Software\Trolltech\OrganizationDefaults..).

    Copying them to C:\Qt\4.7.2\plugins\sqldrivers, I get a driver not loaded when trying to use it (my application has another QODBC connection that works fine).
    If I use
    @
    qputenv("QT_DEBUG_PLUGINS", QByteArray("1")
    @
    in my code,
    I get in the debug output:
    @
    QFactoryLoader::QFactoryLoader() looking at "C:/Qt/4.7.2/plugins/sqldrivers/qsqlpsqld4.dll"
    "Cannot load library C:/Qt/4.7.2/plugins/sqldrivers/qsqlpsqld4.dll: "
    could not load
    @

    I open the dll with dependencywalker.exe and I get the following in the log:
    @Error: At least one module has an unresolved import due to a missing export function in an implicitly dependent module.
    Error: Modules with different CPU types were found.
    Warning: At least one delay-load dependency module was not found.
    Warning: At least one module has an unresolved import due to a missing export function in a delay-load dependent module.@
    Looking at the modules:

    • It cannot find one dll (IESHIMS.DLL)
    • on all non-Qt DLLs x64 (under CPU) is shown in red
    • the link checksum of QTCORE4.DLL is in red

    These don't seem serious enough to me, and to be sure, I open QSQLODBC4.DLL with dependencywalker.exe, because I know it's working:

    • I get the exact errors in the log and information in the modules (the cpu red, and red linkage on qtcore).

    Can someone please help?

    If you can't say what you mean, you'll never be able to mean what you say.

    1 Reply Last reply
    0
    • H Offline
      H Offline
      hsfougaris
      wrote on 1 Apr 2011, 16:48 last edited by
      #2

      Is it possible that it could be a 32/64 bit issue?
      I noticed that the QSQLPSQL4.dll is 32 bit, but links to LIBPQ.DLL which is 64 bit (and some other system 64 bit dlls), and QTSQL4+QTCORE4+LIBGCC_S_DW2-1 which are 32 bit.

      On the other hand, the same seems to be true for QSQLODBC4 (it's 32 bit, linked to ODBC32 (which is strangely a 64bit DLL), and the rest like QSQLPSQL...

      If you can't say what you mean, you'll never be able to mean what you say.

      1 Reply Last reply
      0
      • H Offline
        H Offline
        hsfougaris
        wrote on 1 Apr 2011, 18:40 last edited by
        #3

        I seem to be getting somewhere...
        It's definitely some mess with the 64 bit version of Postgresql.
        I

        • downloaded and installed the 32 bit version in a folder named C:\PSQL32

        • changed the PATH variable to C:\PSQL32\BIN

        • repeated the exact procedure as above (but using C:\PSQL32\lib) and everything worked like a charm.

        -> This PSQL driver can connect to both the 32 bit server and the 64 bit server

        -> I tried to be clever and remove the 32 bit version and change the PATH to C:\PSQL\BIN (the 64 bit), but it didn't work.

        So it doesn't like Qt can compile or use the 64 bit library that comes with the prepackaged 64 bit Postgresql...

        If you can't say what you mean, you'll never be able to mean what you say.

        1 Reply Last reply
        0
        • A Offline
          A Offline
          andre
          wrote on 2 Apr 2011, 07:32 last edited by
          #4

          I think you can link against the 64 bit version, but you need to use a 64 bit version of Qt and a 64 bit toolchain for that. I did the same for MySql once, and that worked.

          1 Reply Last reply
          0
          • H Offline
            H Offline
            hsfougaris
            wrote on 2 Apr 2011, 07:38 last edited by
            #5

            That would mean building Qt, right?
            I don't see a pre-packaged Qt SDK for Windows 64 available.

            If you can't say what you mean, you'll never be able to mean what you say.

            1 Reply Last reply
            0
            • Z Offline
              Z Offline
              ZapB
              wrote on 2 Apr 2011, 08:07 last edited by
              #6

              Yes that is correct. You will need to build Qt. It's easy to do though.

              Nokia Certified Qt Specialist
              Interested in hearing about Qt related work

              1 Reply Last reply
              0
              • H Offline
                H Offline
                hsfougaris
                wrote on 2 Apr 2011, 08:13 last edited by
                #7

                I've managed to avoid it so far, so it make me nervous [plus I don't know where to start, but google is your friend] :)

                I'm guessing I'll be able to build both 32 bit and 64 bit executables from this build, or do I need to hold on to my existing SDK for 32 bit?

                If you can't say what you mean, you'll never be able to mean what you say.

                1 Reply Last reply
                0
                • Z Offline
                  Z Offline
                  ZapB
                  wrote on 2 Apr 2011, 08:25 last edited by
                  #8

                  I think you would be best to build the 64-bit version of Qt in a new directory. That way you can keep your existing 32-bit install working. They can live perfectly happy side by side. So in the end you coudl have dirs like this:

                  @
                  C:\Qt\4.7.2-x86
                  C:\Qt\4.7.2-x64
                  @

                  or whatever you choose to name the directories as. Then to build against one or the other just be sure to use the corresponding version of qmake form within the appropriate directory.

                  There should be plenty of docs on how to configure and build Qt on Windows both in the official Qt docs and on devnet.

                  Nokia Certified Qt Specialist
                  Interested in hearing about Qt related work

                  1 Reply Last reply
                  0
                  • T Offline
                    T Offline
                    topocc
                    wrote on 25 Mar 2013, 22:38 last edited by
                    #9

                    've solved the problem, I'm in the same.

                    1 Reply Last reply
                    0
                    • R Offline
                      R Offline
                      Rodrigocg
                      wrote on 28 Mar 2013, 00:33 last edited by
                      #10

                      https://sites.google.com/site/qxormpostgres/generar-driver-postgres-qt

                      1 Reply Last reply
                      0
                      • R Offline
                        R Offline
                        Rodrigocg
                        wrote on 28 Mar 2013, 00:36 last edited by
                        #11

                        GCC 32bit requires 32bit postgres.

                        1 Reply Last reply
                        0
                        • B Offline
                          B Offline
                          bjanuario
                          wrote on 1 Apr 2013, 10:41 last edited by
                          #12

                          You will need to compile the drivers, then you will get into plugin Qt dir the files libqsqlpsql.so and or qsqlpsql4.dll if windows, then the files libpq.so, libpq.so.5 and libpq.so.5.4 sould go to your lib folder ex(/usr/lib).

                          1 Reply Last reply
                          0
                          • T Offline
                            T Offline
                            topocc
                            wrote on 11 Apr 2013, 20:28 last edited by
                            #13

                            mingw compile postgres with fixed and so the driver can generate.

                            1 Reply Last reply
                            0
                            • L Offline
                              L Offline
                              lavds
                              wrote on 7 May 2013, 07:38 last edited by
                              #14

                              I have x32 postgres 9.2
                              I try make QPSQL driver, and receive this error. ????

                              @C:\QtSDK\QtSources\4.8.1\src\plugins\sqldrivers\psql>qmake -o Makefile "INCLUDEP
                              ATH+=C:\PostgreSQL\9.2\include" "LIBS+=C:\PostgreSQL\9.2\lib\libpq.a" psq
                              l.pro
                              Qt: Untested Windows version 6.2 detected!

                              C:\QtSDK\QtSources\4.8.1\src\plugins\sqldrivers\psql>make
                              make -f Makefile.Debug
                              make[1]: Entering directory C:/QtSDK/QtSources/4.8.1/src/plugins/sqldrivers/psq l' g++ -c -g -frtti -fexceptions -mthreads -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT - DQT_NO_CAST_TO_ASCII -DQT_NO_CAST_FROM_ASCII -DQT_DLL -DQT_PLUGIN -DQT_SQL_LIB - DQT_CORE_LIB -DQT_HAVE_MMX -DQT_HAVE_SSE -DQT_HAVE_MMXEXT -DQT_HAVE_SSE2 -DQT_TH READ_SUPPORT -I"c:\QtSDK\Symbian\SDKs\Symbian1Qt473\include\QtCore" -I"c:\QtSDK\ Symbian\SDKs\Symbian1Qt473\include\QtSql" -I"c:\QtSDK\Symbian\SDKs\Symbian1Qt473 \include" -I"c:\PostgreSQL\9.2\include" -I"c:\Program" -I"Files\PostgreSQL\9.2\i nclude" -I"c:\QtSDK\Symbian\SDKs\Symbian1Qt473\include\ActiveQt" -I"debug" -I"c: \QtSDK\Symbian\SDKs\Symbian1Qt473\mkspecs\default" -o debug\main.o main.cpp g++: CreateProcess: No such file or directory make[1]: *** [debug/main.o] Error 1 make[1]: Leaving directory C:/QtSDK/QtSources/4.8.1/src/plugins/sqldrivers/psql
                              '
                              make: *** [debug] Error 2@

                              1 Reply Last reply
                              0
                              • A Offline
                                A Offline
                                angelicaP
                                wrote on 1 Jun 2013, 21:12 last edited by
                                #15

                                after i run C:[Qt dir]\Src\qtbase\src\plugins\sqldrivers\psql>mingw32-make

                                i get this error:

                                mingw32-make -f Makefile.Release all
                                mingw32-make[1]: Entering directory 'C:/Qt/Qt5.0.2/5.0.2/Src/qtbase/src/plugins/
                                sqldrivers/psql'
                                g++ -c -pipe -fno-keep-inline-dllexport -O2 -std=c++0x -fno-exceptions -frtti -W
                                all -Wextra -DUNICODE -DQT_NO_CAST_TO_ASCII -DQT_NO_CAST_FROM_ASCII -DQT_NO_EXCE
                                PTIONS -DQT_NO_DEBUG -DQT_PLUGIN -DQT_SQL_LIB -DQT_CORE_LIB -I. -I"C:\program" -
                                I"files\postgresql\9.2\include" -I"C:\Qt\Qt5.0.2\5.0.2\mingw47_32\include" -I"C:
                                \Qt\Qt5.0.2\5.0.2\mingw47_32\include\QtSql" -I"C:\Qt\Qt5.0.2\5.0.2\mingw47_32\in
                                clude\QtSql\5.0.2" -I"C:\Qt\Qt5.0.2\5.0.2\mingw47_32\include\QtSql\5.0.2\QtSql"
                                -I"C:\Qt\Qt5.0.2\5.0.2\mingw47_32\include\QtCore" -I".moc\release_shared" -I"..
                                ......\mkspecs\win32-g++" -o .obj\release_shared\qsql_psql.o ......\sql\driv
                                ers\psql\qsql_psql.cpp
                                ......\sql\drivers\psql\qsql_psql.cpp:58:22: fatal error: libpq-fe.h: No such
                                file or directory
                                compilation terminated.
                                Makefile.Release:483: recipe for target '.obj/release_shared/qsql_psql.o' failed

                                mingw32-make[1]: *** [.obj/release_shared/qsql_psql.o] Error 1
                                mingw32-make[1]: Leaving directory 'C:/Qt/Qt5.0.2/5.0.2/Src/qtbase/src/plugins/s
                                qldrivers/psql'
                                makefile:38: recipe for target 'release-all' failed
                                mingw32-make: *** [release-all] Error 2

                                any idea how to get over? the QPSQL driver is not loaded yet.

                                1 Reply Last reply
                                0
                                • C Offline
                                  C Offline
                                  CMEXOTA
                                  wrote on 5 Feb 2015, 07:35 last edited by
                                  #16

                                  [quote author="angelicaP" date="1370121154"]
                                  any idea how to get over? the QPSQL driver is not loaded yet. [/quote]

                                  Any luck solving the problem?

                                  1 Reply Last reply
                                  0
                                  • C Offline
                                    C Offline
                                    CMEXOTA
                                    wrote on 5 Feb 2015, 07:35 last edited by
                                    #17

                                    [quote author="angelicaP" date="1370121154"]
                                    any idea how to get over? the QPSQL driver is not loaded yet. [/quote]

                                    Any luck solving the problem?

                                    1 Reply Last reply
                                    0

                                    • Login

                                    • Login or register to search.
                                    • First post
                                      Last post
                                    0
                                    • Categories
                                    • Recent
                                    • Tags
                                    • Popular
                                    • Users
                                    • Groups
                                    • Search
                                    • Get Qt Extensions
                                    • Unsolved