Russian Qt Forum

Qt => Вопросы новичков => Тема начата: sonoleo от Май 03, 2011, 17:00



Название: Молча не отрабатывает редактирование таблицы
Отправлено: 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 то надо смотреть кодировку дя клиента сервера MySql и соответственно ей дать запрос к базе что-то типа     SET NAMES cp1251 ( для случая кодировки для клиента cp1251 )
MySQL 5.0 проверяю с помощью HeidiSQL\heidisql.exe. С этим - SET NAMES cp1251 - уже применял, разберусь.
Базу создавал с cp1251 и cp1251_general_cs

Советую OnManualSubmit выставить и проверять bool QSqlTableModel::submit (), если false, то lastError проверить.
попробую lastError проверить.


Название: Re: Молча не отрабатывает редактирование таблицы
Отправлено: Pretorean от Сентябрь 20, 2011, 00:36
сорри за некропостинг
наступил на те же грабли и этот топик нашел поиском

если сделать model->removeColumn(0) а так как первый столбец таблицы это обычно первичный ключ, то модель переходит в режим только для чтения.
самое простое что пришло в голову это сделать tableView->hideColumn(0)
возможны и другие решения, но я не копал дальше