Russian Qt Forum

Qt => Базы данных => Тема начата: Leopold от Июнь 15, 2013, 13:17



Название: Qt 5.0.1 MySQL-problems
Отправлено: Leopold от Июнь 15, 2013, 13:17
Доброго времени суток. Прежде чем задавать вопросы, я поискал ответы на форуме, но темы с ответами либо мертвы, либо отсутствуют. И сразу предупреждаю, знания о Qt и Cpp весьма поверхностны. Имеется всего два вопроса:

1)Есть самостоятельно собранный по инструкции драйвер MySQL. Собралось две .dll: qsqlmysqld.dll(я так понял, что это debag) и qsqlmysql.dll(а это, видимо, release). В сборке проекта debug всё работает нормально, а release сборка драйвер не подгружает. Пробовал кидать эти 2 библиотеки в каталог sqldrivers (который предварительно создал) в каталоге с программой и непосредственно в каталог программы, libmySQL.dll тоже кидал в каталог программы, пробовал и реестр чистить (HKEY_CURRENT_USER\Software\Trolltech), но никаких результатов это не дало. Очень нужна release сборка.

2)В приведенном ниже куске кода я пытаюсь прочитать все записи таблицы guests, записав их в QTableWidget. Потом я пытаюсь прочитать записи из другой таблицы, используя записанные ранее данные, но второй запрос возвращает ошибку. Помогите найти ошибку, может в синтаксисе MySQL что-то не так? Я сравнивал с примерами и ошибки не находил.
Код:
void MainWindow::on_refreshClient_clicked()
{
    int n = ui->clientTable->rowCount();
    for ( int i = 0; i < n; i++ ) ui->clientTable->removeRow(0);

    QSqlQuery query(db);

    query.exec("SELECT * FROM guests");

    while (query.next())
    {
        ui->clientTable->insertRow(0);
        ui->clientTable->setItem(0, 0, new QTableWidgetItem(query.value(1).toString()));
        ui->clientTable->setItem(0, 2, new QTableWidgetItem(query.value(2).toString()));
        ui->clientTable->setRowHeight(0, 20);
    }


    n = ui->clientTable->rowCount();
    for ( int i = 0; i < n; i++ )
    {
        query.prepare("SELECT * FROM orders WHERE idguest = ':name'");
        query.bindValue(":name",ui->clientTable->item(i,0)->text());
        query.exec();
        ui->clientTable->setItem(i, 1, new QTableWidgetItem(query.value(0).toInt()));
        ui->clientTable->setItem(i, 3, new QTableWidgetItem(query.value(4).toString()));
        ui->clientTable->setItem(i, 4, new QTableWidgetItem(query.value(5).toString()));
     }
}

Вывод приложения:
Код:
QSqlQuery::value: not positioned on a valid record
QSqlQuery::value: not positioned on a valid record
QSqlQuery::value: not positioned on a valid record

Заранее благодарю за ваше внимание и прошу о помощи.


Название: Re: Qt 5.0.1 MySQL-problems
Отправлено: _OLEGator_ от Июнь 15, 2013, 13:22
Необходимо в папку sqldrivers положить только релизный драйвер.


Название: Re: Qt 5.0.1 MySQL-problems
Отправлено: Leopold от Июнь 15, 2013, 13:26
Необходимо в папку sqldrivers положить только релизный драйвер.
Сделал то, что вы написали, но драйвер всё еще не погружается. Я и проект пересобрал, но не помогло.


Название: Re: Qt 5.0.1 MySQL-problems
Отправлено: Hellraiser от Июнь 15, 2013, 13:29
По второму вопросу: после exec надо позиционировать курсор на запись, используя методы next(), first() и т.п.


Название: Re: Qt 5.0.1 MySQL-problems
Отправлено: Leopold от Июнь 15, 2013, 14:22
По второму вопросу: после exec надо позиционировать курсор на запись, используя методы next(), first() и т.п.
Прошу прощения, но не могли бы вы объяснить подробнее или дать ссылку на источник? Пожалуйста. Я попробовал сделать так, как нашел в примерах, но результат тот же.


