Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: QSqlTableRelationalModel
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Разработка баз данных
esculapius
Доброго времени суток, всем!
Программированием занимаюсь очень короткое время, на Qt4.5.0. и по-давно.
Задача такова: Используя QSqlRelationalTableModel, создаю модель, представляю его.
в него можно добавлять данные, редактировать его, удалять записи.
При это каждая запись уникальна, обеспечивается движком БД (SQLite3).
Хотелось бы при вводе запись, уже имеющегося в БД, выводилось сообщение, что данная запись уже есть в нем и узнать какой сигнал или функция отвечает за это! Поможите, люди добрыя, темному!!! Заранее благодарю за помощь! :blink: а то башка не соображает совсем
Litkevich Yuriy
Цитата(esculapius @ 14.2.2010, 16:18) *
При это каждая запись уникальна, обеспечивается движком БД (SQLite3).
Хотелось бы при вводе запись, уже имеющегося в БД, выводилось сообщение, что данная запись уже есть в нем
сигнал в такой ситуации не испускается, просто произойдёт ошибка. Т.е. некая функция сохранения вернёт ложь. Далее ошибку можно посмотреть, например так:
model->lastError().databaseText()
esculapius
Спасибо, Юрий! Рaзрешил проблему. Интересно то, что ошибка не выдается.
Если кому интересно, в БД есть таблица:
...
create table sostav_group(sgid integer primary key, group_cod smallint, stutend_cod smallint unique, unique(group_cod,stutend_cod));
...


В QtCreator создаю релашнмодель и табличное представление для нее.

    MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent), ui(new Ui::MainWindow)
{...
    sostav_group = new QSqlRelationalTableModel();
    sostav_group->setTable("sostav_group");
    sostav_group->setHeaderData(1, Qt::Horizontal, QString::fromLocal8Bit("Группа"));
    sostav_group->setHeaderData(2, Qt::Horizontal, QString::fromLocal8Bit("Студент"));
    sostav_group->setRelation(1,QSqlRelation("groups","group_cod","group_name"));
    sostav_group->setRelation(2,QSqlRelation("students","Stutend_cod","FIO"));
    sostav_group->setSort(1,Qt::AscendingOrder);

    //ui->tableView_3->setColumnHidden(2, true);
    sostav_group->select(); sostav_group->setEditStrategy(QSqlTableModel::OnManualSubmit);
    ui->tableView_3->setModel(sostav_group);
    ui->tableView_3->setColumnHidden(0, true);
    ui->tableView_3->setSelectionBehavior(QAbstractItemView::SelectRows);
    ui->tableView_3->setItemDelegate(new QSqlRelationalDelegate(this));
    ui->tableView_3->setSelectionMode(QAbstractItemView::SingleSelection);
  
    connect(ui->addStudinGroupButton, SIGNAL(clicked()),this, SLOT(slotaddStudinGroup()));
    connect(ui->DelStudinGroupButton,SIGNAL(clicked()), this, SLOT(slotDelStudinGroup()));
    connect(ui->saveButton,SIGNAL(clicked()),this,SLOT(slotSave()));
    ...
}

Идея: при нажатии кнопки saveButton вызывается слот slotSave()
...
void MainWindow::slotSave()
{
    students->submitAll();
    students->select();
  //  qDebug()<<"Привет мир!";
    ved_kafedra->submitAll();
    ved_kafedra->select();
    //
    zadoljnost->submitAll();
    zadoljnost->select();
    sostav_group->submitAll();
    if (sostav_group->submitAll()==false)
    {
        QMessageBox::critical(0,"CООБЩЕНИЕ","Данная запись уже существует");
    }
    else
    {
     QMessageBox::information(0,"CООБЩЕНИЕ","Изменения сохранены");
    }
    sostav_group->select();
}
...

в реализации, которой для сохранения изменений используется функция submitAll(). Последняя возвращает истину, если изменения сохранены, иначе ложь.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.