Russian Qt Forum

Qt => Базы данных => Тема начата: Пантер от Июля 10, 2008, 12:57



Название: QSqlRelationalTableModel и NULL
Отправлено: Пантер от Июля 10, 2008, 12:57
Пытаюсь разобраться с QSqlRelationalTableModel и попал в тупик. В общем имеется 2 таблицы
1. FIRST_TABLE:
ID - integer
name - varchar
2. SECOND_TABLE
ID - integer
pole1 - integer (->FIRST_TABLE)
Ставлю релейшн:
model->setRelation(1, QSqlRelation("FIRST_TABLE", "id", "name"));
Так вот если в pole1 хотя бы в одной записи нет значения (т.е. NULL), то данных никаких не показывает. Как нужно правильно делать?


Название: Re: QSqlRelationalTableModel и NULL
Отправлено: developer от Июля 14, 2008, 14:39
По моему в доке написано, что для вашего же блага, ми не будем отображать те строки у которых внешние ключи равны NULL. Столкнувшись с этой проблемой, я просто вставлял в нужние поля(в данном случае ети поля - внешные ключи) данные, перехватывая сигнал beforeInserted(...). Это не решыло всех моих проблем, но все таки помогло.


Название: Re: QSqlRelationalTableModel и NULL
Отправлено: Mikhail от Июля 14, 2008, 15:51
Пытаюсь разобраться с QSqlRelationalTableModel и попал в тупик. В общем имеется 2 таблицы
1. FIRST_TABLE:
ID - integer
name - varchar
2. SECOND_TABLE
ID - integer
pole1 - integer (->FIRST_TABLE)
Ставлю релейшн:
model->setRelation(1, QSqlRelation("FIRST_TABLE", "id", "name"));
Так вот если в pole1 хотя бы в одной записи нет значения (т.е. NULL), то данных никаких не показывает. Как нужно правильно делать?

При создании второй таблицы для pole1 укажи NOT NULL

например:
CREATE TABLE SECOND_TABLE (
  ID int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
  pole1 int(11) NOT NULL ) ;


Название: Re: QSqlRelationalTableModel и NULL
Отправлено: Пантер от Июля 14, 2008, 17:11
При создании второй таблицы для pole1 укажи NOT NULL

например:
CREATE TABLE SECOND_TABLE (
  ID int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
  pole1 int(11) NOT NULL ) ;
А как быть, если pole1 не всегда имеет значение?


Название: Re: QSqlRelationalTableModel и NULL
Отправлено: Mikhail от Июля 14, 2008, 20:28
При создании второй таблицы для pole1 укажи NOT NULL

например:
CREATE TABLE SECOND_TABLE (
  ID int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
  pole1 int(11) NOT NULL ) ;
А как быть, если pole1 не всегда имеет значение?

Ну, наверно это вопрос к построению архитектуры базы данных.
Значит не продумано.
Есть такая профессия - системный архитектор баз данных.


Название: Re: QSqlRelationalTableModel и NULL
Отправлено: Пантер от Июля 15, 2008, 07:09
Ладно, обрисую ситуацию. Есть таблица доходов, где такие поля:
ID номер по порядку
NUMBER номер человека
SUMMA сумма дохода
OSNOVANIE основание, т.е. откуда взяли сведения о доходах.
Релейшн создается по полю OSNOVANIE, но проблема в том, что основания может не быть в 50% случаев. Что тут можно изменить?


Название: Re: QSqlRelationalTableModel и NULL
Отправлено: ритт от Июля 15, 2008, 07:55
OSNOVANIE INT NOT NULL DEFAULT 0 :)


Название: Re: QSqlRelationalTableModel и NULL
Отправлено: Пантер от Июля 15, 2008, 08:48
Птица не дает так сделать, ругается на внешний ключ. В общем или NULL или нормальное значение, но никак не 0.


Название: Re: QSqlRelationalTableModel и NULL
Отправлено: Tonal от Июля 15, 2008, 08:54
А в табличку оснований включить основание с ID = 0 и текстам "Без основания". :)


Название: Re: QSqlRelationalTableModel и NULL
Отправлено: Tonal от Июля 15, 2008, 08:56
Или наследоваться от QSqlRelationalTableModel и переписать selectStatement чтобы он не выкидывал эти записи. :)