Russian Qt Forum

Qt => Установка, сборка, отладка, тестирование => Тема начата: Даниил от Август 24, 2011, 13:51



Название: Qt с поддержкой QTDS
Отправлено: Даниил от Август 24, 2011, 13:51
Здравствуйте.

Понадобился драйвер QTDS, для соединения с Adaptive Sybase сервер. Оказалось, что в опен-сорсной версси Qt, поддержка такового отсутствует и необходимо самому его собирать. Погуглив нашел инструкцию, по сборке плагинов http://doc.crossplatform.ru/qt/4.3.2/sql-driver.html (http://doc.crossplatform.ru/qt/4.3.2/sql-driver.html), но опять вылезла проблема. Оказалось, что тролли написали эту короткую инструкцию, для обладателей VS Studio, а при моем наборе (qt 4.7.3 + MinGW + Qt-Creator) сборка осуществляется более протяженным путем, однако ссылку на инструкции к такому пути - я не нашел.

Имеет-ли кто-нить опыт подключения QTDS, если да, то поделитесь опытом.


Название: Re: Qt с поддержкой QTDS
Отправлено: Даниил от Август 25, 2011, 09:37
Может быть кто-то попросту имел опыт соединения с СУБД Sybase?
Подскажите, как это осуществить. Может быть, я попросту вижу того, чего нет? :(


Название: Re: Qt с поддержкой QTDS
Отправлено: Пантер от Август 25, 2011, 09:45
Напиши подробно что делаешь и что не получается.


Название: Re: Qt с поддержкой QTDS
Отправлено: Даниил от Август 25, 2011, 10:25
Имеется СУБД Sybase. Необходимо подключится к нему. После чтения документации- пришел к выводу, что для подключения, необходимо использовать sql драйвер QTDS. Написал вот такой код
Код
C++ (Qt)
QSqlDatabase db = QSqlDatabase::addDatabase("QTDS");
   db.setDatabaseName("my_base");
   db.setHostName(host);
   db.setUserName(user);
   db.setPassword(pass);;
   if(!db.isValid())
   {
       qDebug() << "QTDS is not valid";
   }
 
В окне дебага вываливается
Код:
QSqlDatabase: QTDS driver not loaded
QSqlDatabase: available drivers: QSQLITE QODBC3 QODBC
QTDS is not valid
Очевидно, что в данной сборке отсутствует поддержка QTDS.
Отсюда собственно сабж, как прикрутить?


Название: Re: Qt с поддержкой QTDS
Отправлено: Пантер от Август 25, 2011, 10:27
Скачать драйвер, скомпилить его и положить рядом с остальными. На каком этапе загвоздка?


Название: Re: Qt с поддержкой QTDS
Отправлено: Даниил от Август 25, 2011, 10:35
1)Скачать драйвер
2)Cкомпилить его
3)Положить рядом с остальными.
1. Насколько я знаю, он уже присутствует в исходниках: "...Qt\4.7.3\src\sql\drivers\tds"
А также присутствует нескомпиленный плугин "...Qt\4.7.3\src\plugins\sqldrivers\tds"
2. С компиляцией траблы возникают, если компилю плугин, он тыкается к исходникам, которые в свою очередь не могут найти библиотечки sqldb.h и sqlfron.h.
3. Что должно получится на выходе и куда это все кидать?
 ???


Название: Re: Qt с поддержкой QTDS
Отправлено: Пантер от Август 25, 2011, 10:40
2. Значит нужно саму либу БД скачать и указать ее при компилировании. Посмотри примеры сборки драйверов MySQL и PostgreSQL.


Название: Re: Qt с поддержкой QTDS
Отправлено: Даниил от Август 25, 2011, 11:00
Еще вопрос:
1) Везде описывают процесс сборки плагина qtds. Есть-ли возможность собрать *.dll-ку ?
И да:
Значит нужно саму либу БД скачать и указать ее при компилировании.
2) Это как понимать? Исходники qtds в инете нигде не нашел, а как уже говорил, при компилировании их сырцов - вылазиет ошибка отсутствия двух хеадеров, которые я нашел, скачал, положил рядом, но проект их упорно не хочет обнаруживать.


Название: Re: Qt с поддержкой QTDS
Отправлено: Пантер от Август 25, 2011, 11:06
Погугли по названию хедеров.


