Версия для печати темы
Форум на CrossPlatform.RU _ Qt Разработка баз данных _ Драйвера SQL + Qt (Win32)
Автор: iddqd 26.11.2009, 12:19
Приветствую.
Имеется qt-sdk-win-opensource-2009.04 установленный на WinXP SP2.
1. Собрал (debug/release) драйвер для MySQL, получил qsqlmysqld4.dll/qsqlmysql4.dll, скопировал их к дефолтным плагинам в папку \Qt\2009.04\qt\plugins\sqldrivers\ вместе с .a файлами. По-идее этого достаточно. Собираю пример из \Qt\2009.04\qt\demos\sqlbrowser\, при запуске он ни в какую ни видит новый плагин, qsqlmysql4. Что я делаю не так?
2. Пытаюсь собрать драйвер для Oracle. Делаю по хелпу, поставил Oracle 9i Client c опцией "Programmer", добавил в oci.pro следующие строки
INCLUDEPATH+=c:\oracle9\oci\include
LIBS+=c:\oracle9\oci\lib\msvc
При сборке ругается непонятным образом:
Цитата
c:\Qt\2009.04\mingw\bin\..\lib\gcc\mingw32\3.4.5\..\..\..\..\mingw32\bin\ld.exe: c:\oracle9\oci\lib\msvc: No such file: Permission denied
collect2: ld returned 1 exit status
mingw32-make[1]: *** [release\qsqloci4.dll] Error 1
Папки c:\oracle9\oci\include и c:\oracle9\oci\lib\msvc существуют, файлы в них есть.
Как решить эту проблему?
Автор: Litkevich Yuriy 26.11.2009, 14:26
iddqd, Давай разные типы драйверов в разных темах.
Да и тем про MySQL стало слишком много, http://www.forum.crossplatform.ru/index.php?act=Search&CODE=01&keywords=MySQL&namesearch=&forums=6&searchsubs=1&prune=0&prune_type=newer&sort_key=last_post&sort_order=desc&search_in=titles&result_type=topics и продолжи там
П.С.
Цитата(iddqd @ 26.11.2009, 15:19)
No such file: Permission denied
Автор: iddqd 26.11.2009, 15:54
Про MySQL вопрос снимается, по поиску нашел решение. Выполнил следующую команду в папке c:\MySQL\lib\opt\
dlltool -k --input-def libmysql.def --dllname libmysql.dll --output-lib libmysql.a
затем собрал mysql.pro, скопировал .dll и .a в qt\plugins\sqldrivers\, а libmysql.dll в qt\bin\ (без последнего действия не заработало).
А вот с oci не получается разобраться.
Цитата
П.С.
Цитата(iddqd @ 26.11.2009, 15:19)
No such file: Permission denied
Я тоже обратил внимание, но я уже на всю папку c:\oracle9 выставил Full control для Everyone. Ошибка осталась. Поиском пользовался, решения не нашёл.
Автор: Litkevich Yuriy 26.11.2009, 16:05
Цитата(iddqd @ 26.11.2009, 18:54)
Я тоже обратил внимание, но я уже на всю папку c:\oracle9 выставил Full control для Everyone. Ошибка осталась. Поиском пользовался, решения не нашёл.
по Ораклу здесь решения нет, если я не ошибаюсь.
По повуду нарушения прав доступа, я думаю речь идёт о dll'ке которая, возможно, занята другим приложением (хотя dll'а должна быть доступна всем).
Нельзя ли ради теста остановит сервер и попробовать собрать драйвер заново
Автор: iddqd 26.11.2009, 16:10
Цитата(Litkevich Yuriy @ 26.11.2009, 16:05)
Нельзя ли ради теста остановит сервер и попробовать собрать драйвер заново
Дело в том, что у меня сервер и не установлен. Я ставил только клиент, как описано в хелпе: "Choosing the option "Programmer" in the Oracle Client Installer from the Oracle Client Installation CD is sufficient to build the plugin.".
Автор: iddqd 27.11.2009, 11:20
Драйвер наконец-то собрался. А дело было в том, что я не добавил префикс -L вот тут
Цитата
LIBS+=-Lc:\oracle9\oci\lib\msvc
Добавил, драйвер собрался. Для работы ещё требуется oci.dll и вот тут возникает ещё один вопрос - мне нужно запустить программу на компе, где вообще не установлен Oracle Client. Программа запускается, но к серверу не коннектится. Failed to logon. Почему такое происходит и нужно ли что-то ещё, какие-нибудь dll'ки, для работы программы без установленного Oracle Client? На Delphi это реально сделать и оно работает, но хочется переписать программу на Qt.
Автор: Kagami 27.11.2009, 12:09
Потому что надо эту библиотеку с собой таскать. И лежать она должна в папке sqldrivers, которую надо создать рядом с экзешником.
Автор: iddqd 27.11.2009, 12:43
Ты про сам скомпиленный драйвер или про oci.dll ? Я в курсе. И то и то перетащил на другую тачку, где нет никакого оракла, запускаю программу, драйвер грузится нормально, но вот при попытке коннекта к базе получаю "Unable to logon" без дополнительных разъяснений. Цель - чтобы работало без предустановленного Оracle Client'a, а то очень не удобно получается.
Автор: Litkevich Yuriy 27.11.2009, 14:28
Я думаю, что без клиента не получится. Либо придумывать способ как его вкомпилить в свою программу, но тут могут и правовые последствия возникнуть.
Автор: iddqd 27.11.2009, 14:36
Если так, то это очень и очень плохо... А с "вкомпиливанием" вообще не вариант... Хм, на Delphi-то написали, работает без клиента. Нужели на Qt такого не получится сделать
Автор: Litkevich Yuriy 27.11.2009, 14:38
iddqd, я думаю имей ты комерческую лицензию Qt троли бы тебе помогли с этим. А у Дельфей вообще нет халявной лицензии (LGPL), следовательно и сравнивать нужно с комерческой Qt.
Автор: iddqd 27.11.2009, 14:44
По большому счёту всё верно.
Посмотрим, может кто-нибудь ещё сталкивался с такой проблемой и опишут, к чему в итоге пришли.
Автор: Litkevich Yuriy 27.11.2009, 14:56
Цитата(iddqd @ 27.11.2009, 17:44)
к чему в итоге пришли.
все приходят к одному и тому же:
Моя программа - моя программа, а её зависимости - неизбежные зависимости.
Пример - тот же Делфи, дистрибутив содержит кучу всего, но эту кучу можно установить одной программой установки.
Т.е. делаешь дистриб, который устанавливает и клиент Оракла и твою программу, ВАЖНО: для пользователя процесс установки должен быть простой, тогда ему неважно сколько dll'ок будет установлено.
Автор: iddqd 27.11.2009, 16:53
Цитата(Litkevich Yuriy @ 27.11.2009, 14:56)
Пример - тот же Делфи, дистрибутив содержит кучу всего, но эту кучу можно установить одной программой установки.
Т.е. делаешь дистриб, который устанавливает и клиент Оракла и твою программу, ВАЖНО: для пользователя процесс установки должен быть простой, тогда ему неважно сколько dll'ок будет установлено.
В том-то и дело, нет желания делать дистрибы и ставить клиента к каждому юзеру на комп. Софт только для внутреннего использования. В Delphi моя программа компилируется в один единственный exe'шник (и работает свободно на любом компе, соединяясь с сервером в сети) и я хочу, хотя бы приближённо, сделать то же самое на Qt (я имею в виду static сборки) или согласен даже на shared сборки с набором либ кьюта, но ставить ещё и Oracle Client каждый раз - такой вариант не катит, к сожалению...
Автор: PavelDart 27.11.2009, 20:35
iddqd, а можно по-подробнее про сборку драйвера для OCI.
Жутко интересно, из каких исходников были собраны драйвера, у меня есть исходники вот http://tonyobryan.com/oracleqt/ только толку от них мало, скорее наверное, от меня.) Ещё интересно взглянуть на эти исходники. Ну и что бы сориентироваться, в правильности моих действий, приведите пожалуйста, список Ваших действий.
Автор: Litkevich Yuriy 27.11.2009, 20:45
Цитата(Гость_PavelDart_* @ 27.11.2009, 23:35)
из каких исходников были собраны драйвера
исходники QOCI смотри в архиве Qt для всех платформ (qt-all-opensource-src-*) на FTP тролей :
ftp://ftp.trolltech.com/qt/source/
в архивах под конкретную плаформу X11 или Win их нет
Автор: PavelDart 27.11.2009, 22:54
Litkevich Yuriy, спасибо, интересно прочитать комментарии iddqd.
Автор: iddqd 29.11.2009, 20:56
Цитата(PavelDart @ 27.11.2009, 22:54)
Litkevich Yuriy, спасибо, интересно прочитать комментарии iddqd.
В принципе всё описано в постах #1 и #6. Если по шагам, то получится примерно вот так:
1. Качаем qt-sdk-win-opensource-2009.04, ставим его, в комплекте идёт IDE Qt Creator
2.
a) Если есть CD c инсталлером Oracle, то ставим Oracle Client с диска, при установке выбираем Custom и отмечаем опцию Oracle Programmer
b) Если диска нет, но есть, например, Oracle Instant Client 10й или 11й версии, то распаковываем его в любое место и запоминаем путь
3. Открываем в Qt Creator файл путь_до_qt\2009.04\qt\src\plugins\sqldrivers\oci\oci.pro, дописываем в него две строки:
- для Oracle 9:
INCLUDEPATH+=c:\oracle9\oci\include
LIBS+=-Lc:\oracle9\oci\lib\msvc
- для Oracle InstantClient 11:
INCLUDEPATH+=c:\instantclient_11_1\sdk\include
LIBS+=-Lc:\instantclient_11_1\sdk\lib\msvc
4. Собираем проект, получаем драйвер. Копируем полученные при сборке файлы qsqloci4.dll и libqsqloci4.a для release сборки (для debug - qsqlocid4.dll и libqsqlocid4.a) в папку путь_до_qt\2009.04\qt\plugins\sqldrivers\.
Всё, драйвер собран и готов к использованию.
5. Не забываем о том, что для запуска на другом компе нам нужно скопировать в папку с нашей программой файл oci.dll (из состава самого Oracle Client'a), также создать в папке с нашей прогой папку sqldrivers и скопировать туда файл qsqloci4.dll.
Автор: PavelDart 29.11.2009, 23:59
iddqd, чего-то нового ожидать было бессмысленно. Всё равно, спасибо.
Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)