Russian Qt Forum

Qt => Базы данных => Тема начата: vldefender от Июнь 15, 2009, 06:40



Название: Решено: Не получается создать таблицу.
Отправлено: vldefender от Июнь 15, 2009, 06:40
Добрый день, у меня не получается создать таблицу.
Код
C++ (Qt)
#include <MySql/mysql.h>
#include <QtSql/qsql.h>
#include <QtSql/qsqldriver.h>
#include <QtSql/qsqldatabase.h>
#include <QtSql/qsqlquery.h>
#include <QtSql/qsqlerror.h>
#include <QtSql/qsqltablemodel.h>
...
void uvd::connectMysql(QString account, QString password)
{
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL", "mydb");
db.setHostName("localhost");
db.setDatabaseName("db1");
db.setUserName(account);
db.setPassword(password);
bool connected = db.open();
if (!connected)
QMessageBox::critical(this, QObject::tr("Database Error"), db.lastError().text());
}
 
void uvd::createTables()
{
   QSqlQuery query = QSqlQuery();
   query.exec("create table ovd1(id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(40) NOT NULL, phone SMALLINT)");
}
 
В чём моя ошибка?


Название: Re: Не получается создать таблицу.
Отправлено: ритт от Июнь 15, 2009, 07:51
Цитировать
-    QSqlQuery query = QSqlQuery();
+    QSqlQuery query = QSqlQuery(QSqlDatabase::database("mydb"));


Название: Re: Не получается создать таблицу.
Отправлено: Karl-Philipp от Июнь 15, 2009, 08:05
Цитировать
-    QSqlQuery query = QSqlQuery();
+    QSqlQuery query = QSqlQuery(QSqlDatabase::database("mydb"));
Константин, объясни, пожалуйста:
если я правильно понял, в коде используется конструктор, приведённый ниже

Цитировать
QSqlQuery::QSqlQuery ( const QString & query = QString(), QSqlDatabase db = QSqlDatabase() )
Constructs a QSqlQuery object using the SQL query and the database db. If db is not specified, the application's default database is used. If query is not an empty string, it will be executed.

Если БД не определена, используется БД приложения по умлочанию. По умолчанию выходит у нас есть база mydb.
Вроде бы должно выполняться корректно в mydb. Где я неправ?


Название: Re: Не получается создать таблицу.
Отправлено: Barmaglodd от Июнь 15, 2009, 08:41
В этом случае по умолчанию ничего нет.
Если бы написали
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
, то она бы была по умолчанию.
А так напрямую имя задали, по нему и обращаться.


Название: Re: Не получается создать таблицу.
Отправлено: Karl-Philipp от Июнь 15, 2009, 08:53
спасибо :)


Название: Re: Не получается создать таблицу.
Отправлено: vldefender от Июнь 15, 2009, 11:26
Константин, Barmaglodd, спасибо :).