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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QSqlQuery неожиданно падает  (Прочитано 2541 раз)
crazymonkey
Гость
« : Июнь 19, 2014, 21:00 »

Добрый день.
Есть вот такой код: по нажатию на кнопку код падает.

Код:

MainWindow::MainWindow(QWidget *parent) :  QMainWindow(parent), ui(new Ui::MainWindow)
{

    dbPostgres = &QSqlDatabase::addDatabase("QPSQL");
    dbPostgres->setHostName("localhost");
    dbPostgres->setDatabaseName("information_system");
    dbPostgres->setUserName("postgres");
    dbPostgres->setPassword("p@ssw0rd");
    bool ok = dbPostgres->open();

    ui->setupUi(this);

    connect(ui->pushButton,SIGNAL(clicked()),this,SLOT(addNewUser()));
    setListOfTables();
    setListOfUsers();
}

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

void MainWindow::setListOfTables()
{
    QSqlQuery *queryGetTables = new QSqlQuery(*dbPostgres);
    queryGetTables->exec("SELECT table_name FROM information_schema.tables WHERE table_schema = 'public'");
    while(queryGetTables->next()){
        ui->textBrowser->append(queryGetTables->value(0).toString());
    }
}

void MainWindow::setListOfUsers()
{
    QSqlQuery *queryGetUsers = new QSqlQuery(*dbPostgres);
    queryGetUsers->exec("SELECT usename FROM pg_catalog.pg_user");
    auto k=0;
    while(queryGetUsers->next()){
        ui->comboBox->insertItem(k,queryGetUsers->value(0).toString());
        k++;
    }
}

void MainWindow::addNewUser()
{
    QSqlQuery *addNewUsers = new QSqlQuery(*dbPostgres);
    QString currentEditedUser = ui->lineEdit->text();
    if (currentEditedUser == ""){
        QMessageBox::information(this,"Information","Can't create user without name",QMessageBox::Ok);
        return;
    }
    databaseUsers->append(currentEditedUser);
    addNewUsers->exec("CREATEUSER " + currentEditedUser);
}

Функции выборки пользователей и таблиц отрабатывают, а вот по нажатию на кнопу происходит падение.
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #1 : Июнь 19, 2014, 21:09 »

На сколько я вижу, в конструкторе addDatabase возвращает временный объект соединения.
Вы берете его адрес и используете. После завершения конструктора, временный объект разрушается и указатель начинает указывать на разрушенный объект.
Посмотрите в документации и примерах, как нужно работать с соединениями QSqlDatabase.
Записан
crazymonkey
Гость
« Ответ #2 : Июнь 19, 2014, 21:13 »

Да уж. Прошляпил такую простую штуку Улыбающийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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