Название: Re: Qt 5.0.1 MySQL-problems
Отправлено: Hellraiser от Июнь 15, 2013, 14:39
В качестве источника надо пользоваться документацией, там этот вопрос специально оговорен (http://qt-project.org/doc/qt-5.0/qtsql/qsqlquery.html#exec) во втором абзаце.


Название: Re: Qt 5.0.1 MySQL-problems
Отправлено: lit-uriy от Июнь 15, 2013, 15:20
при запуске приложения, чтобы подгружался драйвер, нужно чтобы зависимые библиотеки были видны приложению.
Т.е. MySQL должен быть виден через переменную окружения PATH при запуске программы.


Название: Re: Qt 5.0.1 MySQL-problems
Отправлено: Leopold от Июнь 16, 2013, 11:56
В качестве источника надо пользоваться документацией, там этот вопрос специально оговорен (http://qt-project.org/doc/qt-5.0/qtsql/qsqlquery.html#exec) во втором абзаце.

Спасибо, я почитал и у меня всё получилось.  :) Впредь, буду пользоваться этой документацией.

при запуске приложения, чтобы подгружался драйвер, нужно чтобы зависимые библиотеки были видны приложению.
Т.е. MySQL должен быть виден через переменную окружения PATH при запуске программы.

Я добавил в эту переменную путь относительно файла запуска, т.е. \\sqldrivers . Но оно не работает. Поисковик кидает меня на статьи про компиляцию Qt'a.  :(


Название: Re: Qt 5.0.1 MySQL-problems
Отправлено: _OLEGator_ от Июнь 16, 2013, 12:24
mysql-драйвер для Qt тянет за собой и dll mysql - вот путь к ним должен быть доступен через PATH, а не путь к файлу запуска или sqldrivers. Драйвер при запуске не скажет тебе о недостающих dll, а просто не заработает и не будет доступен в приложении.


Название: Re: Qt 5.0.1 MySQL-problems
Отправлено: Leopold от Июнь 16, 2013, 12:50
mysql-драйвер для Qt тянет за собой и dll mysql - вот путь к ним должен быть доступен через PATH, а не путь к файлу запуска или sqldrivers. Драйвер при запуске не скажет тебе о недостающих dll, а просто не заработает и не будет доступен в приложении.
Путь к C:\MySQL\lib\opt у меня уже был указан, libmysql.dll лежала в корне и в папке windows, путь к которой тоже есть в переменной PATH, а к папке sqldrivers путь указывать не нужно. Но файлов с MySQL связанных я не знаю, почему тогда не работает?


Название: Re: Qt 5.0.1 MySQL-problems
Отправлено: lit-uriy от Июнь 16, 2013, 13:35
Скачай Dependency Walker (http://www.dependencywalker.com/), открой в нём своё приложение и запусти его (п. меню Profile) он покажет, есть ли какие-то не достающие зависимости


Название: Re: Qt 5.0.1 MySQL-problems
Отправлено: Leopold от Июнь 16, 2013, 15:34
Скачай Dependency Walker (http://www.dependencywalker.com/), открой в нём своё приложение и запусти его (п. меню Profile) он покажет, есть ли какие-то не достающие зависимости
Скачал, сделал как вы написали. Судя по всему библиотека mysql вроде подгружается, не подгружается ряд других библиотек. Еще я увидел какую-то ошибку связанную с QSQLMYSQL.DLL. Прилагаю скрин, т.к. сам ни черта не пойму.

EDIT: Я вот еще подумал, может стоит их как-то подключить через .pro файл?


Название: Re: Qt 5.0.1 MySQL-problems
Отправлено: Leopold от Июнь 17, 2013, 17:41
Господа, пожалуйста, любые идеи. Послезавтра защита, а я даже программу не смогу продемонстрировать.


Название: Re: Qt 5.0.1 MySQL-problems
Отправлено: lit-uriy от Июнь 17, 2013, 19:15
1) открывай командную строку виндовоза
2) path
вывод команды клади сюда, будем по шагам посмотреть


Название: Re: Qt 5.0.1 MySQL-problems
Отправлено: Leopold от Июнь 17, 2013, 19:31
1) открывай командную строку виндовоза
2) path
вывод команды клади сюда, будем по шагам посмотреть

