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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Qt 4.5 проблема с изменением базы в MySQL  (Прочитано 5119 раз)
vovan1982
Гость
« : Март 07, 2009, 01:07 »

Привет всем!
Народ может кто сталкивался, вообщем проблема следующая
Устанавливаю соединение с MySql, после чего выполняю запрос на создание новой базы, затем выбираю новосозданную базу в качестве основной.
В Qt 4.4.3 всё работало нормально а в Qt 4.5.0 получаю ошибку при выборе базы.

Вот ошибка:
This command is not supported in the prepared statement protocol yet QMYSQL3: Unable to prepare statement

Вот код:
Код:
        
        QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
        db.setHostName(dialog.adressServerDB->text());
        db.setPort(dialog.portServerDB->value());
        db.setUserName(dialog.rootLogin->text());
        db.setPassword(dialog.rootPass->text());
        bool connected = db.open();
        if (!connected) {
            textEdit->append(tr("Не могу соединиться: "));
            textEdit->append(db.lastError().text());
            return;
        }else{
            textEdit->append(tr("Соединение с сервером установленно!"));
        }
        QSqlQuery sql = QSqlQuery();
        sql.exec("SHOW DATABASES;");
        while (sql.next())
        {
            if( sql.value(0).toString() == dialog.nameNewDB->text() )
            {
                baseFlag = true;
                break;
            }
        }
        if (baseFlag)
        {
            textEdit->append(tr("БД с названием %1 уже существует!!!").arg(dialog.nameNewDB->text()));
            textEdit->append(tr("БД не создана!!!"));
            cloceDB(db);
            return;
        }
        query = "create database "+dialog.nameNewDB->text()+" character set utf8";
        textEdit->append(tr("Создаётся база данных %1 ...").arg(dialog.nameNewDB->text()));
        sql.exec(query);
        if ( sql.lastError().type() == QSqlError::NoError )
        {
            textEdit->append(tr("База данных %1 созданна!").arg(dialog.nameNewDB->text()));
        }else{
            textEdit->append( tr("Не удалось создать базу данных %1:").arg(dialog.nameNewDB->text()));
            textEdit->append(sql.lastError().text());
            cloceDB(db);
            return;
        }
        query = "use "+dialog.nameNewDB->text();
        textEdit->append(tr("Устанавливается соединение с базой данных %1 ...").arg(dialog.nameNewDB->text()));
        sql.exec(query);
        if ( sql.lastError().type() == QSqlError::NoError )
        {
            textEdit->append(tr("Соединение установленно!"));
        }else{
            textEdit->append( tr("Не удалось установить соединение с базой данных %1:").arg(dialog.nameNewDB->text()));
            textEdit->append(sql.lastError().text());
            cloceDB(db);
            return;
        }

И на этом работа проги прирывается с указанной выше ошибкой.

Ни кто не вкурсе, это баг или в 4.5 изменение БД как то иначе делается?
Записан
vovan1982
Гость
« Ответ #1 : Март 10, 2009, 19:18 »

Вообщем как я понимаю никто не сталкивался.

Провёл ещё пару тестов и вернулся на 4.4.3, наверное это баг.

Мои тесты:

Установил qt-sdk-win-opensource-2009.01.exe, при выполнении в программе
Код:
QSqlQuery sql = QSqlQuery();
sql.exec("use proba");
proba - имя базы данных в MySQL
получаем вышеуказонную ошибку.

Удалил qt-sdk-win-opensource-2009.01.exe.
Скачал одельно
qt-creator-win-opensource-1.0.0.1.exe
и
qt-win-opensource-4.5.0-mingw.exe
установил, скомпилил библиотеки, настроил QtCreator
всёравно получаю эту ошибку.

Попробовал сделать такой финт (но не уверен что это правильно):
Код:
QSqlQuery sql = QSqlQuery();
sql.exec("create database proba character set utf8");
db.setDatabaseName("proba");
db.open();
подключиться к созданной базе удалось, но при выполнении запроса
Код:
sql.exec(
                "CREATE TABLE typeaccessories ("
                "CodTypeAccessories INT(11) UNSIGNED AUTO_INCREMENT,"
                "Name VARCHAR(50) NOT NULL,"
                "PRIMARY KEY (CodTypeAccessories),"
                "UNIQUE INDEX Name USING BTREE (Name) ) "
                "ENGINE = INNODB "
                "AUTO_INCREMENT = 1 "
                "CHARACTER SET utf8 COLLATE utf8_general_ci; ");
получил туже ошибку.
В итоге удалил qt-win-opensource-4.5.0-mingw.exe,
поставил назад qt-win-opensource-4.4.3-mingw.exe
и всё заработало как надо.

Никто не вкурсе где можно тролям баг репорт на эту тему накатать?
Желательно на русском, а то я с английским не очень.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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