Название: Молча не отрабатывает редактирование таблицы Отправлено: sonoleo от Май 03, 2011, 17:00 Я написал уже несколько простеньких программ. Больше интересует работа с БД (MYSql). Запустил программки и заметил, что таблица не изменяется :o. Пример из http://doc.crossplatform.ru/qt/4.5.0/qsqltablemodel.html
#include <QtDebug> #include <QtGui> #include <QSqlTableModel> #include <QSqlError> int main(int argc, char *argv[]) { QApplication app(argc, argv); QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL"); db.setHostName("localhost"); db.setDatabaseName("testdb"); db.setUserName("root"); db.setPassword(""); if (!db.open()) { qDebug() << QString::fromLocal8Bit("Не смогла я открыть базу данных") << db.lastError().text(); return -1; } QSqlTableModel *model = new QSqlTableModel(0); model->setTable("artists"); model->setEditStrategy(QSqlTableModel::OnRowChange);//OnFieldChange);//OnManualSubmit); model->select(); // model->removeColumn(0);//->setColumnHidden(0, true); QTableView *view = new QTableView; view->setModel(model); view->setWindowTitle(QString::fromLocal8Bit("Альбомы")); view->resize(330,350); view->show(); int result = app.exec(); delete model; return result; } Что происходит. Никаких сообщений не выдает. Помогите ??? Когда исправляю в одной ячейке - все нормально. Исправляю другую и восстанавливается значение в предыдущей (только на экране) Название: Re: Молча не отрабатывает редактирование таблицы Отправлено: Mikhail от Май 03, 2011, 18:12 Работает нормально. Никакх описанных эффектов не заметил.
Название: Re: Молча не отрабатывает редактирование таблицы Отправлено: sonoleo от Май 03, 2011, 22:50 Ребята, я не шучу. Мучаюсь уже вторые сутки. Есть у кого-нить идеи?
Название: Re: Молча не отрабатывает редактирование таблицы Отправлено: sonoleo от Май 04, 2011, 08:43 Ну что господа?
Делал эту программу с помощью - Qt Creator 2.0.0 Основан на Qt 4.7.0 (32-х битной) Собран Jun 21 2010 в 01:56:06 Ревизия 1c0f52a091 может она кривая? ::) Проект выглядит так: TEMPLATE = app QT += sql TARGET = DEPENDPATH += . INCLUDEPATH += . # Input HEADERS += . #customview.cpp SOURCES += main.cpp #customview.cpp main.cpp Сделал ещё так #HEADERS += .- тоже не помогло Название: Re: Молча не отрабатывает редактирование таблицы Отправлено: Mikhail от Май 04, 2011, 11:59 Возьми пример qtdir/examples/sql/tablemodel
и проверь. Все нормально работает. Там почти твой случай. Отличается только типом БД. Если и дальше непонятки выкладывай полный исходник проекта. Название: Re: Молча не отрабатывает редактирование таблицы Отправлено: sonoleo от Май 04, 2011, 13:33 я его (tablemodel) и раньше запускал, тока не проверял изменения в базе. А сейчас стал проверять, но результат отрицательный. На экране всё изменяется (конечно кроме append), а в базе нет.
Исходники использованы в qtdir/examples/sql/tablemodel. Замена на QMYSQL. Какую инфу надо показать от меня? ::) Название: Re: Молча не отрабатывает редактирование таблицы Отправлено: Mikhail от Май 04, 2011, 14:34 выкладывай полный исходник проекта.
*.h, *.cpp, *.pro и т.д. Все zip-ом Название: Re: Молча не отрабатывает редактирование таблицы Отправлено: sonoleo от Май 04, 2011, 14:46 вложил, тама две папочки :'(
Название: Re: Молча не отрабатывает редактирование таблицы Отправлено: Mikhail от Май 05, 2011, 07:15 Измени стратегию редактирования, например,
model->setEditStrategy(QSqlTableModel::OnFieldChange); Название: Re: Молча не отрабатывает редактирование таблицы Отправлено: sonoleo от Май 05, 2011, 08:13 В tablemodel.cpp в строке 50 закоментини разные варианты, в том числе и этот - OnFieldChange. От этого еще хуже. Внеся изменение в поле и нажав enter или мышкой перейдя в другое поле, старое поле восстанавливается. И в одном и в другом окне.
Попробовал update поля через SQL. Это сработало, но если в поле вводится латинскими буковками. На русские не реагирует. А вот прямое редактирование через OnFieldChange?!!! Неужели в таком примитивном примерчике глюки есть 8)? Название: Re: Молча не отрабатывает редактирование таблицы Отправлено: Mikhail от Май 05, 2011, 08:42 Ну для начала надо искать глюки у себя.
OnFieldChange работает как заявлено. С какой базой проверяешь и какими средствами? Если есть проблемы с русскими буквами для MySql то надо смотреть кодировку дя клиента сервера MySql и соответственно ей дать запрос к базе что-то типа SET NAMES cp1251 ( для случая кодировки для клиента cp1251 ) Название: Re: Молча не отрабатывает редактирование таблицы Отправлено: Пантер от Май 05, 2011, 09:04 Советую OnManualSubmit выставить и проверять bool QSqlTableModel::submit (), если false, то lastError проверить.
Название: Re: Молча не отрабатывает редактирование таблицы Отправлено: sonoleo от Май 05, 2011, 10:03 С какой базой проверяешь и какими средствами? MySQL 5.0 проверяю с помощью HeidiSQL\heidisql.exe. С этим - SET NAMES cp1251 - уже применял, разберусь.Если есть проблемы с русскими буквами для MySql то надо смотреть кодировку дя клиента сервера MySql и соответственно ей дать запрос к базе что-то типа SET NAMES cp1251 ( для случая кодировки для клиента cp1251 ) Базу создавал с cp1251 и cp1251_general_cs Советую OnManualSubmit выставить и проверять bool QSqlTableModel::submit (), если false, то lastError проверить. попробую lastError проверить.Название: Re: Молча не отрабатывает редактирование таблицы Отправлено: Pretorean от Сентябрь 20, 2011, 00:36 сорри за некропостинг
наступил на те же грабли и этот топик нашел поиском если сделать model->removeColumn(0) а так как первый столбец таблицы это обычно первичный ключ, то модель переходит в режим только для чтения. самое простое что пришло в голову это сделать tableView->hideColumn(0) возможны и другие решения, но я не копал дальше |