PATH=C:\Program Files\NVIDIA Corporation\PhysX\Common;%CommonProgramFiles%\Microsoft Shared\Windows Live;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\Program Files\Universal Extractor;C:\Program Files\Universal Extractor\bin;C:\Program Files\Borland\Delphi7\Bin;C:\Program Files\Borland\Delphi7\Projects\Bpl;C:\Program Files\Common Files\Microsoft Shared\Windows Live;D:\Qt\Qt5.0.1\5.0.1\mingw47_32\bin;D:\Qt\Qt5.0.1\Tools\MinGW\bin;D:\QtProjects\ikar-build-Desktop_Qt_5_0_1_MinGW_32bit-______\release\sqldrivers


Название: Re: Qt 5.0.1 MySQL-problems
Отправлено: lit-uriy от Июнь 17, 2013, 20:36
MySQL не вижу.

делай bat-файл с таким содержимым:
set MYSQLPATH=path/to/mysql/bin
set PATH=%PATH%;MYSQLPATH
start path/to/myprogramm

если путь к мускулю содержит пробелы, то возьми его в кавычки

запусти этот bat-файл из командной строки, если что-то не заработает, то посмотри что печатается в командной строке


Название: Re: Qt 5.0.1 MySQL-problems
Отправлено: Leopold от Июнь 17, 2013, 20:55
set MYSQLPATH=path/to/mysql/bin
Прошу прощения, bin? Т.е. путь прописывать непосредственно к серверу? У меня в каталоге Connector C++ каталога bin нет. Я использовал такие пути:

set MYSQLPATH="C:\Program Files\MySQL\MySQL Server 5.6\bin"
set PATH=%PATH%;MYSQLPATH
start D:\QtProjects\ikar-build-Desktop_Qt_5_0_1_MinGW_32bit-______\release

Библиотека всё еще не подключена, вот вывод комстроки:

C:\>set MYSQLPATH="C:\Program Files\MySQL\MySQL Server 5.6\bin"

C:\>set PATH=C:\Program Files\NVIDIA Corporation\PhysX\Common;%CommonProgramFiles%\Microsoft Shared\Windows Live;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\Program Files\Universal Extractor;C:\Program Files\Universal Extractor\bin;C:\Program Files\Borland\Delphi7\Bin;C:\Program Files\Borland\Delphi7\Projects\Bpl;C:\Program Files\Common Files\Microsoft Shared\Windows Live;D:\Qt\Qt5.0.1\5.0.1\mingw47_32\bin;D:\Qt\Qt5.0.1\Tools\MinGW\bin;D:\QtProjects\ikar-build-Desktop_Qt_5_0_1_MinGW_32bit-______\release\sqldrivers;MYSQLPATH;MYSQLPATH

C:\>start D:\QtProjects\ikar-build-Desktop_Qt_5_0_1_MinGW_32bit-______\release\ikar.exe


Название: Re: Qt 5.0.1 MySQL-problems
Отправлено: lit-uriy от Июнь 17, 2013, 20:59
прошу прощения, строку:
set PATH=%PATH%;MYSQLPATH
заменить на
set PATH=%PATH%;%MYSQLPATH%

MYSQLPATH - переменная, её надо в процентики заключить
строку
set MYSQLPATH не трогать, это только создаётся переменная (стал быть без процентов)



Название: Re: Qt 5.0.1 MySQL-problems
Отправлено: lit-uriy от Июнь 17, 2013, 21:00
>Прошу прощения, bin? Т.е. путь прописывать непосредственно к серверу?
да, если быть точнее к библиотекам которые лежат в этом каталоге.


Название: Re: Qt 5.0.1 MySQL-problems
Отправлено: Leopold от Июнь 17, 2013, 21:15
set PATH=%PATH%;MYSQLPATH
заменить на
set PATH=%PATH%;%MYSQLPATH%
Вывод изменился, но релиз по прежнему не работает. :-\


