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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Что я неправильно делаю в простейшем коде?  (Прочитано 10487 раз)
gidrowolf
Гость
« : Ноябрь 15, 2009, 22:29 »

Вот код содранный из примера, но в примере все работает а у меня нет.
Цитировать
#include <QtSql>
#include <QMessageBox>
#include "test.h"
#include "ui_test.h"

QSqlDatabase db;
QSqlQuery query;
QSqlRelationalTableModel model;

test::test(QWidget *parent)
    : QMainWindow(parent), ui(new Ui::test)
{
    ui->setupUi(this);
    db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName(":memory:");
    if (!db.open()) {
        QMessageBox::critical(0, qApp->tr("Cannot open database"),
            qApp->tr("Unable to establish a database connection.\n"
                     "Click Cancel to exit."), QMessageBox::Cancel);
    }
   
    query.exec("create table employee(id int primary key, name varchar(20), city int, country int)");
    query.exec("insert into employee values(1, 'Espen', 5000, 47)");
    query.exec("insert into employee values(2, 'Harald', 80000, 49)");
    query.exec("insert into employee values(3, 'Sam', 100, 1)");

    query.exec("create table city(id int, name varchar(20))");
    query.exec("insert into city values(100, 'San Jose')");
    query.exec("insert into city values(5000, 'Oslo')");
    query.exec("insert into city values(80000, 'Munich')");

    query.exec("create table country(id int, name varchar(20))");
    query.exec("insert into country values(1, 'USA')");
    query.exec("insert into country values(47, 'Norway')");
    query.exec("insert into country values(49, 'Germany')");

    model.setTable("employee");
    model.select();
    ui->tableView->setModel(&model);
}

test::~test()
{
    delete ui;
}

Да еще какието ошибки непонятные:
Цитировать
Запускается G:\DATABASE\test\debug\test.exe...
QSqlQuery::exec: database not open
QSqlQuery::exec: database not open
QSqlQuery::exec: database not open
QSqlQuery::exec: database not open
QSqlQuery::exec: database not open
QSqlQuery::exec: database not open
QSqlQuery::exec: database not open
QSqlQuery::exec: database not open
QSqlQuery::exec: database not open
QSqlQuery::exec: database not open
QSqlQuery::exec: database not open
QSqlQuery::exec: database not open
QSqlDatabasePrivate::removeDatabase: connection 'qt_sql_default_connection' is still in use, all queries will cease to work.

G:\DATABASE\test\debug\test.exe завершилась с кодом 0

Вроде все делаю как надо, и вроде как все элементарно. Чего я непонимаю?
Записан
nixman05
Гость
« Ответ #1 : Ноябрь 15, 2009, 23:27 »

Вначале

Код
C++ (Qt)
QSqlQuery *query;
 


После открытия базы
Код
C++ (Qt)
query=new QSqlQuery(db);
query->exec("create .... ");
 
Записан
Makss
Гость
« Ответ #2 : Ноябрь 15, 2009, 23:34 »

эти варнинги что вивелись, они выводятся вот в этих строках кода
Код:
query.exec("create table employee(id int primary key, name varchar(20), city int, country int)");
    query.exec("insert into employee values(1, 'Espen', 5000, 47)");
    query.exec("insert into employee values(2, 'Harald', 80000, 49)");
    query.exec("insert into employee values(3, 'Sam', 100, 1)");

    query.exec("create table city(id int, name varchar(20))");
    query.exec("insert into city values(100, 'San Jose')");
    query.exec("insert into city values(5000, 'Oslo')");
    query.exec("insert into city values(80000, 'Munich')");

    query.exec("create table country(id int, name varchar(20))");
    query.exec("insert into country values(1, 'USA')");
    query.exec("insert into country values(47, 'Norway')");
    query.exec("insert into country values(49, 'Germany')");

в варнингах написано что база не была открыта

Лудше QSqlQuery делать локальной переменной, т.к. они у вас обе глобальные,
Код:
QSqlDatabase db;
QSqlQuery query;
думаю как раз из-за этого и выводятся те сообщения... хотя это догадки всего лишь, но на счёт перенести "QSqlQuery query" в конструктор вашего окна я советовал бы попробовать
« Последнее редактирование: Ноябрь 15, 2009, 23:39 от Makss » Записан
gidrowolf
Гость
« Ответ #3 : Ноябрь 15, 2009, 23:52 »

Вначале

Код
C++ (Qt)
QSqlQuery *query;
 


После открытия базы
Код
C++ (Qt)
query=new QSqlQuery(db);
query->exec("create .... ");
 

Огромное спасибо, ты прям озарил меня  Улыбающийся.

Просто в примере "relationaltablemodel" нигде нет таких строчек и я думал еще откуда прога знает с какой БД я хочу работать. И как интерено работает пример "relationaltablemodel" без этого указания о_О.
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #4 : Ноябрь 16, 2009, 04:41 »

>>И как интерено работает пример "relationaltablemodel" без этого указания о_О.
пытается работать с соединением по умолчанию.
соединение создаётся и открывается с помощью класса QSqlDataBase
Записан

Юра.
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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