Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: QSqlTAbleModel+QTableView
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Разработка баз данных
iris
Изменяю данные в QTAbleView. Когда пытаюсь занести измененные данные в базу, ничего не заносится
функция
void Window::insert(){
    model->database().transaction();
    if (model->submitAll()){
        model->database().commit();
    } else {
        model->database().rollback();
    }
}

выходит по rollback();
подскажите, пожалуйста, в чем тут может быть дело.
IRIS
все разобралась. надо было обязательно выводить ключевое поле. А можно сделать как-нибудь так чтобы часть полей была редактируема, а часть нет?
ViGOur
Как я понимаю для этого нужно снять флаг Qt::ItemIsEditable у QModelIndex.
Litkevich Yuriy
Цитата(Гость_IRIS_* @ 1.10.2009, 19:18) *
надо было обязательно выводить ключевое поле.
ты имеешь ввиду такую ситуацию:
* Первичный ключ (ПК) не отображается в представлении, но есть в таблице БД
* При редактировании добавляются новые строки, но таблица в БД не имеет тригера создающего ПК

так?
iris
Цитата(Litkevich Yuriy @ 1.10.2009, 16:59) *
Цитата(Гость_IRIS_* @ 1.10.2009, 19:18) *
надо было обязательно выводить ключевое поле.
ты имеешь ввиду такую ситуацию:
* Первичный ключ (ПК) не отображается в представлении, но есть в таблице БД
* При редактировании добавляются новые строки, но таблица в БД не имеет тригера создающего ПК

так?


да
Litkevich Yuriy
лучше тригер добавить в БД. Тогда проблем никаких не будет.

Либо, если предыдущее невозможно, воспользуйся одним из сигналов предоставляемых QAbstractItemModel, например:
void QAbstractItemModel::rowsAboutToBeInserted ( const QModelIndex & parent, int start, int end ) [signal]
В слоте, с которым ты соеденишь его создавай ПК и сохраняй в БД, т.е. тригер реализушь в программе.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.