Russian Qt Forum

Qt => Базы данных => Тема начата: bigirbis от Июль 30, 2007, 12:38



Название: Qt 4 + MySql-embedded под Windows
Отправлено: bigirbis от Июль 30, 2007, 12:38
Объясните дятлу по пунктам, что за чем идет после сборки самого мускуля. (Везде по разному пишут, уже запутался, а результата ни какого)


Название: Qt 4 + MySql-embedded под Windows
Отправлено: crocus от Июль 31, 2007, 11:02
Ну раз настойчивый :)
Цитировать
MySQL Embedded Server

This is a useful way of providing a stand-alone application that incorporates a database server. As noted above, the embedded server libraries seem to have disappeared from the MySQL 5 releases, so you will need to go back to MySQL 4 or compile MySQL 5 from source with the embedded server option. To keep it simple, obtain the "Windows (x86) ZIP/Setup.EXE" package for MySQL 4.1.22 and install only the Developer Components.

Locate the libmysqld.lib file in c:\mysql\Embedded\DLL\release and make the conversion of the library file to the GNU compatible form:

# cd c:\mysql\Embedded\DLL\release
# reimp -d libmysqld.lib
# dlltool -k --input-def libmysqld.def --dllname libmysqld.dll --output-lib libmysqld.a

Change the code in the source file c:\qt\src\sql\drivers\mysql\qsql_mysql.cpp to the lines below (this is near the bottom of the file) since the mysql_get_client_version() function call appears to have changed or disappeared from the MySQL API.

//#if MYSQL_VERSION_ID >= 40108
// d->preparedQuerysEnabled = mysql_get_client_version() >= 40108
// && mysql_get_server_version(d->mysql) >= 40100;
//#else
// d->preparedQuerysEnabled = false;
//#endif
d->preparedQuerysEnabled = true;

At the top of this file is a section that needs to be commented out as follows:

//#ifdef Q_OS_WIN32
// comment the next line out if you want to use MySQL/embedded on Win32 systems.
// note that it will crash if you don't statically link to the mysql/e library!
//# define Q_NO_MYSQL_EMBEDDED
//#endif

The advice is to be taken seriously. We will need to statically link the libmysqld.a file. If MySQL server is to be incorporated into an application, then it is likely that Qt would also be statically compiled with the application, as Qt is not common in the Windows world.

Now do the following for static compilation of Qt and MySQL Embedded:

# cd c:\qt
# mingw32-make clean
# configure -debug-and-release -static -qt-sql-mysql -l mysqld -I c:\mysql\include -L c:\mysql\embedded\dll\release
# mingw32-make sub-src

The third option -l specifies the libmysqld.a library to use, the second (capital i) specifies the directory of the MySQL include files and the final -L specifies the directory of the MySQL library file. The make sub-src line ensures that the examples are not built. This not only cuts down the compilation time, but also the disk space as each example is built with the full Qt static linkage.

This compiles without errors, but I have not yet attempted to compile an application to make use of the embedded MySQL server.


Название: Qt 4 + MySql-embedded под Windows
Отправлено: bigirbis от Июль 31, 2007, 11:34
Прошу прощения, за расплывчатость вопроса. :oops:
Как будет правильно пересобрать SQL модуль Qt после сборки самого мускуля? Какие там действия?


Название: Qt 4 + MySql-embedded под Windows
Отправлено: crocus от Июль 31, 2007, 13:51
Кстати какую версию MySQL собирал.
И еще http://prokyon3.sourceforge.net - отсюда все...


Название: Qt 4 + MySql-embedded под Windows
Отправлено: bigirbis от Июль 31, 2007, 14:30
Цитировать
Кстати какую версию MySQL собирал

4.1.22


Название: Re: Qt 4 + MySql-embedded под Windows
Отправлено: crocus от Январь 09, 2008, 03:53
А что разве вопрос еще открыт??


Название: Re: Qt 4 + MySql-embedded под Windows
Отправлено: ритт от Январь 14, 2008, 12:42
для меня открыт!
венда, мингв...
скачал 5.1.22, собрал плагин шаредом, сложил май.ини, дата, mysqld.dll в папку с проектом - думаю "всё, вроде"
при попытке соединения молча крашит, возвращая код выхода 1
хоть бы на своём на аглицком выматерился :(

ассистант говорит:
Цитировать
The MySQL embedded server is a drop-in replacement for the normal client library. With the embedded MySQL server, a MySQL server is not required to use MySQL functionality.

To use the embedded MySQL server, simply link the Qt plugin to libmysqld instead of libmysqlclient. This can be done by replacing -lmysqlclient_r by -lmysqld in the qmake command in the section below.
врёт, похоже...

перекопал все доки, до которых дорвался...заискал весь форум прокъёна (нашёл похожую траблу, но под лялихом)...мысли закончились
выручайте!


Название: Re: Qt 4 + MySql-embedded под Windows
Отправлено: Tonal от Январь 14, 2008, 13:52
Собери с отладочной инфой и запусти под отладчиком - дальше будем посмотреть. :-)


