Версия для печати темы
Форум на CrossPlatform.RU _ Qt Модель/Представление _ Обновление таблицы через QTableView.
Автор: User_3 12.2.2010, 13:16
Извините что поднял избитую тему, но никак не могу понять - каким же образом можно сохранять изменения в полях таблицы, путём редактирования QTableView?
Например есть такая таблица:
TableModel->setTable("registered");
TableModel->setEditStrategy(QSqlTableModel::OnManualSubmit);
TableModel->select();
Ну и дальше она размещается на виджете, и вот хочу изменить значения полей в таблице редактированием ячейки в QTableView, но они меняются только в QTableView, а в самой бд всё остаётся неизменно.
Автор: Litkevich Yuriy 12.2.2010, 13:49
Например, http://www.forum.crossplatform.ru/index.php?showtopic=1845&view=findpost&p=11730
Автор: User_3 12.2.2010, 15:25
Извините, я неправильно выразился.
Мне нужно изменить именно значения в ячейках таблицы. Т.е. с клавиатуры ввести новое значение прямо в ячейку, предварительно дважды щёлкнув по ней курсором.
Автор: Litkevich Yuriy 12.2.2010, 16:55
Цитата(User_3 @ 12.2.2010, 18:25)
Т.е. с клавиатуры ввести новое значение прямо в ячейку, предварительно дважды щёлкнув по ней курсором.
не понял проблемы. в чём она?
Автор: MoPDoBoPoT 12.2.2010, 17:11
Цитата(User_3 @ 12.2.2010, 13:16)
вот хочу изменить значения полей в таблице редактированием ячейки в QTableView, но они меняются только в QTableView, а в самой бд всё остаётся неизменно
Я думаю ключевая фраза эта? Тогда нужно вызывать метод submitAll(), потому как у тебя стоит политика редактирования QSqlTableModel::OnManualSubmit.
Почитай в ассистенте про эти вещи получше.
Автор: Litkevich Yuriy 12.2.2010, 17:16
Цитата(MoPDoBoPoT @ 12.2.2010, 20:11)
Почитай в ассистенте про эти вещи получше.
ну и мою ссылку, в которой всё это уже "накодено".
Автор: User_3 16.2.2010, 17:43
Цитата(Litkevich Yuriy @ 12.2.2010, 20:49)
Например, http://www.forum.crossplatform.ru/index.php?showtopic=1845&view=findpost&p=11730
За ссылку спасибо, но видимо у меня проблемы с кодировкой в комментах:
CODE
Версия программы: 1.0
* Framework: Qt 4.3.2
* Компилятор: GCC (mingw-gcc rev4.3.2)
* Дата начала: 20.03.2008
* Последнее обновление: 25.03.2008
* Автор: Литкевич Юрий Р˜РІР°РЅРѕРІРёС‡
* Support E-mail: lit-uriy-A-yandex.ru
* Лицензия: GNU GPLv2
*
* Описание:
Не подскажешь как решить?
Автор: Litkevich Yuriy 16.2.2010, 19:04
Цитата(User_3 @ 16.2.2010, 20:43)
Не подскажешь как решить?
UTF-8
Автор: User_3 17.2.2010, 14:22
Цитата(Litkevich Yuriy @ 17.2.2010, 2:04)
Цитата(User_3 @ 16.2.2010, 20:43)
Не подскажешь как решить?
UTF-8
Как я понял мне нужна эта часть :
CODE
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()));
}
Т.е. здесь при нажатии кнопки submit, данные которые я изменил через ячейки таблицы изменятся в бд?
Но возникают ошибки обращения к неинициализированной области памяти и "Using unsupported buffertype: -1 (parameter: 1)".
А разве нет более простого способа изменения данных в ячейках?
Автор: MoPDoBoPoT 17.2.2010, 14:48
Цитата(User_3 @ 17.2.2010, 14:22)
А разве нет более простого способа изменения данных в ячейках?
Я же намекал, что так нужно делать при выбранной политики редактирования (QSqlTableModel::OnManualSubmit), но существуют и http://doc.crossplatform.ru/qt/4.6.x/qsqltablemodel.html#EditStrategy-enum.
Автор: User_3 20.2.2010, 6:03
Цитата(MoPDoBoPoT @ 17.2.2010, 21:48)
Цитата(User_3 @ 17.2.2010, 14:22)
А разве нет более простого способа изменения данных в ячейках?
Я же намекал, что так нужно делать при выбранной политики редактирования (QSqlTableModel::OnManualSubmit), но существуют и http://doc.crossplatform.ru/qt/4.6.x/qsqltablemodel.html#EditStrategy-enum.
Понятно, но вот почему-то при выставлении QSqlTableModel::OnFieldChange изменения к бд не применяются, более того, изменения пропадают сразу после нажатия Enter или перехода на другую ячейку.
Когда я работал с SQLite таких проблем не было, сейчас же я использую MySQL.
В общем у меня есть подозрения, что я что-то делаю не так.
Автор: Litkevich Yuriy 20.2.2010, 8:13
Цитата(User_3 @ 20.2.2010, 9:03)
В общем у меня есть подозрения, что я что-то делаю не так.
проверь, будут ли сохранятся записи, на демке %QTDIR%/demos/sqlbrowser, там используется политика QSqlTableModel::OnRowChange.
Автор: User_3 20.2.2010, 12:19
Цитата(Litkevich Yuriy @ 20.2.2010, 15:13)
Цитата(User_3 @ 20.2.2010, 9:03)
В общем у меня есть подозрения, что я что-то делаю не так.
проверь, будут ли сохранятся записи, на демке %QTDIR%/demos/sqlbrowser, там используется политика QSqlTableModel::OnRowChange.
Не сохраняются.
Автор: MoPDoBoPoT 20.2.2010, 14:48
Может дело в разных версиях клиентской библиотеки mysql и самого MySQL сервера? Попробуй пересобрать плагин mysql с той библиотекой, которая идёт с СУБД MySQL (http://www.prog.org.ru/index.php?topic=8802.msg50556#msg50556).
Автор: User_3 21.2.2010, 9:18
Цитата(MoPDoBoPoT @ 20.2.2010, 21:48)
Может дело в разных версиях клиентской библиотеки mysql и самого MySQL сервера? Попробуй пересобрать плагин mysql с той библиотекой, которая идёт с СУБД MySQL (http://www.prog.org.ru/index.php?topic=8802.msg50556#msg50556).
Да, скорее всего, ибо драйвер я не собирал, а взял где-то - уже собранный.
Всем спасибо.
Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)