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

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

Страниц: [1] 2 3   Вниз
  Печать  
Автор Тема: Qt 5.0.1 MySQL-problems  (Прочитано 14476 раз)
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

Заранее благодарю за ваше внимание и прошу о помощи.
Записан
_OLEGator_
Гость
« Ответ #1 : Июнь 15, 2013, 13:22 »

Необходимо в папку sqldrivers положить только релизный драйвер.
Записан
Leopold
Гость
« Ответ #2 : Июнь 15, 2013, 13:26 »

Необходимо в папку sqldrivers положить только релизный драйвер.
Сделал то, что вы написали, но драйвер всё еще не погружается. Я и проект пересобрал, но не помогло.
Записан
Hellraiser
Бывалый
*****
Offline Offline

Сообщений: 451


Просмотр профиля
« Ответ #3 : Июнь 15, 2013, 13:29 »

По второму вопросу: после exec надо позиционировать курсор на запись, используя методы next(), first() и т.п.
Записан
Leopold
Гость
« Ответ #4 : Июнь 15, 2013, 14:22 »

По второму вопросу: после exec надо позиционировать курсор на запись, используя методы next(), first() и т.п.
Прошу прощения, но не могли бы вы объяснить подробнее или дать ссылку на источник? Пожалуйста. Я попробовал сделать так, как нашел в примерах, но результат тот же.
« Последнее редактирование: Июнь 15, 2013, 14:31 от Leopold » Записан
Hellraiser
Бывалый
*****
Offline Offline

Сообщений: 451


Просмотр профиля
« Ответ #5 : Июнь 15, 2013, 14:39 »

В качестве источника надо пользоваться документацией, там этот вопрос специально оговорен во втором абзаце.
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #6 : Июнь 15, 2013, 15:20 »

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

Юра.
Leopold
Гость
« Ответ #7 : Июнь 16, 2013, 11:56 »

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

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

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

Я добавил в эту переменную путь относительно файла запуска, т.е. \\sqldrivers . Но оно не работает. Поисковик кидает меня на статьи про компиляцию Qt'a.  Грустный
« Последнее редактирование: Июнь 16, 2013, 12:14 от Leopold » Записан
_OLEGator_
Гость
« Ответ #8 : Июнь 16, 2013, 12:24 »

mysql-драйвер для Qt тянет за собой и dll mysql - вот путь к ним должен быть доступен через PATH, а не путь к файлу запуска или sqldrivers. Драйвер при запуске не скажет тебе о недостающих dll, а просто не заработает и не будет доступен в приложении.
Записан
Leopold
Гость
« Ответ #9 : Июнь 16, 2013, 12:50 »

mysql-драйвер для Qt тянет за собой и dll mysql - вот путь к ним должен быть доступен через PATH, а не путь к файлу запуска или sqldrivers. Драйвер при запуске не скажет тебе о недостающих dll, а просто не заработает и не будет доступен в приложении.
Путь к C:\MySQL\lib\opt у меня уже был указан, libmysql.dll лежала в корне и в папке windows, путь к которой тоже есть в переменной PATH, а к папке sqldrivers путь указывать не нужно. Но файлов с MySQL связанных я не знаю, почему тогда не работает?
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #10 : Июнь 16, 2013, 13:35 »

Скачай Dependency Walker, открой в нём своё приложение и запусти его (п. меню Profile) он покажет, есть ли какие-то не достающие зависимости
Записан

Юра.
Leopold
Гость
« Ответ #11 : Июнь 16, 2013, 15:34 »

Скачай Dependency Walker, открой в нём своё приложение и запусти его (п. меню Profile) он покажет, есть ли какие-то не достающие зависимости
Скачал, сделал как вы написали. Судя по всему библиотека mysql вроде подгружается, не подгружается ряд других библиотек. Еще я увидел какую-то ошибку связанную с QSQLMYSQL.DLL. Прилагаю скрин, т.к. сам ни черта не пойму.

EDIT: Я вот еще подумал, может стоит их как-то подключить через .pro файл?
« Последнее редактирование: Июнь 16, 2013, 21:52 от Leopold » Записан
Leopold
Гость
« Ответ #12 : Июнь 17, 2013, 17:41 »

Господа, пожалуйста, любые идеи. Послезавтра защита, а я даже программу не смогу продемонстрировать.
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #13 : Июнь 17, 2013, 19:15 »

1) открывай командную строку виндовоза
2) path
вывод команды клади сюда, будем по шагам посмотреть
Записан

Юра.
Leopold
Гость
« Ответ #14 : Июнь 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
Записан
Страниц: [1] 2 3   Вверх
  Печать  
 
Перейти в:  


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