crossplatform.ru

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

> [РЕШЕНО] QTableView + QSqlTableModel, Удаление данных, PyQt4
VBA
  опции профиля:
сообщение 13.1.2009, 18:15
Сообщение #1


Новичок


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

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




Репутация:   0  


Использую QSqlTableModel и QTableView в связке с PyQt4, для отображения данных из таблицы БД.

...
Model = QSqlTableModel(self)
Model.setTable("test")
Model.setEditStrategy(QSqlTableModel.OnManualSubmit)
Model.select()
...
TableView = QTableView(self)
TableView.setModel(Model)
...


Пытаюсь удалить строку, которую выбрал пользователь в TableView, таким образом:
Index = TableView.currentIndex()
TableView.model().removeRow(Index.row())
TableView.model().submitAll()


В результате получаю ошибку:
QSqlQuery::value: not positioned on a valid record

Причем, TableView.model().removeRow(Index.row()) возвращает True, а "затык" происходит на TableView.model().submitAll() (возвращает False).

ТableView.model().lastError().text() пишет следующее:
No data supplied for parameters in prepared statement QMYSQL3: Unable to execute statement

Добавление записей происходит без проблем, а вот удаление... (((

Сообщение отредактировал Litkevich Yuriy - 31.1.2009, 12:34
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
Litkevich Yuriy
  опции профиля:
сообщение 13.1.2009, 18:54
Сообщение #2


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

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

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




Репутация:   94  


Цитата(VBA @ 13.1.2009, 21:50) *
Так это получается удаляються только строки из QTableView, а из самой таблицы БД нет.
Мне надо, чтобы удалялись записи из самой БД, физически, если можно так назвать.
да в приведенном примере нет подтверждения действия так как у меня на это отдельная кнопочка. Но я пока вижу разницу только в методах:
у тебя removeRow(...), а уменя removeRows(...)
может быть в этом дело?

а подверждаю так:
void TableEditor::SlotSubmit()
{
    model->database().transaction();
    if (model->submitAll())
    {
        model->database().commit();
        model->select();
        // Опять применить и отмена не активны
        BtnDis();    
    }
    else
    {
        model->database().rollback();
        QMessageBox::critical(this, tr("Ошибка"),
                             tr("Сообщение БД:\r\n %1")
                             .arg(model->lastError().databaseText()));
    }
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


Тема закрытаНачать новую тему
Теги


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




RSS Текстовая версия Сейчас: 4.12.2024, 16:36