Название: Re: Qt с поддержкой QTDS
Отправлено: Даниил от Август 25, 2011, 11:32
Привнтил те 2 либы к проекту, теперь ругается таким макаром
Код:
:-1: ошибка: cannot find -lsybdb
Это что за птица  :-\


Название: Re: Qt с поддержкой QTDS
Отправлено: Пантер от Август 25, 2011, 11:34
Нужно указать что линковать. Поищи libsybdb.


Название: Re: Qt с поддержкой QTDS
Отправлено: Даниил от Август 25, 2011, 11:52
Нашел libsybdb.dll. Даже нашел, где её украсть достать. Вот только, чем она мне может помочь?  ???


Название: Re: Qt с поддержкой QTDS
Отправлено: Пантер от Август 25, 2011, 11:55
Нужно или .lib или .a


Название: Re: Qt с поддержкой QTDS
Отправлено: Даниил от Август 25, 2011, 12:06
Украл Нашел libsybdb.lib. ::)
Что с ним делать?


Название: Re: Qt с поддержкой QTDS
Отправлено: Пантер от Август 25, 2011, 12:17
Указать его линковщику. -Lпуть_к_либе. Поищи по форуму.


Название: Re: Qt с поддержкой QTDS
Отправлено: Даниил от Август 25, 2011, 12:44
В .pri файле qsql_tds:
Код:
unix|win32-g++*: {
    LIBS *= $$QT_LFLAGS_TDS
    !contains(LIBS, .*sybdb.*):LIBS += -lsybdb
    QMAKE_CXXFLAGS *= $$QT_CFLAGS_TDS
} else:win32-borland {
    LIBS *= $(BCB)/lib/PSDK/NTWDBLIB.LIB
} else {
    LIBS *= -lNTWDBLIB
}
Либу эту запихал уже куда только можно, пробовал путь менять. Пофиг. Все равно таже песня.
Точно файл: libsybdb.lib - это то, что нужно?


Название: Re: Qt с поддержкой QTDS
Отправлено: Даниил от Август 25, 2011, 14:39
Чем больше читаю интернета, тем больше понимаю, что у меня чего-то не хватает исходников. А вот где их скачать, вот это вопрос ...
2. Значит нужно саму либу БД скачать и указать ее при компилировании. Посмотри примеры сборки драйверов MySQL и PostgreSQL.
В случаем MySQL и PostgreSQL, программа и исходники находятся в открытом доступе. А в случае Sybase, их нет.
Как тут быть?  :'(


Название: Re: Qt с поддержкой QTDS
Отправлено: Странник от Август 25, 2011, 15:45
include и lib файлы обычно включаются в поставку сервера, установщик у вас есть? когда компилил QTDS, все необходимые файлы установились вместе с сервером.


Название: Re: Qt с поддержкой QTDS
Отправлено: Даниил от Август 25, 2011, 19:12
include и lib файлы обычно включаются в поставку сервера, установщик у вас есть? когда компилил QTDS, все необходимые файлы установились вместе с сервером.
С каким сервером? Sybase? Собственно Sybase сервер уже установлен, при чем давно, и я сильно сомневаюсь, что смогу так нарыть, что-то подобное. Но все же посмотрю. И да - Странник, у тебя скопиленные dll-ки остались: Я могу просто dll-ки скинуть к себе и через config.exe их приклеить?


Название: Re: Qt с поддержкой QTDS
Отправлено: Странник от Август 26, 2011, 09:24
dll, к сожалению, не осталось - с sybase уже год как не работаю.


Название: Re: Qt с поддержкой QTDS
Отправлено: Даниил от Август 26, 2011, 09:28
Притащили мне дистрибы Sybase - сервер и OpenClient. Щас попробую поставить, покомпилять. :P
Странник, ты когда QTDS собирал, как путь до либ Sybase'овских прописывал?


Название: Re: Qt с поддержкой QTDS
Отправлено: Даниил от Август 26, 2011, 11:31
Странник, а ты под какой осью собирал? Lin, Unix? У меня под Win7 сервак ставится что-то даже не хочет.


Название: Re: Qt с поддержкой QTDS
Отправлено: Даниил от Август 26, 2011, 12:25
Вернулся к отправной точке. В lib и .h файлах Sybase сервера нет того, на что ругается компилятор:
Код:
In file included from main.cpp:50:
../../../sql/drivers/tds/qsql_tds.h:53:22: sqlfront.h: No such file or
directory
../../../sql/drivers/tds/qsql_tds.h:54:19: sqldb.h: No such file or
directory
In file included from main.cpp:50:
Печаль  :'(


