crossplatform.ru

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

> QSqlRelationTableModel->submitAll() ошибка No Fields to update"
mishabard
  опции профиля:
сообщение 6.7.2011, 15:47
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 31
Регистрация: 13.6.2011
Из: Киев
Пользователь №: 2741

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




Репутация:   0  


Добрый день! Вот код в кратце. Выбрал все самое нужно. Все работает, данные обновляются или добовляются,
но в дебаге выскакиевает ошибка: No Fields to update".

В программе используется следующая модель:
QSqlRelationTableModel * model;
QTableView *view;

Создаю диалоговое окно для обновления или добавления записей в таблицу. Впринципе все сделал на основе примера из Qt


вот конструктор диалогвого окна, для добавления новой записи в QSqlRelationTableModel
передаю в него указатель view на TableView

{
.....
QAbstractItemModel * model;[size="1"][/size]

    model = view->model();
    mapper = new QDataWidgetMapper(this);
    mapper->setSubmitPolicy(QDataWidgetMapper::ManualSubmit);
    mapper->setModel(model);
  
    mapper->addMapping(pdataCrt, ((QSqlRelationalTableModel*)model)->fieldIndex("datacrt"));
    mapper->addMapping(pSumma, ((QSqlRelationalTableModel*)model)->fieldIndex("summa"));
    .....
    mapper->setCurrentModelIndex(view->currentIndex());

  
        int row = mapper->currentIndex();
        model->insertRow(row);
        mapper->setCurrentIndex(row);
   .......
        pSumma->clear();
        pdataCrt->setDate(QDate::currentDate());
        pSumma->setFocus();

....
}

Если пользователь нажимает ОК в диалоговом окне то делаю
void Carta::accept()
{

    mapper->submit()

    QDialog::accept();
}

Вот процедура, которая вызывает диалоговое окно
void MainWindow::addRect()
{
    pCarta = new Carta(kassaView,-1);
    if (pCarta->exec()==QDialog::Accepted)
    {
        if (!model->submit());
        {
    
          qDebug()<<"Ошибка"+model->lastError().text();[color="#FF0000"]ошибка: No Fields to update". [/color]
        }
    }
    else
        qDebug()<<"Отмена добавления записи";

    delete pCarta;
    pCarta=0;


}

Вроде все добавляет в базу(хотя через раз вроде), но выскакивает ошибка, и не позволяет обробатывать действительно проблемы со вствкой записей.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
mishabard
  опции профиля:
сообщение 6.7.2011, 16:42
Сообщение #2


Студент
*

Группа: Участник
Сообщений: 31
Регистрация: 13.6.2011
Из: Киев
Пользователь №: 2741

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




Репутация:   0  


РЕШЕНО!!!
Целый день занимался проблемой, и только как написал вопрос на форум, сразу понял всем проблема. НЕВНИМАТЕЛЬНОСТЬ!

Я в mapper использую
mapper->setSubmitPolicy(QDataWidgetMapper::ManualSubmit);

а в главной модели стоит стратеги по умолчанию т.е QSqlTableModel::OnFieldChange.

Просто дописал строку при настройке модели:

Model->setEditStrategy(QSqlTableModel::OnManualSubmit);
Все работает!!!!
Теперь обновления в базу данных происходят только по model->submitAll();


Поторопился!!!!((((( :(

Теперь при model->submitAll() возвращает false, но в model->lastError().text возвращает пустую строку.
Подскажите что еще я не учел?

ПС : Данные в базу записываются.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


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




RSS Текстовая версия Сейчас: 13.12.2024, 10:30