crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V  < 1 2  
Ответить в данную темуНачать новую тему
> Снова о QSqlRelationalTableModel, А если нужно взять несколько столбцов из другой таблицы?
mva
  опции профиля:
сообщение 26.6.2009, 18:11
Сообщение #11


Участник
**

Группа: Участник
Сообщений: 104
Регистрация: 15.3.2009
Из: Киров
Пользователь №: 615

Спасибо сказали: 3 раз(а)




Репутация:   0  


Цитата(Litkevich Yuriy @ 26.6.2009, 18:58) *
mva, по сути ты не понял, что есть реляционная (относительная) связь в БД. Это место для себя прояснишь, отпадёт вопрос с Qt.


С реляционными БД я работаю очень давно (на Visual FoxPro, до этого на FoxPro 2.6. Примерно с 92-го года), хорошо представляю себе что такое...

А вот Qt хотя мне в целом нравится, но в плане работы с базами данных представляется мне несколько корявой.

Но вернемся к вопросу...

model->setTable("employee");
model->setRelation(2, QSqlRelation("city", "id", "name"));


Что означает здесь циферка 2? Она означает, что во втором (т.е. третьем) столбце находится внешний ключ, по которому мы найдем соответствующую запись в таблице city, и подставим вместо него (ключа) значение поля Name из нее. Правильно? Как мне сказать Qt, что я хочу из найденной записи взять еще поле phone_code?

model->setRelation([b]3[/b], QSqlRelation("city", "id", "phone_code"));


Так?




Цитата(SABROG @ 26.6.2009, 19:06) *
Кажется я понял о чем ты. Если есть таблицы:

User:
id, name, country_key, city_key, address_key

country:

id, name, GPS

city:

id, name, population, GMT

address:

id, street, room, phone


То вместо:

Вася, Россия, Мухосранск, ул. Ленина, 25

ты хочешь получать:

Вася, Россия,[GPS], Мухосранск, [pupulation], [GTM], ул. Ленина, 25, [room], [phone]

Так?


Примерно так. Я хочу получить НЕСКОЛЬКО полей из таблицы, на которую ссылается ключ таблицы.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 26.6.2009, 18:32
Сообщение #12


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(mva @ 26.6.2009, 22:11) *
Что означает здесь циферка 2? Она означает, что во втором (т.е. третьем) столбце таблицы employee находится внешний ключ, по которому мы найдем соответствующую запись в таблице который ссылается на поле id таблицы city, и подставим вместо него (ключа) значение поля Name из нее. Правильно?
здесь всё верно. Разме что я бы сказал более точно (выделил)

Цитата(mva @ 26.6.2009, 22:11) *
Как мне сказать Qt, что я хочу из найденной записи взять еще поле phone_code?
с помощью только QSqlRelationalTableModel ни как, одно поле заменяется на другое и всё! (одно на одно)

Можно поступить так, наиболее простое решение, создать вычисляемый столбец в связанной таблице, и подставлять его.

Вот пример:
Прикрепленное изображение

Здесь столбец "Т.У." Это вычисляемое поле в БД (Имя подстанции и номер ячейки, плюс текст "яч.")
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
mva
  опции профиля:
сообщение 26.6.2009, 18:36
Сообщение #13


Участник
**

Группа: Участник
Сообщений: 104
Регистрация: 15.3.2009
Из: Киров
Пользователь №: 615

Спасибо сказали: 3 раз(а)




Репутация:   0  


Цитата(Litkevich Yuriy @ 26.6.2009, 19:26) *
с помощью только QSqlRelationalTableModel ни как, одно поле заменяется на другое и всё! (одно на одно)

Можно поступить так, наиболее простое решение, создать вычисляемый столбец в связанной таблице, и подставлять его.


В-о-о-т.... Уже кое-что проясняется... Т.е. вы предлагаете сделать конкатенацию нужных мне полей из связанной таблицы и подставлять ее? Но там же записаны выражения различной длины и если их "слепить вместе", то в этом столбце получится каша...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 26.6.2009, 19:55
Сообщение #14


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(mva @ 26.6.2009, 22:36) *
Но там же записаны выражения различной длины и если их "слепить вместе", то в этом столбце получится каша...
почему каша?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
mva
  опции профиля:
сообщение 27.6.2009, 4:22
Сообщение #15


Участник
**

Группа: Участник
Сообщений: 104
Регистрация: 15.3.2009
Из: Киров
Пользователь №: 615

Спасибо сказали: 3 раз(а)




Репутация:   0  


Цитата(Litkevich Yuriy @ 26.6.2009, 20:55) *
Цитата(mva @ 26.6.2009, 22:36) *
Но там же записаны выражения различной длины и если их "слепить вместе", то в этом столбце получится каша...
почему каша?


Н-е-е-е... Мне в отдельные столбцы надо... Еще есть какие-нибудь варианты?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 27.6.2009, 5:36
Сообщение #16


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


mva, про отдельные столбцы желания не понимаю.
Т.к. если они будут редактируемые то несколько столбцов должны будут одновременно свои значения менять, чтобы сохранить реляционную связь.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
mva
  опции профиля:
сообщение 27.6.2009, 19:10
Сообщение #17


Участник
**

Группа: Участник
Сообщений: 104
Регистрация: 15.3.2009
Из: Киров
Пользователь №: 615

Спасибо сказали: 3 раз(а)




Репутация:   0  


Цитата(Litkevich Yuriy @ 27.6.2009, 6:36) *
mva, про отдельные столбцы желания не понимаю.
Т.к. если они будут редактируемые то несколько столбцов должны будут одновременно свои значения менять, чтобы сохранить реляционную связь.


Такое ощущение, что вы совсем не работали с реляционными базами данных. Если я изменяю атрибуты (поля) связанной таблицы, то это не значит, что реляционная связь теряется, т.к. я не трогаю значения ключей.

Ладно, я уже понял, что в Qt нет полноценной работы с реляционными отношениями таблиц. На таком уровне, как например в Visual FoxPro. Оно и не удивительно, т.к. все это хозяйство передано на уровень SQL серверов.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V  < 1 2
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 30.12.2024, 20:24