Russian Qt Forum
Июнь 03, 2024, 19:42 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QSqlRelationalTableModel не сохраняет данные  (Прочитано 6335 раз)
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.
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #1 : Май 02, 2009, 09:38 »

Укажи версию Qt, платформу, используемую БД
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Agarb
Гость
« Ответ #2 : Май 02, 2009, 09:42 »

Укажи версию Qt, платформу, используемую БД
Qt 4.5.0, Win32, SQLite3 (с MySQL 5 тоже самое)

уже немножко разобрался - копаю в сторону первичных ключей...
Записан
Agarb
Гость
« Ответ #3 : Май 02, 2009, 15:00 »

Проблема была решена тем, что во всех таблицах, учавствующих в отношении, были созданы (там где не было) столбцы id и назначены первичными ключами.
Записан
break
Гипер активный житель
*****
Offline Offline

Сообщений: 846


Просмотр профиля
« Ответ #4 : Май 24, 2009, 01:42 »

Код:
Проблема была решена тем, что во всех таблицах, учавствующих в отношении, были созданы (там где не было) столбцы id и назначены первичными ключами.

Это все спецы вообще для всех таблиц рекомендуют - и чтобы ключи "суррогатными" были, а некоторые даже уверяют что лучше использовать один сквозной счетчик по всем таблицам - тогда вроде вообще 2-х повторяющихся ID не будет...
Записан
hic
Гость
« Ответ #5 : Июль 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
« Последнее редактирование: Июль 06, 2009, 12:50 от hic » Записан
DenisKh001
Гость
« Ответ #6 : Июнь 13, 2011, 12:29 »

Да, была та же самая проблема - никак не сохранялись данные. Поставил во ВСЕХ таблицах первичные ключи и все заработало. Даже там где они по сути и не нужны были.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.046 секунд. Запросов: 22.