Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 30.07.2012, 15:55
goshaRU goshaRU вне форума
Прохожий
 
Регистрация: 23.04.2012
Сообщения: 7
Репутация: 10
По умолчанию Как заменить связь Master-detail?

День добрый
firebird 2.0 +delphi7
имеется 3 таблицы:
RESEARCH // таблица с названиями исследований
RESEARCH_UID //ключ
RESEARCH_NAME//название

MAIN // таблица основных данных по образцу
M_UID//ключ, остальные строки не существенны

RESEARCH_TABLE//таблица соответствий исследований образцу из MAIN, т.к. не известно сколько будет исследований для образца связываем через неё
RT_UID// ключ
R1//внешний ключ на RESEARCH_UID
RES_EXT//внешний ключ на M_UID

Сейчас с использованием Master-detail для текущей выбранной записи отображаются исследования в отдельной таблице. Пользователи говорят что это не наглядно, хотят видеть в общей таблице (select * from MAIN) еще и данные по исследованиям.
Т.е. нужно, в идеале, добавить столбец где через запятую перечислены все исследования по образцу.
Менее желательный вариант добавить 5 столбцов в которых соответственно первые 5 исследований
Подскажите как правильно реализовать.

Последний раз редактировалось goshaRU, 30.07.2012 в 18:51.
Ответить с цитированием
  #2  
Старый 30.07.2012, 18:00
Аватар для Yurk@
Yurk@ Yurk@ вне форума
Специалист
 
Регистрация: 07.09.2007
Адрес: Украина, г. Днепропетровск
Сообщения: 892
Версия Delphi: 7 + ОгнеПтица
Репутация: выкл
По умолчанию

Код:
SELECT <нужные столбцы>
FROM main m, research r, research_table rt
WHERE rt._res_ext = m.m_uid
AND rt.r1 = r.research_uid
__________________
Поживу - увижу, Доживу - узнаю, Выживу - учту.
[P.S.]->Выражая благодарность за помощь - Вы получаете шанс на помощь в следующий раз
Ответить с цитированием
  #3  
Старый 30.07.2012, 18:45
goshaRU goshaRU вне форума
Прохожий
 
Регистрация: 23.04.2012
Сообщения: 7
Репутация: 10
По умолчанию

Yurk@
вы в точности привели мой запрос для detail грида
видимо я непонятно сформулировал задачу. попробую ещё раз, с примером.
Имеется 2 dbgrid. в первом содержание MAIN, например 4 столбца:
m_uid=1,номер_в_журнале=100,культура=кукуруза,вес= 100т.
во втором гриде, связанные с выбранной в первом гриде строкой исследования. Например имея 3 исследования по данному образцу получаем
RT_UID=1, RESEARCH_NAME=масличность, RES_EXT=:M_UID=1
RT_UID=2, RESEARCH_NAME=всхожесть, RES_EXT=:M_UID=1
RT_UID=3, RESEARCH_NAME=безопасность, RES_EXT=:M_UID=1

из всего этого нужно получить один грид который содержит 1 строку, в ней 4 столбца из первого грида + 1 столбец с тремя исследованиями через запятую/пробел (либо +3 столбца по одному исследованию в каждом):
m_uid=1,номер_в_журнале=100,культура=кукуруза,вес= 100т, исследования=масличность, всхожесть,безопасность
либо
m_uid=1,номер_в_журнале=100,культура=кукуруза,вес= 100т, исследование1=масличность, исследование2=всхожесть,исследование3=безопасность

Последний раз редактировалось goshaRU, 30.07.2012 в 18:50.
Ответить с цитированием
  #4  
Старый 30.07.2012, 18:59
Аватар для Yurk@
Yurk@ Yurk@ вне форума
Специалист
 
Регистрация: 07.09.2007
Адрес: Украина, г. Днепропетровск
Сообщения: 892
Версия Delphi: 7 + ОгнеПтица
Репутация: выкл
По умолчанию

а какая БД для этого применяется? Access ?
__________________
Поживу - увижу, Доживу - узнаю, Выживу - учту.
[P.S.]->Выражая благодарность за помощь - Вы получаете шанс на помощь в следующий раз
Ответить с цитированием
  #5  
Старый 30.07.2012, 19:00
Аватар для Yurk@
Yurk@ Yurk@ вне форума
Специалист
 
Регистрация: 07.09.2007
Адрес: Украина, г. Днепропетровск
Сообщения: 892
Версия Delphi: 7 + ОгнеПтица
Репутация: выкл
По умолчанию

и, я так понимаю, кол-во исследований для каждой культуры может варьироваться? так?
__________________
Поживу - увижу, Доживу - узнаю, Выживу - учту.
[P.S.]->Выражая благодарность за помощь - Вы получаете шанс на помощь в следующий раз
Ответить с цитированием
  #6  
Старый 30.07.2012, 19:05
goshaRU goshaRU вне форума
Прохожий
 
Регистрация: 23.04.2012
Сообщения: 7
Репутация: 10
По умолчанию

firebird 2.0
да, варьируется. можно принять для простоты что в итоговой таблице не будем больше 5ти исследований отображать
Ответить с цитированием
  #7  
Старый 30.07.2012, 19:25
Аватар для Yurk@
Yurk@ Yurk@ вне форума
Специалист
 
Регистрация: 07.09.2007
Адрес: Украина, г. Днепропетровск
Сообщения: 892
Версия Delphi: 7 + ОгнеПтица
Репутация: выкл
По умолчанию

тогда так:
Код:
SELECT stolb1, stolb2, stolb3, LIST(research_name, ';')
FROM (select m.stolb1, m.stolb2, m.stolb3, r.research_name
  from main m, research r, research_table rt
  where rt._res_ext = m.m_uid and rt.r1 = r.research_uid)
GROUP BY <столбик(и) по которому будет делаться групировка>
P.S. только скорее всего прийдется перейти как минимум на firebird 2.1 т.к. 2.0 вроде не поддерживает эту функцию
__________________
Поживу - увижу, Доживу - узнаю, Выживу - учту.
[P.S.]->Выражая благодарность за помощь - Вы получаете шанс на помощь в следующий раз
Ответить с цитированием
  #8  
Старый 30.07.2012, 20:34
goshaRU goshaRU вне форума
Прохожий
 
Регистрация: 23.04.2012
Сообщения: 7
Репутация: 10
По умолчанию

обновился до 2.1
Код:
SELECT M_UID, num_p, NUM_ACT, LIST(research_name, ';')
FROM (select m.M_UID, m.num_p, m.NUM_ACT, r.research_name
  from main m, research r, research_table rt
  where rt.res_ext = m.m_uid and rt.r1 = r.research_uid)
GROUP BY num_p
выдает
Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Invalid expression in the select list (not contained in either an aggregate function or the GROUP BY clause).

upd. еще веселее
вот на такую простенькую
Код:
select 
    list   (research_name, ',')
from research_table,
research
where 
   (
      (res_ext = 748)
   and 
      (r1 = research_uid)
   )
ibexpert выдает результат,а Delphi только пишет в гриде (Memo)

Последний раз редактировалось goshaRU, 30.07.2012 в 20:47.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 15:10.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter