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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Qt + ODBC = Driver not loaded  (Прочитано 26785 раз)
InternalsInside
Гость
« : Декабрь 11, 2005, 17:54 »

Здравствуйте,
 Вот такая проблемка возникла... Поставил себе вчера Qt, начал доки читать и по мелочи эксперементировать. Сегодня захотел поэксперементировать с БД. И возникло несколько вопросов.

Главный вопрос: Пишу такой код:
Код:
QSqlDatabase db = QSqlDatabase::addDatabase ("QODBC3");

После чего lastError() возвращает ошибку driver not loaded. Вопрос как его загрузить?

Вопрос номер2:
Чтобы работать с sql классами qt пришлось в настройках проекта в разделе linker указать еще либу qtsql4.lib - мне всегда так придется вручную подключать нужные либы или как-то можно автоматизировать?

Заранее спасибо.[/code]
Записан
Dendy
Гость
« Ответ #1 : Декабрь 12, 2005, 14:02 »

Відповідь 1:
Подивись будь ласка тут, може це та сама проблема:
http://prog.org.ru/forum/topic_2141.html

Відповідь 2:
Бібліотеки на пальцях порахувати можна. Прийдеться підмикати руцями, не такий й гемор. Улыбающийся  В інтеграторі на початку проекту можна вибрати які заюзати ліби.
Записан
mistake
Гость
« Ответ #2 : Август 26, 2006, 20:35 »

Ситуация: QT 4.1.4 + VS 2005. Подсоединяюсь к базе Access при помощи
Код:
QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
db.setDatabaseName("DRIVER={Microsoft Access Driver (*.mdb)};FIL={MS Access};DBQ=" + FileName);

Полет нормальный - коннект проходит, вижу какие есть таблицы в этой базе...

Проблема: при попытке сделать запрос при помощи
Код:
// Запрашиваем кол-во записей
query.exec("select count(*) from table");
if (!query.isActive())
{
QMessageBox::warning(0, "Database Error", query.lastError().text());
}
вылетает указанный QMessageBox с надписью "Driver not loaded Driver not loaded"!

Как такое может быть и что сие означает? Демонстрация SQL Browser нормально отрабатывает и отображает содержимое таблиц. Где глюк?

добавлено спустя 4 часа 56 минут:

 заметил в окне debug сообщение
Код:
'dbtool.exe': Loaded 'C:\WINDOWS\system32\odbcji32.dll', Cannot find or open a required DBG file.
Подозреваю, что проблема именно в этом, поскольку эта dll-ка вроде как входит в состав Microsoft Jet 4. Самое интересное, что файл преспокойно находится себе в папке windows/system32. В чем же проблема?

добавлено спустя 7 минут:

 Но вот чего я вообще не понимаю так это вот это:
1) почему прога коннектится к базе и дает возможность получить список таблиц в ней, но не дает выполнить запрос?
2) почему открытая в VS 2005 демонстрашка "SQL Browser" работает с этой же базой на ура?
Записан
DenKor
Гость
« Ответ #3 : Август 28, 2006, 08:13 »

Скорее всего у тебя в path раньше указаны другие версии qt или файлы баз jet не той версии.
Которые скомпилированы без поддержки баз данных.

У меня тоже была такая фигня
Записан
mistake
Гость
« Ответ #4 : Август 28, 2006, 09:11 »

И эта "фигня" как-то решилась? Возможно проблема в том, что у меня стоит офис версии 2003 SBE (в составе него отсутствует MS Access), но я поставил поверх этого офиса MS Access из поставки MS Office 2003 Pro....
Записан
DenKor
Гость
« Ответ #5 : Август 28, 2006, 14:01 »

заметил в окне debug сообщениеКод:
'dbtool.exe': Loaded 'C:\WINDOWS\system32\odbcji32.dll', Cannot find or open a required DBG file.

Это он ругается на отсутствии отладочных символов для библиотеки. Можно забить.

Посмотри в окне  debug твои ли библиотеки qt подгружаются при загрузки проги. У тебя могут подгружаться библиотеки из другой версии.

Попробуй сам пересобери библиотеки odbc.

>>почему открытая в VS 2005 демонстрашка "SQL Browser" работает с этой же >>базой на ура?
Если эта демонтсрашка не вылетает на твоем операторе, то смотри опции соединения базы данных
Записан
mistake
Гость
« Ответ #6 : Август 29, 2006, 20:53 »

Цитата: "DenKor"
Посмотри в окне  debug твои ли библиотеки qt подгружаются при загрузки проги. У тебя могут подгружаться библиотеки из другой версии.

А как это посмотреть? По путям? Но я оставил только одну версию QT, остальные снес - так что это вряд ли является проблемой.

Цитата: "DenKor"
Попробуй сам пересобери библиотеки odbc.

Это как? Microsoft Jet я ведь собрать не смогу...

