Привет всем!
Народ может кто сталкивался, вообщем проблема следующая
Устанавливаю соединение с 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 изменение БД как то иначе делается?
Вообщем как я понимаю никто не сталкивался.
Провёл ещё пару тестов и вернулся на 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
и всё заработало как надо.
Никто не вкурсе где можно тролям баг репорт на эту тему накатать?
Желательно на русском, а то я с английским не очень.