Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Ispisivanje stabla (tree) / rekurzija

[es] :: Access :: Ispisivanje stabla (tree) / rekurzija

[ Pregleda: 3955 | Odgovora: 12 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

mpaja
Milorad Pavlovic
Loznica

Član broj: 85296
Poruke: 110
*.dynamic.sbb.rs.



Profil

icon Ispisivanje stabla (tree) / rekurzija12.02.2011. u 13:36 - pre 160 meseci
Da li se nako bavio ispisivanjem stabla (tree) u access2003. Da poblize objasnim:

postoji tabela sledece strukture

Id ParentId Name

1 0 Root
2 0 Root1
3 1 Pera
4 1 Mika
5 2 Joca
6 3 Djoka

Potrebno je napraviti VB kod koji će ipisati sva imena slično kao stablo u Exploreru. Dubina stabla je prozvoljna!

Pozdrav.
 
Odgovor na temu

Zoran.Eremija
Zoran Eremija
SYSTEM ANALYST
Freelancer
Beograd

Član broj: 251342
Poruke: 855
..106.109.adsl.dyn.beotel.net.

Sajt: zoraneremija.wix.com/erem..


+47 Profil

icon Re: Ispisivanje stabla (tree) / rekurzija12.02.2011. u 14:19 - pre 160 meseci
Ako sam dobro razumeo reci ispisivanje stabla onda imate ovde primer http://www.elitesecurity.org/t303936-1#2548275
 
Odgovor na temu

mpaja
Milorad Pavlovic
Loznica

Član broj: 85296
Poruke: 110
*.dynamic.sbb.rs.



Profil

icon Re: Ispisivanje stabla (tree) / rekurzija12.02.2011. u 14:46 - pre 160 meseci
Da, video sam to! To je tree view kontrola i to odlicno radi. Meni treba da se to ispise na papir (grubo receno) odnosno da se iz te tabele koja predstavlja onsovu za tree view kontrolu napravi report. Meni se cini da se to moze uraditi samo preko koda. Slazezem se sa onim sto kaze Zidar, to se ne uci ali znam da su neki matematicari razvijali f/ju gde se zada pocetni cvor i od tog cvora ona dalje krece u "obilazak stabla" i ispisivanje elemenata. Radi se o rekurziji!
 
Odgovor na temu

izonic
ishab zonic
Tuzla

Član broj: 38128
Poruke: 591
89.146.184.*

Sajt: www.icentar.ba


+2 Profil

icon Re: Ispisivanje stabla (tree) / rekurzija14.02.2011. u 09:23 - pre 160 meseci
Tebi u stvari treba da uvuces pasus za svaku podgrupu koja pripada nekoj grupi.
Jedino to ima smisla u izvjestaju. Neka manipulacija sa grupama kao sto ima tree kontrola znas da nije moguca jer to je samo izvjestaj.
zxz
 
Odgovor na temu

mpaja
Milorad Pavlovic
Loznica

Član broj: 85296
Poruke: 110
*.dynamic.sbb.rs.



Profil

icon Re: Ispisivanje stabla (tree) / rekurzija14.02.2011. u 13:31 - pre 160 meseci
Da, upravo to.

Ideja je da se napravi report iz access-a sa klasičnim zaglavljem i samo jednim unbound text poljem. Na on format bi se aktivirao VB kod koji bi popunio to polje tako da izgleda slicno kao expandirana tree view kontrola. Svaki red bi bio uvucen za n*space gde je n nivo-dubina. Na kraju svakog reda bi se dodavao LF za prelazak na novi red a samo formatiranje stranice bi odradio access.

To je ideja i jos se radi na njoj. Vise je matematicki problem obilaska grafa iz nekog pocetnog cvora, bar mi se tako cini.

Pozdrav svima
 
Odgovor na temu

mpaja
Milorad Pavlovic
Loznica

Član broj: 85296
Poruke: 110
*.dynamic.sbb.rs.



Profil

icon Re: Ispisivanje stabla (tree) / rekurzija14.02.2011. u 13:52 - pre 160 meseci
Da pojasnim još malo

Uzima se prvo koren stabla odnosno početni čvor i stavi u neki string sa LF. To bi u ovom slučaju bilo Id nekog od članova a dubina n=1. Zatim se za taj koren nalazi prvo dete - niži čvor i stavi u string (strng+LF+string+ls , stringovi se nastavljaju!), tada je dubina n=n+1. Proveri se da li taj niži čvor ima decu, ako ima n=n+1, ispisuje se i ponavlja postupak sve dok se ne nadje neki čvor koji nema dete. Ako nema čvor nema dece, tada se prelazi na prvi susedni - čvor brat i ceo postupak provere za decu čvora brata se ponavlja. Kada čvor nema više braće ili drugačije rečeno čvorova istog ranga, tada je n=n-1. Ako se dogodi da je n=1 to znači da smo obišli celo stablo i da je to kraj rada.

Naravno moguće da postoji više polaznih čvorova, donosno čvorova koji su istog ranga (u primeru su to čvorovi kojima je ParentId = 0, Root1 i Root2)



 
Odgovor na temu

Zidar
Canada

Moderator
Član broj: 15387
Poruke: 3085
*.100.46-69.q9.net.



+79 Profil

icon Re: Ispisivanje stabla (tree) / rekurzija14.02.2011. u 14:58 - pre 160 meseci

Dobro protumacen zahtev je pola resenja:
Citat:
Tebi u stvari treba da uvuces pasus za svaku podgrupu koja pripada nekoj grupi.


Evo druga polovina resenja:

Trebace ti pomocna lokalna tabela koja izgleda otprilike ovako: Drvo (Id, Roditelj, Nivo, Rb) Id je onaj ID iz tvoje tabele, nivo je nivo na kome se nalazi posmatrani ID i RB je redosled u kome zelis da vidis odrdjeni ID na izvestaju. Ond aprimenis algoritam koji si opisao-
1 krenes d korena (Root), Nivo = 0, Rb=1, 2)
2) za svako dete imaces novi red utabeli, Novo = Nivo + 1, Rb = kako vec ide
3) sada za svaki ID koji imas na nivou 1 (nivo 0 ne diras) ponovis korak 2
4) posmatras sledeci nivo (poslednji koji is uneo) i pobnavlajs korak 2
Postupak s eprekida kada nijedna cvor na poslednjem unetom nivo vise nema dece.

