Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. Qt application crashing when using ODBC driver (macOS)
Qt 6.12 LTS is out! See what's new in the release blog

Qt application crashing when using ODBC driver (macOS)

Scheduled Pinned Locked Moved Unsolved General and Desktop
20 Posts 6 Posters 7.6k Views 1 Watching
  • 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.
  • SGaistS Offline
    SGaistS Offline
    SGaist
    Lifetime Qt Champion
    wrote on last edited by
    #10

    what do you get if you call which qmake ?

    To be sure to use the right one, you should use the full path to the binary.

    Interested in AI ? www.idiap.ch
    Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

    1 Reply Last reply
    0
    • B Offline
      B Offline
      br4in
      wrote on last edited by
      #11

      Thank you so much ,
      it turns out that my terminal is using another qmake , it worked when i used the full path.

      so i builded the iODBC driver with this command line :
      /Users/br4in/Qt5.6.2/5.6/clang_64/bin/qmake "INCLUDEPATH+=/usr/local/iODBC/include" "LIBS+=-L/usr/local/iODBC/lib -liodbc"

      it gave no errors , but the app is still crashing when i use the ODBC driver.

      it seems like an issue with QODBC , can you give me the tutorial to workaround the bug ?

      1 Reply Last reply
      0
      • SGaistS Offline
        SGaistS Offline
        SGaist
        Lifetime Qt Champion
        wrote on last edited by
        #12

        Just apply the patch you can find here and rebuild the driver.

        Interested in AI ? www.idiap.ch
        Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

        1 Reply Last reply
        1
        • B Offline
          B Offline
          br4in
          wrote on last edited by
          #13

          I applied the patch , rebuilded the driver and my code.
          but the issue isn't fixed yet :(

          1 Reply Last reply
          0
          • hskoglundH Offline
            hskoglundH Offline
            hskoglund
            wrote on last edited by hskoglund
            #14

            Hi, it might be something with Oracle's .dylib for ODBC, which .dylib/client do you use?

            Qt's libqsqlodbc.dylib works fine for me, but I use it for MS SQLServer together with FreeTDS (libtdsodbc.so). Also in my Qt 5.7 libqsqlodbc.dylib was included so I didn't had to build it myself.

            Edit: looked at the crash screen above, it indeed seems that the crash is where @SGaist 's patch should help. You could try to patch again, but this time just comment out the whole function, something like this:

            static QString qWarnODBCHandle(int handleType, SQLHANDLE handle, int *nativeCode = 0)
            {
                return "";
            }
            

            That function just returns an additional diagnostic error message, so it's not really needed :-)

            1 Reply Last reply
            0
            • B Offline
              B Offline
              br4in
              wrote on last edited by
              #15

              Hey , I commented the whole function as you said , except the two above lines :
              QString result;
              return result; (because if i type return " " , i will get a constructor error)
              then i rebuilded the driver and started a new project with the same code.

              the problem wasn't resolved . Maybe my libqsqlodbc.dylib is executing a different qsql_odbc.cpp file ?

              1 Reply Last reply
              0
              • SGaistS Offline
                SGaistS Offline
                SGaist
                Lifetime Qt Champion
                wrote on last edited by
                #16

                Did you install the driver ?

                Interested in AI ? www.idiap.ch
                Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                1 Reply Last reply
                0
                • SGaistS Offline
                  SGaistS Offline
                  SGaist
                  Lifetime Qt Champion
                  wrote on last edited by
                  #17

                  Can you check again with 5.8 ?

                  Interested in AI ? www.idiap.ch
                  Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                  1 Reply Last reply
                  0
                  • M Offline
                    M Offline
                    Mohammad Kanan
                    wrote on last edited by Mohammad Kanan
                    #18

                    Steps to activate/test QODBC on Mac OS ((Seirra) towards MSSQL or any other ODBC DB:

                    Symptom 1: Qt Creator Run (Debug): application crashes (program unexpectedly finished/crashed).
                    Symptom 2: Qt Creator with pre-built Qt packages (Qt installed with MaintenanceTool).

                    Symptom 3: freeTDS driver (libtdsodbc.so) is missing after installing freeTDS packages.

                    Symptom 4: Qt built/configured before installing unixODBC.

                    1. Download and install unixODBC (must be done before installing freeTDS)
                      Go -- > (www.unixODBC.org) / (Drivers) / (unixODBC-2.3.4.tar.gz)
                      unzip and untar the packages.
                      (Make sure you have write permissions otherwise run below last command with sudo prefix)
                    ./configure --prefix=/usr/local/unixODBC
                    make
                    sudo make istall
                    
                    1. Download and install freeTDS:
                      Go --> (http://www.freetds.org/) / ( Quick Links) / (Latest Versions) / (Stable Release)
                      untar/unzip the package.
                    ./configure --prefix=/usr/local/freeTDS --with-unixodbc=/usr/local/unixODBC/
                    make
                    sudo make install
                    

                    Note:
                    --with-unixodbc will cause the driver (libtdsodbc.so) to be installed.

                    1. Unfortunately, possibly the ODBC plugin on Qt should be rebuilt:

                    Note: If you are using the prebuilt Qt libraries, you will need to download sources using MaintenanceTool ($QTDIR/MaintenanceTool.app)

                    • Tell qmake where to find the unixODBC header files and shared libraries (here it is assumed that unixODBC is installed in /usr/local/unixODBC) and run make:
                    cd $QTDIR/qtbase/src/plugins/sqldrivers/odbc
                    

                    my case:

                    cd /usr/local/Qt/5.9.1/Src/qtbase/src/plugins/sqldrivers/odbc
                    
                    qmake "INCLUDEPATH+=/usr/local/unixODBC/include" "LIBS+=-L/usr/local/unixODBC/lib -lodbc"
                    make
                    

                    if that goes correctly: you will get complied QODBC new libs:

                    cd ../plugins/sqldrivers/
                    

                    copy the new packages for example to :

                    /usr/local/Qt/5.9.1/clang_64/plugins/sqldrivers/
                    
                    1. Configure /etc/local/unixODBC/etc/odbc.ini (you might need root permissions to mdify)
                      (No need to configure freeTDS):

                    (which port ? which version -> Run /usr/local/freeTDS/bin/tsql -LH 192.168.x.x
                    Create/Modify entry in /usr/local/unixODBC/etc/odbc.ini

                    [MYDSN]
                    
                    Driver = /usr/local/freeTDS/lib/libtdsodbc.0.so
                    
                    Server = 192.168.x.x
                    
                    Port = 51271
                    
                    1. In Qt project:
                    QSqlDatabase mydb = QSqlDatabase::addDatabase("QODBC");
                    
                    mydb.setDatabaseName("MYDSN")
                    
                    mydb.setUserName("name on Database");
                    
                    mydb.setPassword(" password on Database");
                    mydb.open()
                    

                    (Luck && !alas) = true.

                    1 Reply Last reply
                    2
                    • J Offline
                      J Offline
                      julrich
                      wrote on last edited by
                      #19

                      To make the plugin link against unixodbc, I had to replace -liodbc with -lodbc in the configure.json file in the sqldrivers directory before following the instructions in the documentation (done with Qt 5.12.3).

                      So the complete steps for me were:

                      $ brew install unixodbc
                      $ cd path/to/Qt/5.12.3/Src/qtbase/src/plugins/sqldrivers
                      $ sed -i -e 's/-liodbc/-lodbc/' configure.json
                      $ qmake -- ODBC_PREFIX=/usr/local/Cellar/unixodbc/2.3.7
                      $ make sub-odbc
                      $ cp plugins/sqldrivers/libqsqlodbc* path/to/Qt/5.12.3/plugins/sqldrivers
                      
                      O 1 Reply Last reply
                      5
                      • J julrich

                        To make the plugin link against unixodbc, I had to replace -liodbc with -lodbc in the configure.json file in the sqldrivers directory before following the instructions in the documentation (done with Qt 5.12.3).

                        So the complete steps for me were:

                        $ brew install unixodbc
                        $ cd path/to/Qt/5.12.3/Src/qtbase/src/plugins/sqldrivers
                        $ sed -i -e 's/-liodbc/-lodbc/' configure.json
                        $ qmake -- ODBC_PREFIX=/usr/local/Cellar/unixodbc/2.3.7
                        $ make sub-odbc
                        $ cp plugins/sqldrivers/libqsqlodbc* path/to/Qt/5.12.3/plugins/sqldrivers
                        
                        O Offline
                        O Offline
                        oxycoder
                        wrote on last edited by
                        #20

                        @julrich I have to login and thank you.
                        It works.

                        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
                        • Unsolved