crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
> QSqlTAbleModel+QTableView, добавление данных в базу
Гость_iris_*
сообщение 1.10.2009, 12:52
Сообщение #1





Гости








    


Изменяю данные в QTAbleView. Когда пытаюсь занести измененные данные в базу, ничего не заносится
функция
void Window::insert(){
    model->database().transaction();
    if (model->submitAll()){
        model->database().commit();
    } else {
        model->database().rollback();
    }
}

выходит по rollback();
подскажите, пожалуйста, в чем тут может быть дело.
Причина редактирования: Используй тэг code
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_IRIS_*
сообщение 1.10.2009, 15:18
Сообщение #2





Гости








    


все разобралась. надо было обязательно выводить ключевое поле. А можно сделать как-нибудь так чтобы часть полей была редактируема, а часть нет?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 1.10.2009, 15:30
Сообщение #3


Мастер
******

Группа: Модератор
Сообщений: 3291
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

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




Репутация:   40  


Как я понимаю для этого нужно снять флаг Qt::ItemIsEditable у QModelIndex.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 1.10.2009, 16:59
Сообщение #4


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9656
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

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




Репутация:   94  


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

так?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_iris_*
сообщение 1.10.2009, 17:21
Сообщение #5





Гости








    


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

так?


да
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 1.10.2009, 19:58
Сообщение #6


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9656
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

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




Репутация:   94  


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

Либо, если предыдущее невозможно, воспользуйся одним из сигналов предоставляемых QAbstractItemModel, например:
void QAbstractItemModel::rowsAboutToBeInserted ( const QModelIndex & parent, int start, int end ) [signal]
В слоте, с которым ты соеденишь его создавай ПК и сохраняй в БД, т.е. тригер реализушь в программе.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 16.11.2019, 2:45