Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Как в модели отобразить пустыми поля со значением NULL
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Разработка баз данных
magoldnew
Имеется таблица некоторые поля которых до определенного момента времени имеют значение NULL (поле со значением даты и внешний ключ), с помощью свойства LeftJoin я вывел в модель все записи данной таблицы, но возникла интересная проблема: в модели в этих полях вместо пустого поля, в записях имеющих значение NULL отображается значение предыдущей записи где оно не являлось NULL. Кто-нибудь решал подобную задачку и как?
Majestio
Цитата(magoldnew @ 5.5.2013, 11:31) *
Имеется таблица некоторые поля которых до определенного момента времени имеют значение NULL (поле со значением даты и внешний ключ), с помощью свойства LeftJoin я вывел в модель все записи данной таблицы, но возникла интересная проблема: в модели в этих полях вместо пустого поля, в записях имеющих значение NULL отображается значение предыдущей записи где оно не являлось NULL. Кто-нибудь решал подобную задачку и как?


Можно модифицировать запрос, заменив поля, в которых возможен NULL - на связку (CASE ... WHEN ... THEN ... ELSE ... END) AS name
magoldnew
Фищка в том что в данном случае я не использую запрос, я вывожу данные в поля с помощью метода setRelation(int column, const QSqlRelation & relation), а метод QSqlRelation(const QString & tableName, const QString & indexColumn, const QString & displayColumn) принимает только имя таблицы и запихнуть ему sql запрос не получится, да и в данном случае как я понимаю в модельку возвращается все как надо, скорее всего метод setRelation не дружит с NULL и поэтому ничего не возвращает в данные поля и моделька продолжает отоброжать предыдущее значения... значит надо как-то реализовать проверку на текущее значение в методе setRelation и в случае пустого значения очищать элементы в модели....

Т.е. внешний ключ в главной таблицы имеет значение NULL и соответственно метод setRelation не может установить связь

Попробую пошаманить с методом bool isNull(const QString & name) const класса QSqlRecord
Majestio
Цитата(magoldnew @ 5.5.2013, 13:08) *
Фищка в том что в данном случае я не использую запрос, я вывожу данные в поля с помощью метода setRelation(int column, const QSqlRelation & relation), а метод QSqlRelation(const QString & tableName, const QString & indexColumn, const QString & displayColumn) принимает только имя таблицы и запихнуть ему sql запрос не получится, да и в данном случае как я понимаю в модельку возвращается все как надо, скорее всего метод setRelation не дружит с NULL и поэтому ничего не возвращает в данные поля и моделька продолжает отоброжать предыдущее значения... значит надо как-то реализовать проверку на текущее значение в методе setRelation и в случае пустого значения очищать элементы в модели....

Т.е. внешний ключ в главной таблицы имеет значение NULL и соответственно метод setRelation не может установить связь

Попробую пошаманить с методом bool isNull(const QString & name) const класса QSqlRecord

Тогда можно определить этот запрос в виде VIEW ... но все же я советовал бы использовать модель QSqlQueryModel вместо QSqlTableModel.
Значительно упростится вывод необходимого. На счет модификации данных - сложнее точно не будет, чем пытаться это определить для сложных отношений пробуя настроить табличную модель.
magoldnew
А можно пример, сейчас у меня в комбобокс данные подставляются так:


QSqlTableModel *relModel6 = model->relationModel(CantorIndex);
ui->cmbCantor->setModel(relModel6);
ui->cmbCantor->setModelColumn(relModel6->fieldIndex("cantor"));
....
mapper->addMapping(ui->cmbCantor, CantorIndex);
....
CantorIndex = model->fieldIndex("cantor_fk");
model->setRelation(CantorIndex, QSqlRelation("cantor", "cantor_pk", "cantor"));
model->select();


Данные в таблице привязанной к форме:

model = new QSqlRelationalTableModel(this);
model ->setTable("main_view");
model ->setEditStrategy(QSqlTableModel::OnFieldChange);
model->setJoinMode(model->LeftJoin);
magoldnew
И в двух словах: преимущества QSqlQueryModel перед QSqlTableModel, ведь второе насдедуется от первого и соответствеено обладает всеми фишками родителя?
magoldnew
И похоже проблема вообще в комбобоксе либо у меня недостаточно знаний :) когда стираю значение в записи где оно существует NULL не передается в БД (приминение изменений привязано к изменению данных в поле), да и вообще после изменений данных в комбобоксе они передаются в БД через раз, и также не присваивает значение NULL в QEditLine, хотя в бд в данных полях галочка NOT NULL не установлена.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.