Снова о QSqlRelationalTableModel, А если нужно взять несколько столбцов из другой таблицы? |
Здравствуйте, гость ( Вход | Регистрация )
Снова о QSqlRelationalTableModel, А если нужно взять несколько столбцов из другой таблицы? |
mva |
26.6.2009, 15:46
Сообщение
#1
|
Участник Группа: Участник Сообщений: 104 Регистрация: 15.3.2009 Из: Киров Пользователь №: 615 Спасибо сказали: 3 раз(а) Репутация: 0 |
Все примеры использования QSqlRelationalTableModel сделаны для демонстрации работы с одним столбцом из другой таблицы. Как быть, если мне нужно взять несколько столбцов из другой таблицы?
|
|
|
SABROG |
26.6.2009, 15:57
Сообщение
#2
|
Профессионал Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: 34 |
Я активно не работал с этим классом и отказался от него из-за того, что он не отображает строки, где не находится "отношение" - ключ ссылается на данные, которых нет. Мне для задачи надо было перевязывать ключи динамически, отвязывать когда не нужны. А если не показывается строка, которую можно "перевязать", то и работать с этим классом нельзя.
|
|
|
Litkevich Yuriy |
26.6.2009, 16:51
Сообщение
#3
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
mva, а что именно тебе не понятно?
У меня в одной из таблиц несколько столбцов, и вопросов даже не возникло. |
|
|
mva |
26.6.2009, 17:19
Сообщение
#4
|
Участник Группа: Участник Сообщений: 104 Регистрация: 15.3.2009 Из: Киров Пользователь №: 615 Спасибо сказали: 3 раз(а) Репутация: 0 |
Возьмем этот пример
В нем таблица city имеет 2 поля: id и name. А если, предположим, эта таблица имеет еще поля? Ну, например, почтовый индекс и междугородный телефонный код (поля таблицы city: id, name, post_index, phone_code) и мне их нужно отобразить? Как строить реляции? Как в таком случае писать? model->setTable("employee"); model->setRelation(2, QSqlRelation("city", "id", "name")); model->setRelation(2, QSqlRelation("city", "id", "post_index")); model->setRelation(2, QSqlRelation("city", "id", "phone_code")); Так что ли? Это что, все эти значения (name, post_index, phone_code) запишутся во второй столбец? Или я чего-то не понимаю? |
|
|
SABROG |
26.6.2009, 17:36
Сообщение
#5
|
Профессионал Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: 34 |
Я чего-то не понимаю. В отношении всегда 2 объекта:
- объект, который ссылается - объект на который ссылаются Если есть Петя, в поле "адрес" у которого ключ 1. В другой таблице по ключу 1 стоит "Мухосранск, 10, кв.20". Ключ "1" не может ссылаться сразу на 2 и более объекта. Например "номер пасспорта", "телефонный номер" и "приводы в милицию". Вернее, теоретически может. Но обычно все PRIMARY ключи - автоинкрементируемые. Если только в одну из перечисленных полей добавится запись, то ключи перестанут совпадать. Это должна быть какая-то синхронность редактирования БД чтоль. |
|
|
mva |
26.6.2009, 17:48
Сообщение
#6
|
Участник Группа: Участник Сообщений: 104 Регистрация: 15.3.2009 Из: Киров Пользователь №: 615 Спасибо сказали: 3 раз(а) Репутация: 0 |
Есть конечно вариант использовать не таблицу employee, а ее просмотр, в котором для каждого поля внешней таблицы city сделать свой ключ - копию ключа city. Например так:
CREATE VIEW vw_employee AS SELECT ID, Name, City AS city_name, City AS city_post_index, City AS city_phone_code , Country FROM employee А потом в приложении написать: model->setTable("vw_employee"); model->setRelation(2, QSqlRelation("city", "id", "name")); model->setRelation(3, QSqlRelation("city", "id", "post_index")); model->setRelation(4, QSqlRelation("city", "id", "phone_code")); Этот вариант прокатит, но не хотелось бы использовать такие "костыли" - некрасиво. И возможность редактирования таблицы employee здесь теряется... Я чего-то не понимаю. В отношении всегда 2 объекта: - объект, который ссылается - объект на который ссылаются Если есть Петя, в поле "адрес" у которого ключ 1. В другой таблице по ключу 1 стоит "Мухосранск, 10, кв.20". Ключ "1" не может ссылаться сразу на 2 и более объекта. Например "номер пасспорта", "телефонный номер" и "приводы в милицию". Вернее, теоретически может. Но обычно все PRIMARY ключи - автоинкрементируемые. Если только в одну из перечисленных полей добавится запись, то ключи перестанут совпадать. Это должна быть какая-то синхронность редактирования БД чтоль. Все правильно, в отношении "один-к-одному" всегда 2 объекта. Но, у каждого из этих объектов может быть несколько атрибутов. Например, у Пети может быть задан день рождения и место рождения, а может еще что-то. Так вот, у проживающего по адресу "Мухосранск, 10, кв.20" я хочу знать ФИО, дату рождения и где он родился. Или мне для каждого атрибута отдельную таблицу заводить? Отдельно таблицу для дат рождения с двумя полями, отдельно таблицу мест рождений тоже с двумя полями. Так что ли? |
|
|
Litkevich Yuriy |
26.6.2009, 17:55
Сообщение
#7
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
Это что, все эти значения (name, post_index, phone_code) запишутся во второй столбец? Или я чего-то не понимаю? не угадал, в третий, т.к. используется не номер, а индекс столбца.у, например, почтовый индекс и междугородный телефонный код (поля таблицы city: id, name, post_index, phone_code) и мне их нужно отобразить? Вот и запиши на бумажке:
И код:
А теперь расшифруй запись во втрой строке и связь с таблицей employee |
|
|
mva |
26.6.2009, 17:55
Сообщение
#8
|
Участник Группа: Участник Сообщений: 104 Регистрация: 15.3.2009 Из: Киров Пользователь №: 615 Спасибо сказали: 3 раз(а) Репутация: 0 |
Это что, все эти значения (name, post_index, phone_code) запишутся во второй столбец? Или я чего-то не понимаю? не угадал, в третий, т.к. используется не номер, а индекс столбца.Я имею ввиду конечно индекс и нумерацию с 0. В примере написано "2", значит "второй", стоял бы "0" - тогда был бы "нулевой". Но это не суть... |
|
|
Litkevich Yuriy |
26.6.2009, 18:04
Сообщение
#9
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
|
|
|
SABROG |
26.6.2009, 18:06
Сообщение
#10
|
Профессионал Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: 34 |
Кажется я понял о чем ты. Если есть таблицы:
То вместо: Вася, Россия, Мухосранск, ул. Ленина, 25 ты хочешь получать: Вася, Россия,[GPS], Мухосранск, [pupulation], [GTM], ул. Ленина, 25, [room], [phone] Так? |
|
|
Текстовая версия | Сейчас: 22.12.2024, 17:19 |