Как в модели отобразить пустыми поля со значением NULL |
Здравствуйте, гость ( Вход | Регистрация )
Как в модели отобразить пустыми поля со значением NULL |
magoldnew |
5.5.2013, 11:31
Сообщение
#1
|
Студент Группа: Новичок Сообщений: 10 Регистрация: 29.4.2013 Пользователь №: 3816 Спасибо сказали: 0 раз(а) Репутация: 0 |
Имеется таблица некоторые поля которых до определенного момента времени имеют значение NULL (поле со значением даты и внешний ключ), с помощью свойства LeftJoin я вывел в модель все записи данной таблицы, но возникла интересная проблема: в модели в этих полях вместо пустого поля, в записях имеющих значение NULL отображается значение предыдущей записи где оно не являлось NULL. Кто-нибудь решал подобную задачку и как?
|
|
|
Majestio |
5.5.2013, 11:44
Сообщение
#2
|
Студент Группа: Участник Сообщений: 67 Регистрация: 13.2.2013 Пользователь №: 3710 Спасибо сказали: 1 раз(а) Репутация: 1 |
Имеется таблица некоторые поля которых до определенного момента времени имеют значение NULL (поле со значением даты и внешний ключ), с помощью свойства LeftJoin я вывел в модель все записи данной таблицы, но возникла интересная проблема: в модели в этих полях вместо пустого поля, в записях имеющих значение NULL отображается значение предыдущей записи где оно не являлось NULL. Кто-нибудь решал подобную задачку и как? Можно модифицировать запрос, заменив поля, в которых возможен NULL - на связку (CASE ... WHEN ... THEN ... ELSE ... END) AS name |
|
|
magoldnew |
5.5.2013, 13:08
Сообщение
#3
|
Студент Группа: Новичок Сообщений: 10 Регистрация: 29.4.2013 Пользователь №: 3816 Спасибо сказали: 0 раз(а) Репутация: 0 |
Фищка в том что в данном случае я не использую запрос, я вывожу данные в поля с помощью метода 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 |
5.5.2013, 15:55
Сообщение
#4
|
Студент Группа: Участник Сообщений: 67 Регистрация: 13.2.2013 Пользователь №: 3710 Спасибо сказали: 1 раз(а) Репутация: 1 |
Фищка в том что в данном случае я не использую запрос, я вывожу данные в поля с помощью метода 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 |
6.5.2013, 19:12
Сообщение
#5
|
Студент Группа: Новичок Сообщений: 10 Регистрация: 29.4.2013 Пользователь №: 3816 Спасибо сказали: 0 раз(а) Репутация: 0 |
А можно пример, сейчас у меня в комбобокс данные подставляются так:
Данные в таблице привязанной к форме:
|
|
|
magoldnew |
6.5.2013, 19:55
Сообщение
#6
|
Студент Группа: Новичок Сообщений: 10 Регистрация: 29.4.2013 Пользователь №: 3816 Спасибо сказали: 0 раз(а) Репутация: 0 |
И в двух словах: преимущества QSqlQueryModel перед QSqlTableModel, ведь второе насдедуется от первого и соответствеено обладает всеми фишками родителя?
|
|
|
magoldnew |
6.5.2013, 21:37
Сообщение
#7
|
Студент Группа: Новичок Сообщений: 10 Регистрация: 29.4.2013 Пользователь №: 3816 Спасибо сказали: 0 раз(а) Репутация: 0 |
И похоже проблема вообще в комбобоксе либо у меня недостаточно знаний когда стираю значение в записи где оно существует NULL не передается в БД (приминение изменений привязано к изменению данных в поле), да и вообще после изменений данных в комбобоксе они передаются в БД через раз, и также не присваивает значение NULL в QEditLine, хотя в бд в данных полях галочка NOT NULL не установлена.
|
|
|
Текстовая версия | Сейчас: 23.4.2024, 18:50 |