Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt Разработка баз данных _ Сколько нужно QSqlDatabase на проэкт ?

Автор: potkin 26.8.2010, 20:59

Сколько нужно QSqlDatabase на проэкт ???

QSqlDatabase db = QSqlDatabase::addDatabase(ui->cBServer->currentText());

Автор: Алексей1153 26.8.2010, 21:17

А в чём подвох ? :)
Напиши более развёрнуто мысль свою

Автор: potkin 26.8.2010, 22:12

//00000000000
    QSqlDatabase db = QSqlDatabase::addDatabase(ui->cBServer->currentText());
    db.setHostName(ui->lEHostName->text());
    db.setDatabaseName(ui->lEDatabaseName->text());
    db.setUserName(ui->lEUserName->text());
    db.setPassword(ui->lEPasswor->text());

//11111111111
    QSqlTableModel *model;
    model = new QSqlTableModel();
    model->setTable("question");
    model->filter();
    model->setEditStrategy(QSqlTableModel::OnManualSubmit);
   if (model->select())
    {
       model->setHeaderData(0, Qt::Horizontal, tr("questionID"));
       model->setHeaderData(1, Qt::Horizontal, tr("urgency"));
       ui->tVQuestions->setModel(model);
       ui->tVQuestions->resizeColumnsToContents();
    }
    else QMessageBox::warning(this, tr("Cached Table"), tr("The database reported an error: %1").arg(model->lastError().text()));

//22222222222
    QSqlDatabase db1 = QSqlDatabase::addDatabase(ui->cBServer->currentText());
    db1.setHostName(ui->lEHostName->text());
    db1.setDatabaseName(ui->lEDatabaseName->text());
    db1.setUserName(ui->lEUserName->text());
    db1.setPassword(ui->lEPasswor->text());

    QSqlQuery query(db1);
    if(db1.open())
    {
        query.exec("SELECT questionurgencyID, name FROM questionurgency");
        while (query.next()) ui->cBurgency->addItem(query.value(1).toString(), query.value(0).toString());
        db1.close();
    }
    else QMessageBox::warning(this, tr("Cached Table"), tr("The database reported an error: %1").arg("DB:"+db1.lastError().text()+", QUERY:"+query.lastError().text()));


Вследситвии такого кода, в таблице ячейки будут не заполнеными.

Тоесть,е сли у меня в таблице "question" 2-е записи, то в таблице "ui->tVQuestions" появятся 2-е строки с заполнеными ячейками. Но после выполнения кода:
 QSqlDatabase db1 = QSqlDatabase::addDatabase(ui->cBServer->currentText());

Две строки останутся, но ячейки станут пустые :(

Автор: molchanoviv 27.8.2010, 8:02

Есть такой необязательный параметр как имя соединения следующий за названием драйвера в функции addDatabase используй его. Ибо по умолчанию ставится название qt_sql_default_connection

Автор: potkin 27.8.2010, 9:21

molchanoviv,
Спасибо, всё заработало :)

Автор: Litkevich Yuriy 27.8.2010, 19:36

вообще практика простая:
создаём соединение, где-то и заранее:
QSqlDatabase db1 = QSqlDatabase::addDatabase("тут имя драйвера");

используем потом где-то
QSqlDatabase db1 = QSqlDatabase::database();

Автор: CodeHunter 18.10.2010, 9:55

Цитата(Litkevich Yuriy @ 27.8.2010, 19:36) *
используем потом где-то?
QSqlDatabase db1 = QSqlDatabase::database();



Ага, а попробуй сделать так в много поточной программе.. Я посмотрю что ты получишь !! :lol2:
Тут все зависит от архитектуры приложения !

Автор: igor_bogomolov 18.10.2010, 11:55

Цитата(CodeHunter)
Ага, а попробуй сделать так в много поточной программе.. Я посмотрю что ты получишь !!
Тут все зависит от архитектуры приложения !
Что за очередной дурацкий комментарий? Если ты не читаешь документации и пытаешься использовать соединение с БД созданном в одном потоке из другого, то это твои проблемы.

Автор: CodeHunter 18.10.2010, 13:06

Цитата(Litkevich Yuriy @ 27.8.2010, 19:36) *
создаём соединение, где-то и заранее:

Где-то может быть где угодно !

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)