Название: Re: Qt 4 + MySql-embedded под Windows
Отправлено: ритт от Январь 14, 2008, 14:51
так и сделаю...наверное, ближе к вечеру (надо винт почистить, а то дэбажка не влезет)
Цитировать
//#ifdef Q_OS_WIN32
// comment the next line out if you want to use MySQL/embedded on Win32 systems.
// note that it will crash if you don't statically link to the mysql/e library!
//# define Q_NO_MYSQL_EMBEDDED
//#endif
для чего здесь говорится, что надо статически линковать, а то будет крашить? и при этом в ассистанте говорят, что можно просто эмбэд-либу шаред вместо клиентской шаред скормить...

а мускули тоже молодцы: на запрос документации по эмбэддед-мускулю выслали пдфку о том, как хороша встроенная версия мускуля, и поблагодарили за то, что свой мыльник им спалил...


Название: Re: Qt 4 + MySql-embedded под Windows
Отправлено: Tonal от Январь 14, 2008, 18:22
Пока не видел не одного отзыва о том что удалось завести MySql под виндой.
Похоже пока SQLite и Firebird для эмбедид рулят.


Название: Re: Qt 4 + MySql-embedded под Windows
Отправлено: crocus от Январь 14, 2008, 18:43
Работает под MinGW.
Правишь drivers.pri и mysql.pro
Собирал -qt-sql-mysql
Коннект к серверу  в main.cpp.. адаптировано под Qt4 из прокиона
Лучше не my.ini а .cnf (c my не завел)
У меня так
Код:
[embedded]
skip-bdb
skip-innodb
skip-ndbcluster
skip-networking
skip-grant-tables

[coolproga_embedded_SERVER]
port=3309
default-character-set=utf8_general_ci
в папку с exешником копируешь /data и /share


Название: Re: Qt 4 + MySql-embedded под Windows
Отправлено: ритт от Январь 15, 2008, 02:47
так-с...убил ещё два часа...

cодержимое e:/opt/project/trunk/my.cnf:
Код:
[embedded]
skip-bdb
skip-innodb
skip-ndbcluster
#skip-networking
skip-grant-tables

[project_embedded_SERVER]
port=3307

basedir=e:/opt/project/trunk
datadir=e:/opt/project/trunk/data
tmpdir=d:/windows/temp

default-character-set=cp1251
default-collation=cp1251_general_ci
character_sets-dir=e:/opt/project/trunk/share/charsets/

в qsql_mysql.cpp закомментировано # define Q_NO_MYSQL_EMBEDDED, а qLibraryInit() выглядит следующим образом:
Код:
static void qLibraryInit()
{
#ifndef Q_NO_MYSQL_EMBEDDED
# if MYSQL_VERSION_ID >= 40000
    if (qMySqlInitHandledByUser || qMySqlConnectionCount > 1)
        return;

static char *server_args[] = {
    "project_embedded_SERVER",
    "--defaults-file=e:/opt/project/trunk/my.cnf",
    "--key_buffer_size=32M"
};
static char *server_groups[] = {
    "embedded",
    "server",
    "project_embedded_SERVER",
    (char *)NULL
};

# if (MYSQL_VERSION_ID >= 40110 && MYSQL_VERSION_ID < 50000) || MYSQL_VERSION_ID >= 50003
    if (mysql_library_init(sizeof(server_args) / sizeof(char *), server_args, server_groups)) {
# else
    if (mysql_server_init(sizeof(server_args) / sizeof(char *), server_args, server_groups)) {
# endif
        qWarning("QMYSQLDriver::qServerInit: unable to start server.");
    }
# endif // MYSQL_VERSION_ID
#endif // Q_NO_MYSQL_EMBEDDED
}

при попытке инициализировать драйвер
Код:
QSqlDatabase::addDatabase("QMYSQL");
валится в qsql_mysql.cpp на строке
Код:
if (mysql_library_init(sizeof(server_args) / sizeof(char *), server_args, server_groups)) {
с сообщением
Цитировать
Program received signal SIGSEGV, Segmentation fault.

0x7c918fea in ntdll!RtlpWaitForCriticalSection () from D:\WINDOWS\system32\ntdll.dll

т.е. дело даже не доходит до соединения с сервером - валится ещё при инициализации

если
Код:
if (mysql_library_init(sizeof(server_args) / sizeof(char *), server_args, server_groups)) {
заменить на
Код:
if (mysql_library_init(0, 0, 0)) {
, то молча выходит с кодом 01


Название: Re: Qt 4 + MySql-embedded под Windows
Отправлено: ритт от Январь 16, 2008, 02:48
так-с...для меня тема закрыта!
если ещё кто хочет для себя её закрыть, рисуем пиво и стучимся к крокусу в приват :)

зы. мускули в своём проспекте не наврали - падения производительности я пока не наблюдаю


Название: Re: Qt 4 + MySql-embedded под Windows
Отправлено: aliks-os от Май 28, 2013, 09:04
Так подскажите же в чем же дело...я на те же грабли наступаю...

так-с...для меня тема закрыта!
если ещё кто хочет для себя её закрыть, рисуем пиво и стучимся к крокусу в приват :)

зы. мускули в своём проспекте не наврали - падения производительности я пока не наблюдаю