Russian Qt Forum

Qt => Базы данных => Тема начата: Agarb от Май 02, 2009, 06:02



Название: QSqlRelationalTableModel не сохраняет данные
Отправлено: Agarb от Май 02, 2009, 06:02
Помогите разобраться с проблеммой.
QSqlRelationalTableModel не хочет сохранять данные, когда устанавливаю отношение (setRelation). Отображается всё как надо, а вот данные в базу не пишуться ни в поле внешнего ключа ни в какое либо другое поле этой таблицы.
Код:
    mdlDisease = new QSqlRelationalTableModel(this);
    mdlDisease->setTable("exdisease");
    rel=QSqlRelation("patient","id","family");
    mdlDisease->setRelation(0, rel);
    mdlDisease->setEditStrategy(QSqlRelationalTableModel::OnManualSubmit);

    mdlDisease->select();

    pTblVw->setModel(mdlDisease);   
    pTblVw->setItemDelegate(new QSqlRelationalDelegate(pTblVw));
    connect(b1, SIGNAL(clicked()), mdlDisease, SLOT(submitAll()));

думал дело в делегате: но когда убираю строчку с setRelation - данные в БД пишуться. Тут использую стратегию OnManualSubmit, также пробывал и другие: OnFieldChange, OnRowChange.


Название: Re: QSqlRelationalTableModel не сохраняет данные
Отправлено: pastor от Май 02, 2009, 09:38
Укажи версию Qt, платформу, используемую БД


Название: Re: QSqlRelationalTableModel не сохраняет данные
Отправлено: Agarb от Май 02, 2009, 09:42
Укажи версию Qt, платформу, используемую БД
Qt 4.5.0, Win32, SQLite3 (с MySQL 5 тоже самое)

уже немножко разобрался - копаю в сторону первичных ключей...


Название: Re: QSqlRelationalTableModel не сохраняет данные
Отправлено: Agarb от Май 02, 2009, 15:00
Проблема была решена тем, что во всех таблицах, учавствующих в отношении, были созданы (там где не было) столбцы id и назначены первичными ключами.


Название: Re: QSqlRelationalTableModel не сохраняет данные
Отправлено: break от Май 24, 2009, 01:42
Код:
Проблема была решена тем, что во всех таблицах, учавствующих в отношении, были созданы (там где не было) столбцы id и назначены первичными ключами.

Это все спецы вообще для всех таблиц рекомендуют - и чтобы ключи "суррогатными" были, а некоторые даже уверяют что лучше использовать один сквозной счетчик по всем таблицам - тогда вроде вообще 2-х повторяющихся ID не будет...


Название: Re: QSqlRelationalTableModel не сохраняет данные
Отправлено: hic от Июль 03, 2009, 15:12
Есть похожая проблема. Первичный ключ создан, поле автоинкрементное. Таблица отображается нормально, После добавления и редактирования новых строк на submitAll() ругается: No Fields to update. Вот код:
Код:
model = new QSqlTableModel(this);
    model->setTable("table");
    model->setEditStrategy(QSqlTableModel::OnManualSubmit);
    model->select();

    table_view->setModel(model);

    mapper = new QDataWidgetMapper;
    mapper->setModel(model);
    mapper->addMapping(lineEdit1, 1);
    mapper->addMapping(lineEdit2, 2);

    connect(table_view->selectionModel(), SIGNAL(currentRowChanged(QModelIndex,QModelIndex)),
            mapper, SLOT(setCurrentModelIndex(QModelIndex)));

    table_view->setCurrentIndex(model->index(0, 0));

    connect(submit_action, SIGNAL(triggered()), this, SLOT(submit()));
    connect(add_action, SIGNAL(triggered()), this, SLOT(add()));
}

void main_window::submit()
{
    model->database().transaction();
    if (model->submitAll()) {
        model->database().commit();
    } else {
        model->database().rollback();
        QMessageBox::warning(this, trUtf8("Моя программа"),
                             trUtf8("Зе датабазе кирдык: %1")
                             .arg(model->lastError().text()));
    }
}

void main_window::add()
{
    model->insertRow(model->rowCount());
}
Как правильно добавлять строки?
Юзаю Qt 4.5.0, платформа: ubuntu 9.04, база: mysql 5.0


Название: Re: QSqlRelationalTableModel не сохраняет данные
Отправлено: DenisKh001 от Июнь 13, 2011, 12:29
Да, была та же самая проблема - никак не сохранялись данные. Поставил во ВСЕХ таблицах первичные ключи и все заработало. Даже там где они по сути и не нужны были.