Avatar billede netguru Nybegynder
13. august 2001 - 14:41 Der er 13 kommentarer og
1 løsning

Rekursiv relation

Jeg har en tabel, som jeg vil forsøge at afbillede her:

ID  Navn        OverID
--- -----      -------
1  Biler      0
2  Skoda      1
3  \'95        2
4  \'96        2
5  SAAB        1
6  \'89        5
7  \'90        5
8  grøn        7
9  gul        7


Der er altså tale om en \"rekursiv\" tabel, hvor nogle elementer hører under andre.

Kan det laves, såddan, at hvis jeg slettede \"SAAB\", så ville alle de poster, der hørte under \"SAAB\" (\"\'89\", \"\'90\", \"grøn\" og \"gul\") også forsvinde automatisk?
Avatar billede stigc Nybegynder
13. august 2001 - 14:42 #1
kan du ikke bare lave relationer mellem dem? Det kommer jo selvfølgelig an på databasen!
Avatar billede netsrac Praktikant
13. august 2001 - 14:43 #2
Du kan jo selv sørge for det:

id = \"5\"

delete from tabel where id = \" & id & \" or overid = \" & id
Avatar billede netguru Nybegynder
13. august 2001 - 14:43 #3
Jeg bruger MS Access 2000 skal nok lige nævnes.

Yderligere kan det nævnes, at jeg spørger pga, at man jo kan oprette eb relation mellem 2 tabeller, såddan at den automatisk sletter fra den \"svage\" tabel hvis den relaterede post bliver slettet i den \"stærke\" tabel
Avatar billede netguru Nybegynder
13. august 2001 - 14:46 #4
netsrac: så ville \"grøn\" og \"gul\" ligge tilbage uden at lave andet end af fylde i databasen.

Hvilket bliver et problem med en rekursiv kode hvor der er mange underniveuer.
Avatar billede netguru Nybegynder
13. august 2001 - 14:47 #5
sigc: Jeg kan ikke få Acces til at lave en ralation mellem to kolonner i samme tabel nej... derfor spørger jeg om det overhovedet kan lade sig gøre.
Avatar billede stigc Nybegynder
13. august 2001 - 14:54 #6
jeg har lige prøvet, og jeg kunne heller ikke....
Jeg tror du selv må finde id\'er du skal slette med en rekursiv funktion...
Avatar billede netsrac Praktikant
13. august 2001 - 14:58 #7
Så lav en rekursiv funktion som stigc siger.
Avatar billede netsrac Praktikant
13. august 2001 - 15:00 #8
sub deletecat(id)
set rs = conn.execute(\"select id from tabel where overid = \" & id)
Do until rs.eof
deletecat(rs(\"id\"))
rs.movenext
Loop
set rs = nothing
conn.execute(\"delete from tabel where id = \" & id)
End sub
Avatar billede stigc Nybegynder
13. august 2001 - 15:01 #9
select alle poster, ligger dem i et array \"getRows()\", og arbejd med dem her fra!
Avatar billede stigc Nybegynder
13. august 2001 - 15:02 #10
det giver 1 til mange SQL kald, hvor min metode kun giver 2 kald! Hvis der ikke er meget data, så er nestracs den nemmeste...
Avatar billede ldanielsen Nybegynder
13. august 2001 - 16:52 #11
Hvis de kun \"ikke må ligge og rode\", så kan du vel slette dem én gang i døgnet, ikke?

Med
DELETE FROM Tabellen WHERE OverID NOT IN (SELECT
ID FROM Tabellen)

får du slettet et \"niveau\" ad gangen, så hvis du kører den 2-3 gange hver midnat, så vil der da være ryddet nogenlunde op.

Ellers må du lave en løkke der checkker om der er nogle der skal slettes, og bliver ved indtil der ikk er flere.

OBSOBSOBS!!!

Du er lige nødt til at lave en \"Startpost\", ellers forsvinder alt!
ID  Navn    OverID
--  ----    ------
0    start    0
Avatar billede netguru Nybegynder
14. august 2001 - 08:29 #12
Jeg lavede noget ala netsracs løsning allerede i går, da I ikke mente Access selv kunne tage sig af det. Jeg kan sagtens finde ud af at lave noget ASP kode, der sletter det, så spørgsmålet gik på, om Access kunne gøre det.

Desværre, men I skal have mange tak for hjælpen alligevel. Jeg undskylder selvfølgelig hvis jeg ikke fik udtrykt mig klart nok.

stigc: hvis du vil have nogen point for at svare \"nej - det kan ikke lade sig gøre\", må du hellere lige smide et svar ;o)
Avatar billede stigc Nybegynder
14. august 2001 - 18:34 #13
det er nu lige meget....
Avatar billede netguru Nybegynder
15. august 2001 - 08:07 #14
OK... men ordnung muss sein  - eller noget i den retning.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester