Guten morgen =)
@p80286
Richtig sind solche 3 Tabellen.
@FredFesl Danke das kommt schon nah ran aber hat leider den effekt dass einige Kat_ids ausgelassen werden.
hier nochmal ein Beispiel von meinen Kategorien:
Tabelle DynKat
kat_id parent_id bezeichnung posi
2 0 Hauptkat 1
4 2 Unterkat1 1
5 2 Unterkat2 2
6 5 UnterUnterkat 1
PROBLEM: Prozedur sollte mir 4,5,6 ausgeben, gibt mir aber nur 5,6 aus!
Weil bevor die
Query EOF ist erneut rekursiv aufgerufen wird. Sie sollte aber natürlich nachdem sie 4,5 notiert hat nochmal rekursiv mit 4 aufgerufen werden und falls dort Unterkategorien vorhanden sind, diese auch wieder in while not EOF aufrufen. Danach quasi zurückkehren und mit 5 das gleiche Spiel!
Ist das überhaupt so möglich ?
hier mein Code:
Delphi-Quellcode:
procedure TfrmArtikelkategorien.selectArtikel(kat_id:
string; myKats: Tstringlist);
var
subquery :
string;
query : Tadsquery;
i: Integer;
begin
query := Tadsquery.Create(self);
try
query.AdsConnection := con_dynkat;
query.DatabaseName := '
con_dynkat';
query.Close;
query.SQL.Clear;
query.SQL.Add('
select kat_id from dyn_kat where parent_id ='+kat_id+'
');
query.Open;
if query.RecordCount > 0
then
begin
while not Query.eof
do
begin
if myKats.IndexOf(
Query['
kat_id'])=-1
then
begin
myKats.add(
Query['
kat_id']);
selectArtikel(
Query['
kat_id'], myKats);
end;
query.next;
end;
end;
finally
query.Free;
end;
for i := 0
to mykats.Count - 1
do
begin
showmessage(myKats[i]);
end;
end;