Russian Qt Forum

Qt => Базы данных => Тема начата: nikita от Март 23, 2012, 14:42



Название: Не создается база в MYSQL
Отправлено: nikita от Март 23, 2012, 14:42
Всем привет! Заранее прошу прощенья за глупый вопрос, но я недавно начал работать с QT.
Пытаюсь создать базу в MYSQL, но ничего не выходит. Работаю под Линуксом. Код(С++):
#include <QtSql>

int main(int argc, char** argv)
{
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");

    qDebug()<<QSqlDatabase::drivers();
    db.setDatabaseName("myDB.db");
    db.setUserName("root");

    if(!db.isValid())
      qDebug()<<"DataBase not valid!!!";
    else
      qDebug()<<"DataBase valid!!!";

   if(!db.open())
      {
         qDebug()<<"DataBase not create!!!!";
         qDebug()<<db.lastError();
      }
      else
         qDebug()<<"DataBase create!!!!";
      qDebug()<<"Name = "<<db.databaseName();

      db.close();
}

Все собирается при помощи Cmake без ошибок. При запуске пишет в консоль :
("QSQLITE", "QMYSQL3", "QMYSQL")
DataBase valid!!!
DataBase not create!!!!
QSqlError(1049, "QMYSQL: Unable to connect", "Unknown database 'myDB.db'")
Name =  "myDB.db"

Помогите плиз, почему ничего не получается если драйвер MYSQL видет???
P.S.: Если в коде вместо MYSQL указать SQLITE, то всё работает отлично.


Название: Re: Не создается база в MYSQL
Отправлено: QuAzI от Март 23, 2012, 14:46
Расширение db у файлов было ещё во времена тухлого Paradox. SQLite как раз файл создаёт. Пиши без расширения, возможно вообще в кавычки возьми и будет тебе счастье, только сначала сообрази, что не с файлами работаешь, а с нормальной СУБД


Название: Re: Не создается база в MYSQL
Отправлено: QuAzI от Март 23, 2012, 14:50
Нужен сервер, на сервере нужен установленный пароль и если работаешь не локально, нужно при установке MySQL включить опцию удалённого подключения рута.


Название: Re: Не создается база в MYSQL
Отправлено: nikita от Март 23, 2012, 14:51
Писал и без расширения
db.setDatabaseName("myDB");

Все равно ошибка та же!!!!
Все прекрасно работает если вообще не указывать имя базы, но что оно создает - не понятно((


Название: Re: Не создается база в MYSQL
Отправлено: mutineer от Март 23, 2012, 14:51
Писал и без расширения
db.setDatabaseName("myDB");

Все равно ошибка та же!!!!
Все прекрасно работает если вообще не указывать имя базы, но что оно создает - не понятно((

гугли как ставить и запускать сервер нужной БД


Название: Re: Не создается база в MYSQL
Отправлено: nikita от Март 23, 2012, 14:52
Я работаю локально. Как поставить этот сервер?


Название: Re: Не создается база в MYSQL
Отправлено: QuAzI от Март 23, 2012, 14:55
Я ставил 5.0.67 с официального сайта на винде и к нему собирал драйвер.
http://dev.mysql.com/downloads/mysql/5.0.html

Подключаемся с юзверем+паролем к базе, при обломе считаем что БД не создана, пробуем создать:
При создании БД нужно подключаться в режиме админа (root) без указания имени базы данных, затем
Код:
query->exec(QString("CREATE DATABASE `%1` character set utf8").arg(dbname));
query->exec(QString("CREATE USER '%1'@'localhost' IDENTIFIED BY '%2'").arg(dbuser).arg(dbpass));
query->exec(QString("grant all on %1.* to `%2`@`%` IDENTIFIED BY '%3'").arg(dbname).arg(dbuser).arg(dbpass));
И затем отключаемся и снова тыкаемся к нашей созданной базе с нужным логином/паролем.


Название: Re: Не создается база в MYSQL
Отправлено: nikita от Март 23, 2012, 15:04
спасибо, так и сделаю. Надеюсь поможет)


Название: Re: Не создается база в MYSQL
Отправлено: nikita от Апрель 01, 2012, 15:09
Наконец-то разобрался с этим вопросом! Пишу решение для будущих поколений)))
Для работы с MYSQL базами данных действительно нужен сервер( в Линуксе я установил пакет mysql-server). Потом нужно корректно подключиться к этому локальному серверу :
Код (С++)
 
  QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
  db.setUserName("root");
   if(db.open())
  {
      qDebug()<<"Connect to MYSQL server!!!";
      QSqlQuery q("CREATE DATABASE name");
      q.exec();
      db.setDatabaseName("name");
      if(db.open())
        работа с базой
  }