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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QSqlRelationalTableModel и NULL  (Прочитано 6467 раз)
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« : Июль 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), то данных никаких не показывает. Как нужно правильно делать?
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
developer
Гость
« Ответ #1 : Июль 14, 2008, 14:39 »

По моему в доке написано, что для вашего же блага, ми не будем отображать те строки у которых внешние ключи равны NULL. Столкнувшись с этой проблемой, я просто вставлял в нужние поля(в данном случае ети поля - внешные ключи) данные, перехватывая сигнал beforeInserted(...). Это не решыло всех моих проблем, но все таки помогло.
Записан
Mikhail
Программист
*****
Offline Offline

Сообщений: 586


Просмотр профиля
« Ответ #2 : Июль 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 ) ;
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #3 : Июль 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 не всегда имеет значение?
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Mikhail
Программист
*****
Offline Offline

Сообщений: 586


Просмотр профиля
« Ответ #4 : Июль 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 не всегда имеет значение?

Ну, наверно это вопрос к построению архитектуры базы данных.
Значит не продумано.
Есть такая профессия - системный архитектор баз данных.
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #5 : Июль 15, 2008, 07:09 »

Ладно, обрисую ситуацию. Есть таблица доходов, где такие поля:
ID номер по порядку
NUMBER номер человека
SUMMA сумма дохода
OSNOVANIE основание, т.е. откуда взяли сведения о доходах.
Релейшн создается по полю OSNOVANIE, но проблема в том, что основания может не быть в 50% случаев. Что тут можно изменить?
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
ритт
Гость
« Ответ #6 : Июль 15, 2008, 07:55 »

OSNOVANIE INT NOT NULL DEFAULT 0 Улыбающийся
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #7 : Июль 15, 2008, 08:48 »

Птица не дает так сделать, ругается на внешний ключ. В общем или NULL или нормальное значение, но никак не 0.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Tonal
Гость
« Ответ #8 : Июль 15, 2008, 08:54 »

А в табличку оснований включить основание с ID = 0 и текстам "Без основания". Улыбающийся
« Последнее редактирование: Июль 15, 2008, 08:56 от Tonal » Записан
Tonal
Гость
« Ответ #9 : Июль 15, 2008, 08:56 »

Или наследоваться от QSqlRelationalTableModel и переписать selectStatement чтобы он не выкидывал эти записи. Улыбающийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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