Цитата: "DenKor"
>>почему открытая в VS 2005 демонстрашка "SQL Browser" работает с этой же >>базой на ура?
Если эта демонтсрашка не вылетает на твоем операторе, то смотри опции соединения базы данных

Смотрел. Ничего интересного не выявил... Придется еще раз копать код... :-(
Подозреваю, что проблема все-таки в том, что у меня в настоящий момент две версии MS Office (SBE и PRO), попробую оставить одну...
Записан
zuxul
Гость
« Ответ #7 : Ноябрь 22, 2006, 12:27 »

Итак, проблема над которой я ломаю голову уже второй день.
 Грустный
QSqlDatabase: QODBC driver not loaded
QSqlDatabase: available drivers:

Перечитал почти все топики(то что выдал мне поиск) форума на эту проблему...

Положил скомпиленный драйвер($QTDir\plugins\sqldrivers\qsqlodbc.dll) в папку sqldrivers рядом с прогой, не помогло. Может я не правильно его компилировал...Не подскажите как правильно это сделать.
Уставновливал дистрибутивы из этих файлов:
MinGW-3.4.2.exe
qt-win-opensource-4.1.2-mingw.exe
компилирую в MinGW.

Пожалуйста ответьте мне, на пару глупый вопросов.
1. Можно ли использовать QODBC без переконфигурации и новой сборки QT?
2. Собственно, если можно то как?
3. При запуске QT-шного примера, sql-браузера, при выборе QODBC драйвера, вываливается такая ошибка в окошке:
An error ocured while opening the connection: [Microsoft][Диспечер драйверов ODBC] Источ... - дальше не видно. Может это у меня что-то с компутером?
Записан
BaltikS
Гость
« Ответ #8 : Ноябрь 22, 2006, 14:05 »

Ответ простой, Qt - не видет драйвера. Я собирал QT VC6. И вот что я заметил с плагинами.... Если просто тупо копировать Qt с плагинами с одной машины на другую в тот же каталог - работают плагины.... Если любой другой, то плагины не видны.

1. Если версии QT совпадают и пути одинаковые - можно.
2. Использовать DLL qt-mtxxx.dll вместе с плагином, там где он был собран (для Qt3).
3. без коментариев...
Записан
zuxul
Гость
« Ответ #9 : Ноябрь 22, 2006, 22:31 »

Извините, не описал сути проблемы, не загружается драйвер на машине, где установлен QT.
SQL Browser - из примеров QT, работает только с QSQLite драйвером...
Цитата: "BaltikS"
Ответ простой, Qt - не видет драйвера.

Как заставить QT (или мою прогу?) увидеть его?
Записан
Mixolap
Гость
« Ответ #10 : Ноябрь 24, 2006, 18:35 »

Сконфигурируй сборку с дровами odbc.
Под винду:

configure -qt-sql-odbc
mingw32-make
Записан
Dendy
Гость
« Ответ #11 : Ноябрь 24, 2006, 21:09 »

Ещё солюшн - потереть ветку реестра:

Код:
HKEY_CURRENT_USER\Software\Trolltech\OrganizationDefaults
Записан
Tonal
Гость
« Ответ #12 : Ноябрь 25, 2006, 12:43 »

Про расположение плагинов, и других файлов читать в ассистенте про qt.conf
Если кратко, то можно в директории проги создать каталог plugins, в нём подкаталог sqldrivers и туда ложить qsqlodbc.dll.
Записан
zuxul
Гость
« Ответ #13 : Ноябрь 29, 2006, 01:12 »

Спасибо за помощь. Дело как всегда оказалось в кривых руках.
Делал все в тестовом режиме - в консоли - оказывается (!!! :-) ) надо создавать QApplication, чтобы все нормально работало.
Записан
Sidrian
Гость
« Ответ #14 : Ноябрь 29, 2006, 17:05 »

У меня похожая проблема. Когда компилю программу с функцией
int connectDB()
{
   QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
        db.setDatabaseName("qttest");
   db.setUserName("qttest");
   db.setPassword("100000");
        if (!db.open())
           return 0;
   return 1;
}
все классно работает. Но стоит поместить эту функцию в ДЛЛ пишет
QSlqlDatabase: QODBC Driver not loaded.
А мне оно нужно именно в ДЛЛ потому что идея в том чтобы использовать это из С кода, где инклуд с такой функцией, естественно, не скомпилиться.
Хотел вручную инстанцировать QODBCDriver. В мануале сказанно, что для этого надо инклудить соответствующий файл из qtdir/src/sql/drivers/. У меня в каталоге srz нет папки sql.
Qt ver 4.2.0 evaluation for MSVS 2003.

добавлено спустя 1 час:

 Скачал сорс Qt там есть файл qtdir/src/sql/drivers/odbc/qsql_odbc.cpp котый в мануале сказано инклудить. В ответ аолучаю тучу ворнингов о "inconsistent dll linkage" и пару ошибок "unresolved external".
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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