Форум: "Базы";
Текущий архив: 2006.05.21;
Скачать: [xml.tar.bz2];
ВнизСоединение таблиц многие к одним Найти похожие ветки
← →
Ярослав (2006-03-29 10:10) [0]Доброго времени суток .
Подскажите пожалуйста, кто знает как правильно организовать соединение таблиц многие к одному
я делаю это всегда вот так …
У меня две таблицы master и одна detail.
Id первого мастера я получаю из datasource, а
Id второго мастера я получаю вот примерно таким образом (
procedure TDM.DataSource_SNDDataChange(Sender: TObject; Field: TField);
begin
DM.pFIBDataSet_NPG.ParamByName("ISND").AsInteger:=DM.pFIBDataSet_SND.FieldValues ["SND_ID"];
}
end; )
← →
Sergey13 © (2006-03-29 10:17) [1]>я делаю это всегда вот так …
И что перестало устраивать?
Я обычно вешаю смену параметра мастер_ИД на АфтерСкрол мастера. Там же переоткрываю детайл-датасет.
← →
Ярослав (2006-03-29 10:51) [2]Меня это устраивает, конечно, но всегда приходится писать кучу всяких условий, я думал что есть какая то мало документированная поддержка использования нескольких datasource одновременно , и так просто интересно какие решения этой проблемы люди предлагают.
← →
Виталий Панасенко (2006-03-29 15:07) [3]Я так понял, используешь FIBPlus ? почитай на www.devrace.com статьи по поводу организации мастер-детали в этих компонентах... В опциях можно настроить даже то, что не нужно открывать в коде деталь, достаточно открыть мастер таблицы. а деталь откроется сама. А, может, я не понял вопрос.
← →
Ярослав (2006-03-29 18:37) [4]Я имел введу использование нескольких мастеров одновременно, соединение таблиц .- «многие к одному»,
то что в fib настроить можно что угодно я заметил .
А вот варианты передачи значения id второго мастера меня интересует.
Id первой мастер таблицы я получаю через datasource
А id второго мастера я получаю FieldValues ["SND_ID"] это как по мне не всегда удобно при редактировании деталь таблицы..
Хотя кажись я уже придумал как я сделаю.
← →
Виталий Панасенко (2006-03-29 19:16) [5]нифига не понял. как это "две мастер таблицы" ?!!!
← →
Ярослав (2006-03-29 20:36) [6]Очень просто
Допустим у нас 3и таблицы
Одна таблица Наименований оборудования ;
Вторая таблица Предприятий ;
Третья таблица стоимостей;
Вот таблица стоимостей есть Detail таблицей .
Естественно когда мы заполняем таблицу стоимостей (прайс), мы получаем ID наименований оборудования тем самым обозначая что вот эта единица оборудования имеет вот такую стоимость,
Так же мы получаем и ID предприятия, тобишъ обозначаем что эта стоимость принадлежит определенному предприятию.
Для примера структура вот такая
Таблица наименования оборудования поля->( OBORUD_ID, OBORUD_NAIM)
OBORUD_ID- (ID единицы оборудования ) он же первичный ключ
OBORUD_NAIM -(наименование оборудования )
Таблица предприятий поля->(PRED_ID, PRED_NAIM)
PRED_ID-( ID предприятия ) он же первичный ключ
PRED_NAIM (наименование предприятия)
Таблица Стоимостей поля -> (STOIM_ID, ID_OBORUD, ID_PRED, STOIM)
STOIM_ID (ID стоимости) он же первичный ключ
ID_OBORUD (вот по этому полю связь с таблицей оборудования тобиш значение OBORUD_ID) внешний ключ
ID_PRED (вот по этому полю связь с таблицей оборудования тобиш значение PRED_ID) внешний ключ
STOIM (поле стоимости )
Вот я и связываю ID_OBORUD=OBORUD_ID, и ID_PRED=PRED_ID
Механизм получения значения OBORUD_ID, Через datasource
А вот значение PRED_ID, я получаю приблизительно вот так
procedure TDM.DataSource_SNDDataChange(Sender: TObject; Field: TField);
begin
DM.pFIBDataSet_STOIM.ParamByName(" ID_PRED ").AsInteger:=DM.pFIBDataSet_PRED.FieldValues [" PRED_ID "];
end; )
Мой вопрос заключался в том как можно более нормально это все организовать.
Мой вариант такой организации соединения таблиц «многие к одному», неудобен тем что
пишу постоянно всякие условия для проверки на неопределенное значение. Вот от так
отрывок из пробного исходника ,
procedure TDM.DataSource_SNDDataChange(Sender: TObject; Field: TField);
begin
if DM.pFIBDataSet_SND.FieldValues["SND_ID"]=null then
begin
…..
end else
SND_SND_ID:=DM.pFIBDataSet_SND.FieldValues["SND_ID"];
DM.pFIBDataSet_NPG.ParamByName("ISND").AsInteger:=SND_SND_ID ;
end;
Хотя возможно и сам расдуплюсь.
Эли это очень просто, и я просто этого не знаю ..
Или соединение таблиц многое к одним , ни кто не использует и по этому вопросов таких ни у кого не возникает.
Плохо что все Вумные книжки, идут с простыми примерами, максимум что можно встретить это пример организации соединения таблиц, один ко многим…..
← →
Johnmen © (2006-03-29 20:49) [7]В общем, я кажись понЯл, в чем тут дело...:)
Автору срочно читать, а потом и делать, лукапные поля в наборе данных "Таблица Стоимостей" !!!
И не надо никаких тусклых корявых "способов".
← →
Виталий Панасенко (2006-03-30 09:17) [8]Да, "ну очень сложный вопрос". Два несчастных справочника и одна рабочая таблица. И как там выбрать из справочника название, имея его айди ?!.Точно, задача типа теоремы Ферма: А*А+Б*Б=Ц*Ц.:-))
← →
Ярослав (2006-03-30 09:50) [9]Нет дело тут не в том как выбрать !
Именно способов это сделать хватает и воображения тоже.
Я спрашивал как лучше это делать, (тобишь получение текущего значения поля)
Это в примере просто 2а справочника … -)
Вобщем наверное я буду использовать класс Tfield и не …себе мозги .
Спасибо всем за помощь тема закрыта..
← →
Виталий Панасенко (2006-03-30 15:20) [10]Все равно, ни хрена не понял. В чем вопрос ?...
← →
vovnuke © (2006-03-30 15:34) [11]2Виталий Панасенко
Как я понял надо было организовать два_мастера-детайл соотношение.
← →
Ярослав (2006-03-31 09:40) [12]Да я говорил о- два_мастера-детайл соотношение , но я спрашивал не как это делается в принципе ,
а как это лучше всего организовывать- тоесть самый оптимальный постой и проверенный вариант.
это в примере их 2-амастера_детал соотношения , а в жизни бывает намного больше, как я это делаю я показывал выше , «для кого то это и тусклый метод» -но так пол инета делает, некоторой народ вообще, для каждой таблички свой класс делает, декларируя там поля и..т.п.
По этому я и спросил , вы ведь наверное не один год базами занимаетесь, опыта много, перепробовали наверное много чего , чтоб облегчить себе жизнь.
← →
vovnuke © (2006-03-31 09:49) [13]А для чего возникла такая необходимость, если не секрет?
← →
Ярослав (2006-03-31 10:18) [14]Нет не секрет, долбаюсь с одной базкой не очень сложной вот у нее в следствии нормализации чуть сложная структура взаимодействия таблиц получилась.
Кода несколько таких связей нету проблем, пользую то что умею.
а тут возникла проблемка такая , фактически у меня получилось несколько табличек
с соединением типа (многие к одним) к 1-й табличке обращается -2-а мастер справочника, к второй табличке обращается 1–я табличка как мастер и еще аж 3-и справочника, и 3-я табличка мастером для нее есть 1–я табличка и еще -2а справочника .
и для каждой из этих табличек еще и генерируется уникальное значение из строковой суммы ID полей , это моя 2-я база IB, раньше я делал подобное но пользовал я
AbsoluteDatabase – нормально организовать такое взаимодействие как по мне много кода.
Я сам не программист , и не работаю программистом , но пришлось научится для облегчения себе жизни.
А понадобилось мне оно для того, что как правило нужно замутить базку не глючную , за сжатые сроки пару -«выходных»- по этому я и мщу оптимальный вариант , чтоб можно было написать какуето функцию которую можно будет просто копировать и забыть о всяких поточных ошибках, которые возникают.
← →
Sergey13 © (2006-03-31 10:31) [15]2[14] Ярослав (31.03.06 10:18)
Напиши единый обработчик переоткрытия детайла и повесь его на АфтерСкрол всех мастеров. Только тут надо следить за слишком частым переоткрытием детайла при создании формы/контролов - это иногда вызывает пролистывание всего датасета.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2006.05.21;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.013 c