Russian Qt Forum
Ноябрь 22, 2024, 17:44 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: [РЕШЕНО] linux QODBC driver enable  (Прочитано 14776 раз)
deMax
Хакер
*****
Offline Offline

Сообщений: 600



Просмотр профиля
« : Май 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
« Последнее редактирование: Май 25, 2017, 08:37 от deMax » Записан
titan83
Гость
« Ответ #1 : Май 03, 2017, 16:08 »

Была аналогичная проблема на Ubuntu 16 + Qt5.8. Сейчас все работает)
Пробуй в odbc.pro закомментить эту строку
QMAKE_USE += odbc (было)
#QMAKE_USE += odbc (стало)
еще, на всякий случай, посмотри, где у тебя qmake лежит: which qmake, а то может так оказаться, что не тот qmake используется.
« Последнее редактирование: Май 03, 2017, 16:58 от titan83 » Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #2 : Май 03, 2017, 17:14 »

Я бы ещё перепроверил, не врёт ли установщик и в /usr/lib/x86_64-linux-gnu действительно есть libodbc.so
Записан
deMax
Хакер
*****
Offline Offline

Сообщений: 600



Просмотр профиля
« Ответ #3 : Май 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


Записан
titan83
Гость
« Ответ #4 : Май 04, 2017, 08:19 »

Чудес не бывает.
Вывод QCoreApplication::libraryPaths() и ldd libqsqlodbc.so в студию.
Записан
deMax
Хакер
*****
Offline Offline

Сообщений: 600



Просмотр профиля
« Ответ #5 : Май 04, 2017, 08:47 »

Спасибо. С путями запутался....

Код:
    db = QSqlDatabase::addDatabase("QODBC");

#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();
выводит под дебианом(под виндой работает): Data source name not found, and no default driver specified QODBC3: Unable to connect
« Последнее редактирование: Май 04, 2017, 12:39 от deMax » Записан
titan83
Гость
« Ответ #6 : Май 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]
;Database = CL_CO_ANDINA
Database = OLDEMO
Driver = FreeTDS
Port = 1433
Servername = LIMSServer
Также проверь odbcinst.ini
Код:
[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;
}
Должно работать.
Записан
deMax
Хакер
*****
Offline Offline

Сообщений: 600



Просмотр профиля
« Ответ #7 : Май 25, 2017, 08:37 »

titan83, спасибо. Только хотелось бы чтобы подключения к нескольким базам были и пользователь в настройках программы задает ip, login, baseName.
Ладно под линуксом у меня только для отладки сборка.
Записан
titan83
Гость
« Ответ #8 : Май 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

Кстати, у меня под виндовс не работала строка подключения, пока не указал порт.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.048 секунд. Запросов: 22.