crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> QSqlRelationalTableModel - не редактируются данные
Rudel
  опции профиля:
сообщение 16.6.2009, 22:33
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 1
Регистрация: 16.6.2009
Пользователь №: 830

Спасибо сказали: 0 раз(а)




Репутация:   0  


Пишу программу с использованием SQLITE. База данных создается, удалением, добавление, поиск - сделал. Однако редактирование не работает. Данные просто не меняются. Поиск по нету ничего не дал.
Есть ли какие-нибудь определенные моменты, которые могут привести к такому рода поведению?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
LonelyDreamer
  опции профиля:
сообщение 25.6.2009, 8:05
Сообщение #2


Новичок


Группа: Новичок
Сообщений: 4
Регистрация: 25.6.2009
Пользователь №: 850

Спасибо сказали: 0 раз(а)




Репутация:   0  


Аналогичная проблема. На форме два QTableView для отображения данных из двух таблиц БД (SQLite3). Для одной таблицы используется QSqlTableModel и всё нормально (редактируется), для второй QSqlRelationalTableModel и данные не редактируются. Для OnFieldChange после редактирования данных в QTableView сразу же возвращается старое значение. Для OnRowChange после редактирования в QTableView отображатеся новое значение, но в БД остается старое, и после редактирования какой-нибудь другой ячейки в QTableView старое значение возвращается обратно.

Как заставить QTableView\QSqlRelationalTableModel вносить изменения в БД так же, как это делают QTableView\QSqlTableModel?

Код, где создаются Model/View:

Раскрывающийся текст

void DicDialog::showEvent(QShowEvent *event)
{
    db = QSqlDatabase::database("tutor_connection", false);
    originalModel = new QSqlTableModel(this, db);
    originalModel->setTable("original_phrases");
    originalModel->setEditStrategy(QSqlTableModel::OnFieldChange);
    originalModel->setSort(1, Qt::AscendingOrder);
    originalModel->setHeaderData(0, Qt::Horizontal, tr("id"));
    originalModel->setHeaderData(1, Qt::Horizontal, tr("phrase"));
    originalModel->setHeaderData(2, Qt::Horizontal, tr("count"));
    originalModel->select();

    originalView->setModel(originalModel);
    originalView->setSelectionBehavior(QAbstractItemView::SelectItems);
    originalView->setSelectionMode(QAbstractItemView::SingleSelection);
    originalView->setColumnHidden(0, true);
    originalView->setEditTriggers(QAbstractItemView::DoubleClicked |
                                  QAbstractItemView::SelectedClicked |
                                  QAbstractItemView::EditKeyPressed |
                                  QAbstractItemView::AnyKeyPressed);

    QHeaderView *header = originalView->horizontalHeader();
    header->setResizeMode(1, QHeaderView::Stretch);
    header->setResizeMode(2, QHeaderView::ResizeToContents);



    cardsRelModel = new QSqlRelationalTableModel(this, db);
    cardsRelModel->setTable("cards");
    cardsRelModel->setRelation(1, QSqlRelation("original_phrases", "id", "phrase"));
    cardsRelModel->setRelation(2, QSqlRelation("translated_phrases", "id", "phrase"));
    //cardsRelModel->setEditStrategy(QSqlTableModel::OnFieldChange);
    cardsRelModel->setEditStrategy(QSqlTableModel::OnRowChange);
    cardsRelModel->setSort(1, Qt::AscendingOrder);
    cardsRelModel->setHeaderData(0, Qt::Horizontal, tr("id"));
    cardsRelModel->setHeaderData(1, Qt::Horizontal, tr("original"));
    cardsRelModel->setHeaderData(2, Qt::Horizontal, tr("translated"));
    cardsRelModel->setHeaderData(3, Qt::Horizontal, tr("points"));
    cardsRelModel->setHeaderData(4, Qt::Horizontal, tr("date/time"));
    cardsRelModel->select();

    cardsView->setModel(cardsRelModel);
    cardsView->setItemDelegate(new QSqlRelationalDelegate(this));
    //cardsView->setItemDelegateForColumn(1, new QSqlRelationalDelegate(this));
    //cardsView->setItemDelegateForColumn(2, new QSqlRelationalDelegate(this));
    cardsView->setSelectionBehavior(QAbstractItemView::SelectItems);
    cardsView->setSelectionMode(QAbstractItemView::SingleSelection);
    cardsView->setColumnHidden(0, true);
    cardsView->setEditTriggers(QAbstractItemView::DoubleClicked |
                               QAbstractItemView::SelectedClicked |
                               QAbstractItemView::EditKeyPressed |
                               QAbstractItemView::AnyKeyPressed);

    header = cardsView->horizontalHeader();
    header->setResizeMode(1, QHeaderView::Stretch);
    header->setResizeMode(2, QHeaderView::Stretch);
    header->setResizeMode(3, QHeaderView::ResizeToContents);
    header->setResizeMode(4, QHeaderView::Stretch);
}

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 22.12.2024, 17:15