[Access/SQL] Bedrijfsstructuur

Pagina: 1
Acties:

  • TweakersOnly
  • Registratie: September 2000
  • Laatst online: 18:56
Welke databasestructuur kan ik in Access gebruiken zodat ik (gemakkelijk) via SQL de bedrijfsstructuur kan ophalen? Op dit moment heb ik de volgende structuur:

code:
1
2
3
4
5
Tabel: AFDELING

AfdelingID (PK)
Omschrijving
Moederafdeling (Verwijziging naar een andere afdeling)

Stel dat Afdeling B, C en D verantwoording moeten afleggen aan afdeling A: Deze afdeling krijgen dus in de database bij moederafdeling A toegekend. Stel verder dat afdeling E verantwoording aflegt aan afdeling B en afdeling F verantwoording aflegt aan D.

Als ik nu een overzicht wil opvragen van alle afdelingen die direct onder afdeling A staan dan volstaat de volgende query:
code:
1
SELECT * FROM Afdeling WHERE Moederafdeling = 'A'

De afdelingen E en F staan daarentegen indirect ook onder A, maar deze afdelingen kan ik niet middels een query opvragen. Of wel soms? :)

Verwijderd

Dat is idd niet mogelijk met 1 query, maar wel als je daarvoor een scriptje voor schrijft.

  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 13:54

Crazy D

I think we should take a look.

In 1 query zonder dat je nog wat moet scripten kan volgens mij niet, je kan de tabel wel joinen met zichzelf op parent, iets a la
code:
1
2
3
4
5
select *
from tabel t
left join tabel tt on t.id = tt.parentid
where t.parentid = 0 and tt.parentid <> 0
order by t.id, tt.id

Wat het resultaat zal geven in de form
code:
1
2
3
4
1e afdeling - omschrijving - 1e childafdeling
1e afdeling - omschrijving - 2e childafdeling
2e afdeling - omschrijving - 1e childafdeling
...

Dat idee dan :)

Exact expert nodig?


  • TweakersOnly
  • Registratie: September 2000
  • Laatst online: 18:56
Ik heb inmiddels een beetje gestoeid met ASP en SQL en voor het probleem een functie proberen te schrijven. Hieronder de code.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
FUNCTION GetAfdelingen (AfdelingID)
    dim Tabel(), nRecords, objAFDELINGEN
    nRecords = 0
    SQL = "SELECT AfdelingID FROM Afdeling"
    SQL = SQL & " WHERE ParentID = " & AfdelingID
    set objAFDELINGEN = DBConn.Execute(SQL)
    DO UNTIL objAFDELINGEN.EOF = TRUE
        dim i, deeltabel
        deeltabel = getAfdelingen (objAFDELINGEN("AfdelingID"))
        i = UBOUND (deeltabel)
        REDIM PRESERVE tabel(nRecords + i)  
        WHILE (i > 0)
            Tabel (nRecords - i + 1) = deeltabel (i - 1)
            i = i - 1
        WEND
    LOOP
    objAFDELINGEN.Close
    set objAFDELINGEN = nothing
    getAfdelingen = Tabel
END FUNCTION

Ik weet niet of het gaat werken (ga ik zo proberen :) ), maar mijn gevoel zegt me dat dit goed moet kloppen. Zijn er nog opmerkinen (positief of negatief) over deze aanpak?