Название: Re: Qt с поддержкой QTDS
Отправлено: Странник от Август 26, 2011, 12:52
под XP дело было. qmake в INCLUDEPATH и LIBS указал пути к хедерам и либам. а что, нет их ни в сервере, ни в OpenClient?


Название: Re: Qt с поддержкой QTDS
Отправлено: Даниил от Август 26, 2011, 13:00
Сейчас другой накатил - в нем нашел.
Т.е. если у меня Sybase установлен в C:\Sybase.
Мне в qmake нужно указывать:
Код:
qmake -o Makefile "INCLUDEPATH=C:/Sybase/OCS-12_5/include/" "LIBS=C:/Sybase/OCS-12_5/lib -lsybdb" tds.pro
Так?  ???
МЛЯ, там sqlfront.h и sqldb.h нету ... Господи, за что?!
Теперь ругается на то, что не определены типы:
Код:
'SQLCHAR'
'SQLMONEY'
...
Определение данных типов, я увидел в хеадерсе sybdb.h.
Может у меня libsybdb.lib не подключается?! Корректно пишу инструкцию для линковщика?


Название: Re: Qt с поддержкой QTDS
Отправлено: Даниил от Август 29, 2011, 14:37
Блин, ну совсем уже упарился. В хеадерсах от sybase (скачивал последнюю версию для девелоперов) хеадерсов sqlfront.h и sqldb.h НЕТУ. Оказалось, что это инструкция для Linux ( ;D ) - поржал и успокоился. НО, либу, которую троли говорят инклудить для виндовз тоже нигде нету! Что это за засада? Я дошел того, что слил коммерческую версию, но и в ней теже пироги - предлагают самому найти и скомпилить драйвер  :'(


Название: Re: Qt с поддержкой QTDS
Отправлено: Даниил от Август 30, 2011, 12:20
Народ, помогите, чувствую, что уже совсем близок к победе, но опять вывалилась непонятная беда:
На этапе сборки вывалиется куча ошибок
Код:
:undefined reference to 'dbdead'
...
Ругается, на разные типы. Все эти типы определены в одном из хэадеров, подключаемых к проекту. Определены таким образом:
Код
C++ (Qt)
DBBOOL CS_PUBLIC dbdead  PROTOTYPE((
DBPROCESS DBFAR *a
));
 
Почему компилятор ругается?
В аттаче хэадрсы и либы от Open Client Sybase 15.0


Название: Re: Qt с поддержкой QTDS
Отправлено: Странник от Август 31, 2011, 14:04
development-файлы от MS SQL Server 8.0 (ntwdblib) и готовые бинарники плагина (Qt 4.7.3 MinGW).


Название: Re: Qt с поддержкой QTDS
Отправлено: Даниил от Сентябрь 01, 2011, 07:37
После удачной сборки драйвера, необходимо пересобирать Qt ?


Название: Re: Qt с поддержкой QTDS
Отправлено: Пантер от Сентябрь 01, 2011, 09:15
Нет.


Название: Re: Qt с поддержкой QTDS
Отправлено: Даниил от Сентябрь 01, 2011, 09:18
Тогда, подскажите. Как в проекте использовать плагин. Пробовал по примеру:
.pro
Код:
QTPLUGIN += qsqltds
main.cpp
Код
C++ (Qt)
#include <QtPlugin>
 
Q_IMPORT_PLUGIN (qsqltds)
 
При компиляции выдает ошибку:
Код:
:-1: ошибка: cannot find -lqsqltdsd


Название: Re: Qt с поддержкой QTDS
Отправлено: Пантер от Сентябрь 01, 2011, 09:42
Просто положи плагин рядом с другими. В приложении его линковать не нужно, на то он и плагин.


Название: Re: Qt с поддержкой QTDS
Отправлено: Даниил от Сентябрь 01, 2011, 20:13
Просто положи плагин рядом с другими. В приложении его линковать не нужно, на то он и плагин.
Он как бы автоматом положился в директорию .../plugins/sqldrivers
Куда и с кем его положить еще нужно? :-\

Пантер, Если в про файле его не указывать, то вываливается другая ошибка:
Код:
undefined reference to `qt_plugin_instance_qsqltds()'