Название: [РЕШЕНО] linux QODBC driver enable Отправлено: deMax от Май 03, 2017, 08:25 Debian 8.7, установил unixodbc, unixodbc-bin, unixodbc-dev. Qt 5.8 установил с исходниками. Не могу собрать QODBC.
cd ~/Qt5.8.0/5.8/Src/qtbase/src/plugins/sqldrivers/odbc ~/Qt5.8.0/5.8/gcc_64/bin/qmake "INCLUDEPATH+=/usr/include" "LIBS+=-L/usr/lib/x86_64-linux-gnu -lodbc" odbc.pro Выдает Project ERROR: Library 'odbc' is not defined. unixodbc-dev установил файлы: /usr/include/autotest.h /usr/include/odbcinst.h /usr/include/odbcinstext.h /usr/include/sql.h /usr/include/sqlext.h /usr/include/sqltypes.h /usr/include/sqlucode.h /usr/include/unixodbc_conf.h /usr/include/uodbc_extras.h /usr/include/uodbc_stats.h /usr/lib/x86_64-linux-gnu/libodbc.a /usr/lib/x86_64-linux-gnu/libodbc.so /usr/lib/x86_64-linux-gnu/libodbccr.a /usr/lib/x86_64-linux-gnu/libodbccr.so /usr/lib/x86_64-linux-gnu/libodbcinst.a /usr/lib/x86_64-linux-gnu/libodbcinst.so /usr/share/doc/unixodbc-dev/NEWS.Debian.gz /usr/share/doc/unixodbc-dev/changelog.Debian.gz /usr/share/doc/unixodbc-dev/changelog.gz /usr/share/doc/unixodbc-dev/copyright Название: Re: linux QODBC driver enable Отправлено: titan83 от Май 03, 2017, 16:08 Была аналогичная проблема на Ubuntu 16 + Qt5.8. Сейчас все работает)
Пробуй в odbc.pro закомментить эту строку QMAKE_USE += odbc (было) #QMAKE_USE += odbc (стало) еще, на всякий случай, посмотри, где у тебя qmake лежит: which qmake, а то может так оказаться, что не тот qmake используется. Название: Re: linux QODBC driver enable Отправлено: __Heaven__ от Май 03, 2017, 17:14 Я бы ещё перепроверил, не врёт ли установщик и в /usr/lib/x86_64-linux-gnu действительно есть libodbc.so
Название: Re: linux QODBC driver enable Отправлено: deMax от Май 04, 2017, 07:56 Собрал unixodbc из исходников(не стал брать из репозитория debaian, почему то с ними не собиралось даже с закоментированной QMAKE_USE).
И закоментировал QMAKE_USE. Собралось. Скопировал Src/qtbase/plugins/sqldrivers/libqsqlodbc.so в Qt5.8.0/5.8/gcc_64/plugins/sqldrivers (в ней лежали libqsqlite.so, libqsqlmysql.so, libqsqlodbc.so). QSqlDatabase::drivers() выводит только QSQLITE Название: Re: linux QODBC driver enable Отправлено: titan83 от Май 04, 2017, 08:19 Чудес не бывает.
Вывод QCoreApplication::libraryPaths() и ldd libqsqlodbc.so в студию. Название: Re: linux QODBC driver enable Отправлено: deMax от Май 04, 2017, 08:47 Спасибо. С путями запутался....
Код: db = QSqlDatabase::addDatabase("QODBC"); выводит под дебианом(под виндой работает): Data source name not found, and no default driver specified QODBC3: Unable to connect#ifdef WIN32 db.setDatabaseName("DRIVER={SQL Server};Server=10.10.1.1;DATABASE=Obmen"); #else db.setDatabaseName("DRIVER={FreeTDS};Server=10.10.1.1;DATABASE=Obmen"); #endif db.setUserName("***"); db.setPassword("***"); if(!db.isValid()) qDebug()<< "ODBC driver don't loaded."; db.open(); if(db.isOpenError()) qDebug()<<db.lastError().text(); Название: Re: linux QODBC driver enable Отправлено: titan83 от Май 04, 2017, 13:12 Под линуксом надо настраивать соединения.
Два файла: freetds.conf и odbc.ini (у меня оба в /etc, но я сам собирал и odbc, и freetds). freetds.conf Код: [global] connect timeout = 10 #debug flags = 0xffff #dump file = /tmp/freetds.log text size = 64512 timeout = 10 [LIMSServer] host = 192.168.0.177 tds version = 8.0 clientcharset = UTF-8 odbc.ini Код: [LIMSDatabase] Также проверь odbcinst.ini;Database = CL_CO_ANDINA Database = OLDEMO Driver = FreeTDS Port = 1433 Servername = LIMSServer Код: [FreeTDS] Ну и в коде не надо твоей строки подключения:Description = TDS Driver Driver = /usr/lib/x86_64-linux-gnu/freetds/lib/libtdsodbc.so Setup = /usr/lib/x86_64-linux-gnu/odbc/libtdsS.so CPTimeout = CPReuse = Код: bool QWshDatabase::openDatabase(const QString &username, const QString &password, const QString &timeout) Должно работать.{ if (_db.isOpen() == false) { _db.setDatabaseName("LIMSDatabase"); _db.setUserName(username); _db.setPassword(password); if (timeout.isEmpty() == true) _db.setConnectOptions("SQL_ATTR_CONNECTION_TIMEOUT=3"); else _db.setConnectOptions(QString("SQL_ATTR_CONNECTION_TIMEOUT=%Timeout%").replace("%Timeout%", QString::number(timeout.toInt() / 3))); emit connecting(); if (_db.open() == false) { setProperty("LastError", _db.lastError().text()); return false; } } return true; } Название: Re: linux QODBC driver enable Отправлено: deMax от Май 25, 2017, 08:37 titan83, спасибо. Только хотелось бы чтобы подключения к нескольким базам были и пользователь в настройках программы задает ip, login, baseName.
Ладно под линуксом у меня только для отладки сборка. Название: Re: linux QODBC driver enable Отправлено: titan83 от Май 25, 2017, 17:05 titan83, спасибо. Только хотелось бы чтобы подключения к нескольким базам были и пользователь в настройках программы задает ip, login, baseName. Хм, ну тут два пути:Ладно под линуксом у меня только для отладки сборка. 1. Переписывать значения в freetds.conf и odbc.ini. Так у меня сделано сейчас. 2. Использовать строку подключения. Я не пробовал, но, возможно, будет работать. Если ты проверить и тут отпишешься, то будет просто замечательно. Что-то вроде, DRIVER={TDS Driver};Server=10.10.1.1;DATABASE=Obmen;Port=1433 Кстати, у меня под виндовс не работала строка подключения, пока не указал порт. |