Onda za RowSource reporta uzmes tabelu drvo. Ako hoces da sve izgleda po nivoima, kad ispisujes svaki red iz tabele Drvo, dodas SPaces (Nivo*4) na pocatak teksta.

I to je to. Svaki put kad zapocnes ovaj postupak, svakako obrisis sve redove iz tabele Drvo, koji su mozda zaostali od prosli put.

Drugog nacina nema da se napsie kveri nad hijererhijskim podacima. Kazani algoriatm mozes da primenis kroz ADO, DAO ili pak da gradios INESR statement i sa db.EXECUTE da dodajes redove u tabelu, sta ti je najlakse. Sustina ostaje ista.

Nadam se da je pomoglo.

 
Odgovor na temu

mpaja
Milorad Pavlovic
Loznica

Član broj: 85296
Poruke: 110
*.dynamic.sbb.rs.



Profil

icon Re: Ispisivanje stabla (tree) / rekurzija14.02.2011. u 18:12 - pre 160 meseci
Hvala Zidar

to je moguće rešenje, doduše nije matematika ali je prilično elegantno. Pokušaću to da implementiram i da okačim primer, pošto vidim da je dosta interesantna tema i da to članovima treba samo da malo prezdravim.
 
Odgovor na temu

izonic
ishab zonic
Tuzla

Član broj: 38128
Poruke: 591
*.PPPoE-7036.sa.bih.net.ba.

Sajt: www.icentar.ba


+2 Profil

icon Re: Ispisivanje stabla (tree) / rekurzija15.02.2011. u 11:07 - pre 160 meseci
Izvjestaj tree
zxz
Prikačeni fajlovi
 
Odgovor na temu

Zidar
Canada

Moderator
Član broj: 15387
Poruke: 3085
*.100.46-69.q9.net.



+79 Profil

icon Re: Ispisivanje stabla (tree) / rekurzija15.02.2011. u 19:43 - pre 160 meseci
@Izonic: briljantno!

Trik je dakle u kveriju:
Code:
SELECT Tree.ID
FROM Tree
ORDER BY slaganje([ID]);
koji poziva funkciju Slaganje
Code:
Public Function Slaganje(ByVal ID As Variant) As String
'*******************************************
'Ime:      Slaganje   (Function)
'Sadržaj:
'Autor:     ZXZ
'Datum:      01 10, 2012, 11:12:22
'Adresa: Tuzla BiH
'Email:     [email protected]
'Ulazni parametri:
'Izlazni parametri:
'*******************************************
Dim Parentni As Variant
On Error GoTo Greska
Start:
Parentni = DLookup("Pripadnost", "Tree", "ID=" & ID)
If IsNull(Parentni) Then
        GoTo Kraj
    Else
        Slaganje = Str(Parentni) & "." & Str(ID) & "." & Slaganje
        ID = Parentni
        GoTo Start
    End If
Izlaz:
Exit Function
Greska:
'GreskaB (Err.Number)
Resume Izlaz
Kraj:
End Function


Funkcija se izvrsava sve dok ima sta da radi, za svaki ID, i radi onako stosmo rekli - ispise svu decu tog cvora. Posto se poziva iz kverija, izvrsi se za svaki cvor.

Kod vecih tabela, ovo moze biti sporo, ali st da se radi, kompjuter je tu da radi a mi da pijemo kafu dok se ne zavrsi.

 
Odgovor na temu

Zoran.Eremija
Zoran Eremija
SYSTEM ANALYST
Freelancer
Beograd

Član broj: 251342
Poruke: 855
..106.109.adsl.dyn.beotel.net.

Sajt: zoraneremija.wix.com/erem..


+47 Profil

icon Re: Ispisivanje stabla (tree) / rekurzija15.02.2011. u 20:20 - pre 160 meseci
Pridruzujem se komenatrima kolege @Zidar-a. Ideja je originalna i jednostavna...
 
Odgovor na temu

banem
Kikinda

Član broj: 16619
Poruke: 583
*.dynamic.sbb.rs.



+15 Profil

icon Re: Ispisivanje stabla (tree) / rekurzija15.02.2011. u 20:37 - pre 160 meseci
To iz budućnosti? Piše datum 1.10.2012. :)
Pozdrav,
Branislav
 
Odgovor na temu

mpaja
Milorad Pavlovic
Loznica

Član broj: 85296
Poruke: 110
*.dynamic.sbb.rs.



Profil

icon Re: Ispisivanje stabla (tree) / rekurzija16.02.2011. u 09:06 - pre 160 meseci
Sjajna ideja

Na vecim tabelama performanse nisu bas vrhunske ali radi. Mislim da se sama funkcija moze malo i optimizovati ali to je to.

Hvala svima
 
Odgovor na temu

[es] :: Access :: Ispisivanje stabla (tree) / rekurzija

[ Pregleda: 3955 | Odgovora: 12 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.