Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Обновление таблицы через QTableView.
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Модель/Представление
User_3
Извините что поднял избитую тему, но никак не могу понять - каким же образом можно сохранять изменения в полях таблицы, путём редактирования QTableView?

Например есть такая таблица:

TableModel->setTable("registered");
TableModel->setEditStrategy(QSqlTableModel::OnManualSubmit);
TableModel->select();


Ну и дальше она размещается на виджете, и вот хочу изменить значения полей в таблице редактированием ячейки в QTableView, но они меняются только в QTableView, а в самой бд всё остаётся неизменно.
Litkevich Yuriy
Например, так
User_3
Извините, я неправильно выразился.
Мне нужно изменить именно значения в ячейках таблицы. Т.е. с клавиатуры ввести новое значение прямо в ячейку, предварительно дважды щёлкнув по ней курсором.
Litkevich Yuriy
Цитата(User_3 @ 12.2.2010, 18:25) *
Т.е. с клавиатуры ввести новое значение прямо в ячейку, предварительно дважды щёлкнув по ней курсором.
не понял проблемы. в чём она?
MoPDoBoPoT
Цитата(User_3 @ 12.2.2010, 13:16) *
вот хочу изменить значения полей в таблице редактированием ячейки в QTableView, но они меняются только в QTableView, а в самой бд всё остаётся неизменно

Я думаю ключевая фраза эта? Тогда нужно вызывать метод submitAll(), потому как у тебя стоит политика редактирования QSqlTableModel::OnManualSubmit.
Почитай в ассистенте про эти вещи получше.
Litkevich Yuriy
Цитата(MoPDoBoPoT @ 12.2.2010, 20:11) *
Почитай в ассистенте про эти вещи получше.
ну и мою ссылку, в которой всё это уже "накодено".
User_3
Цитата(Litkevich Yuriy @ 12.2.2010, 20:49) *
Например, так

За ссылку спасибо, но видимо у меня проблемы с кодировкой в комментах:

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
Цитата(User_3 @ 16.2.2010, 20:43) *
Не подскажешь как решить?
UTF-8
User_3
Цитата(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
Цитата(User_3 @ 17.2.2010, 14:22) *
А разве нет более простого способа изменения данных в ячейках?

Я же намекал, что так нужно делать при выбранной политики редактирования (QSqlTableModel::OnManualSubmit), но существуют и другие.
User_3
Цитата(MoPDoBoPoT @ 17.2.2010, 21:48) *
Цитата(User_3 @ 17.2.2010, 14:22) *
А разве нет более простого способа изменения данных в ячейках?

Я же намекал, что так нужно делать при выбранной политики редактирования (QSqlTableModel::OnManualSubmit), но существуют и другие.


Понятно, но вот почему-то при выставлении QSqlTableModel::OnFieldChange изменения к бд не применяются, более того, изменения пропадают сразу после нажатия Enter или перехода на другую ячейку.

Когда я работал с SQLite таких проблем не было, сейчас же я использую MySQL.
В общем у меня есть подозрения, что я что-то делаю не так.
Litkevich Yuriy
Цитата(User_3 @ 20.2.2010, 9:03) *
В общем у меня есть подозрения, что я что-то делаю не так.
проверь, будут ли сохранятся записи, на демке %QTDIR%/demos/sqlbrowser, там используется политика QSqlTableModel::OnRowChange.
User_3
Цитата(Litkevich Yuriy @ 20.2.2010, 15:13) *
Цитата(User_3 @ 20.2.2010, 9:03) *
В общем у меня есть подозрения, что я что-то делаю не так.
проверь, будут ли сохранятся записи, на демке %QTDIR%/demos/sqlbrowser, там используется политика QSqlTableModel::OnRowChange.


Не сохраняются.
MoPDoBoPoT
Может дело в разных версиях клиентской библиотеки mysql и самого MySQL сервера? Попробуй пересобрать плагин mysql с той библиотекой, которая идёт с СУБД MySQL (ссылка).
User_3
Цитата(MoPDoBoPoT @ 20.2.2010, 21:48) *
Может дело в разных версиях клиентской библиотеки mysql и самого MySQL сервера? Попробуй пересобрать плагин mysql с той библиотекой, которая идёт с СУБД MySQL (ссылка).

Да, скорее всего, ибо драйвер я не собирал, а взял где-то - уже собранный.
Всем спасибо.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.