Вниз
Скачать: CL | DM;

Обход связанных 2-х таблиц - с шапкой и детализацией   Найти похожие ветки 

← →
Sergeyy ©   (2002-10-14 12:10) [0]

Есть 2 таблицы рецептов:
1. Заголовочная. MASTER(ID, INGRED_ID, UNIT_ID, DAT);("рецепт")
2. Детализация. DETAILS(MASTER_ID, INGRED_ID, UNIT_ID, AMOUNT);
MASTER.ID = DETAILS.MASTER_ID
Проблема в том, что каждый ингредиент, участвующий в детализации может иметь для себя такую же шапку и быть далее расписан на неограниченное количество вложений. Как мне наилучшим способом пройтись по все этим таблицам и получить список всех ингридиентов, участвующих в заданном рецепте, независимо от уровня вложенности.
База связязано с клиентским приложением через ADO Jet.


← →
passm ©   (2002-10-14 13:17) [1]

Sergeyy © (14.10.02 12:10)> ???
Тебе рекурсивный запрос нужен?


← →
Sergeyy ©   (2002-10-14 15:42) [2]

2 passm

Думаю, что, рекурсивный. В Access это можно сделать? (желательно в чистом SQL)


← →
passm ©   (2002-10-14 16:50) [3]

Sergeyy © (14.10.02 15:42)> Для Access"а ИМХО никак :-(
Можно написать процедуру/функцию:
procedure MyProc(Query: TQuery; const FieldID, FieldName, FieldChildCount, ParamParent: string; List: TStringList);
var
i, j: Integer;
begin
Query.First;
while not(Query.Eof) do
begin
List.Add(Query.FieldByName(FieldName).AsString);
if Query.FieldByName(FieldChildCount).AsInteger > 0 then
begin
i:= Query.FieldByName(FieldID).AsInteger;
j:= Query.ParamByName(ParamParent).AsInteger;
Query.ParamByName(ParamParent).AsInteger:= Query.FieldByName(FieldID).AsInteger;
Query.Close;
Query.Open;
MyProc(Query, FieldID, FieldName, FieldChildCount, ParamParent, List);
Query.ParamByName(ParamParent).AsInteger:= j;
Query.Close;
Query.Open;
Query.Locate(FieldID, i, [])
end;
Query.Next
end
end;

И запрос:
SELECT T1.ID, T1.NAME, T1.PARENT
FROM TABLE1 AS T1
WHERE T1.PARENT = :PARENT

P.S. Вместо List можно использовать редактируемый набор данных (например, Query, возвращающий пустой набор данных с нужными полями).


← →
MMF ©   (2002-10-14 16:57) [4]

Sergeyy © (14.10.02 12:10)
фактически, ты работаешь с деревом неопределенной глубины. Почитай http://sdm.viptop.ru/articles/sqltrees.html



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.016 c
14-11403
Arbin
2002-10-02 11:00
2002.11.04
Анализ текста - общение с компом


1-11193
sndanil
2002-10-24 16:10
2002.11.04
проблема с TIniFile


14-11424
Dmitriy Polskoy
2002-10-15 10:24
2002.11.04
Delphi Personal


4-11533
Oxy2
2002-09-20 11:40
2002.11.04
Как получить хендл главного окна приложения.


7-11516
BOOMER
2002-08-28 19:09
2002.11.04
Windows




   Наверх