Название: Re: Qt 5.0.1 MySQL-problems
Отправлено: lit-uriy от Июнь 17, 2013, 21:38
запусти отладочную версию черз bat-файл, что-нибудь в консоль пишет? работа с БД идёт?


Название: Re: Qt 5.0.1 MySQL-problems
Отправлено: Leopold от Июнь 17, 2013, 21:54
запусти отладочную версию черз bat-файл, что-нибудь в консоль пишет? работа с БД идёт?

Ничего не изменилось, я что-то не правильно сделал? Вывода в консоль нет, но работа с БД идет.


Название: Re: Qt 5.0.1 MySQL-problems
Отправлено: lit-uriy от Июнь 17, 2013, 22:22
посмотри есть ли в реестре в ветке HKEY_CURRENT_USER\Software\Trolltech\OrganizationDefaults
каталоги с именами типа Qt Plugin Cache 4.5.false


Название: Re: Qt 5.0.1 MySQL-problems
Отправлено: lit-uriy от Июнь 17, 2013, 22:30
1)И ещё, выкладывай свой pro-файл сюда.
2) что за зверя ты упоминал "Connector C++" где, как и зачем ты его используешь?


Название: Re: Qt 5.0.1 MySQL-problems
Отправлено: Leopold от Июнь 17, 2013, 23:22
посмотри есть ли в реестре в ветке HKEY_CURRENT_USER\Software\Trolltech\OrganizationDefaults
каталоги с именами типа Qt Plugin Cache 4.5.false
Да есть, там 4.7 false и 4.8 false. А не могли бы вы объяснить что это за каталоги, если вам не сложно?

1)И ещё, выкладывай свой pro-файл сюда.
2) что за зверя ты упоминал "Connector C++" где, как и зачем ты его используешь?

1)Кидаю весь проект
2)Был в комплекте с MySQL Community Server, и он, как я вспомнил, отношения к делу не имеет. В одной из моих первых попыток скомпилировать библиотеки mysql я пытался прописывать путь к нему.


Название: Re: Qt 5.0.1 MySQL-problems
Отправлено: lit-uriy от Июнь 18, 2013, 10:45
>>Да есть, там 4.7 false и 4.8 false. А не могли бы вы объяснить что это за каталоги, если вам не сложно?
это регистрация неудачных попыток загрузить плагины.
подкаталоги представляют собой путь к приложениям, которые пытались загрузить плагины.


Название: Re: Qt 5.0.1 MySQL-problems
Отправлено: Leopold от Июнь 18, 2013, 18:52
это регистрация неудачных попыток загрузить плагины.
подкаталоги представляют собой путь к приложениям, которые пытались загрузить плагины.
Ясно, спасибо. Есть еще идеи, как мне показать ГЭКу завтра, что у меня есть программа? Может, мне как-то перенести с собой отладочные библиотеки и представить отладочную версию?


Название: Re: Qt 5.0.1 MySQL-problems
Отправлено: lit-uriy от Июнь 18, 2013, 19:20
можно и отладочную, просто бери dll-ки с буквой d
П.С.
У меня на машине нет MySQL проверить проект нет возможности


Название: Re: Qt 5.0.1 MySQL-problems
Отправлено: Leopold от Июнь 18, 2013, 19:51
можно и отладочную, просто бери dll-ки с буквой d
Но для debug-версии нужно больше, чем просто mysqld? Нужна среда Qt, если можно так выразится.


Название: Re: Qt 5.0.1 MySQL-problems
Отправлено: lit-uriy от Июнь 18, 2013, 22:03
а почему для release не нужно?



Название: Re: Qt 5.0.1 MySQL-problems
Отправлено: Leopold от Июнь 18, 2013, 22:22
а почему для release не нужно?

Я имею ввиду для работы, а не компиляции. Или для релиз версии тоже? Я просто не знаю, я же спрашиваю. А где можно увидеть список необходимых ресурсов?


Название: Re: Qt 5.0.1 MySQL-problems
Отправлено: lit-uriy от Июнь 19, 2013, 03:22
вообще это всё в асистенте написано, вкратце можешь посмотреть здесь (http://www.wiki.crossplatform.ru/index.php/Развертывание_приложений_Qt_в_MS_Windows)