crossplatform.ru

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


  Ответ в Снова о QSqlRelationalTableModel
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


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


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

Ладно, я уже понял, что в Qt нет полноценной работы с реляционными отношениями таблиц. На таком уровне, как например в Visual FoxPro. Оно и не удивительно, т.к. все это хозяйство передано на уровень SQL серверов.
Litkevich Yuriy Дата 27.6.2009, 5:36
  mva, про отдельные столбцы желания не понимаю.
Т.к. если они будут редактируемые то несколько столбцов должны будут одновременно свои значения менять, чтобы сохранить реляционную связь.
mva Дата 27.6.2009, 4:22
 
Цитата(Litkevich Yuriy @ 26.6.2009, 20:55) *
Цитата(mva @ 26.6.2009, 22:36) *
Но там же записаны выражения различной длины и если их "слепить вместе", то в этом столбце получится каша...
почему каша?


Н-е-е-е... Мне в отдельные столбцы надо... Еще есть какие-нибудь варианты?
Litkevich Yuriy Дата 26.6.2009, 19:55
 
Цитата(mva @ 26.6.2009, 22:36) *
Но там же записаны выражения различной длины и если их "слепить вместе", то в этом столбце получится каша...
почему каша?
mva Дата 26.6.2009, 18:36
 
Цитата(Litkevich Yuriy @ 26.6.2009, 19:26) *
с помощью только QSqlRelationalTableModel ни как, одно поле заменяется на другое и всё! (одно на одно)

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


В-о-о-т.... Уже кое-что проясняется... Т.е. вы предлагаете сделать конкатенацию нужных мне полей из связанной таблицы и подставлять ее? Но там же записаны выражения различной длины и если их "слепить вместе", то в этом столбце получится каша...
Litkevich Yuriy Дата 26.6.2009, 18:32
 
Цитата(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:11
 
Цитата(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]

Так?


Примерно так. Я хочу получить НЕСКОЛЬКО полей из таблицы, на которую ссылается ключ таблицы.
SABROG Дата 26.6.2009, 18: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:04
  mva, по сути ты не понял, что есть реляционная (относительная) связь в БД. Это место для себя прояснишь, отпадёт вопрос с Qt.

Цитата(mva @ 26.6.2009, 21:19) *
Возьмем этот пример
этот пример акуратно имеет два столбца с реляционными связями
City и Country
mva Дата 26.6.2009, 17:55
 
Цитата(Litkevich Yuriy @ 26.6.2009, 18:51) *
Цитата(mva @ 26.6.2009, 21:19) *
Это что, все эти значения (name, post_index, phone_code) запишутся во второй столбец? Или я чего-то не понимаю?
не угадал, в третий, т.к. используется не номер, а индекс столбца.


Я имею ввиду конечно индекс и нумерацию с 0. В примере написано "2", значит "второй", стоял бы "0" - тогда был бы "нулевой".

Но это не суть...
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 23.4.2024, 17:28