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

Delphi DB tree problem

[es] :: Pascal / Delphi / Kylix :: Delphi DB tree problem

[ Pregleda: 2059 | Odgovora: 8 ]

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

ventura
Danko Vuković
Beograd

Član broj: 32
Poruke: 4368
*.verat.net

ICQ: 10624010
Sajt: www.elbet.co.yu


Profil

icon Delphi DB tree problem09.02.2002. u 22:49

Problem u Delphiju:

Imam tabelu u bazi koja igleda odprilike recimo ovako:

Proizvodjac...Proizvod......Boja..........Kolicina
Levis.............501..............Crvena.....xxxxxx
Levis.............501..............Crna........xxxxxxx
Levis.............501..............Plava.......xxxxxxx
Levis.............501..............Zelena....xxxxxx
Dizel..............Majica..........Zuta........xxxxx
Dizel..............kosulja.........Crna.......xxxxxxxx

Kako od ovakve tabele napraviti nesto poput tree-ja da bude u fazonu:

Levis
.|...|__501
.|...........|___Crvena(100)
.|...........|___Crna(0)
.|...........|___Plava(12)
.|...........|___Zelena(34)
.Dizel
....|____Majica
....|.............|____Zuta(3)
....|____Kosulja
..................|____Crna(55)


I da se naravno ovaj tree automatski generise prema bazi... A baza se kreira perma list boxovima tako da su pocetni proizvodjaci definisani.


09.02.2002. u 22:49 

overflow
Goran Milosavljević
Beograd

Član broj: 396
Poruke: 345
*.verat.net

ICQ: 106825659
Sajt: www.paradise.co.yu


Profil

icon Re: Delphi DB tree problem10.02.2002. u 09:17
Evo ti kako to moze manuelno da se uradi.
Mozes da kreiras prvo strukturu baze pomocu dinamicke liste.

Napravi glavnu listu koja ce kao elemente imati slog sa poljima:

prec = ^TRec;
TRec = record
Marka:String;
Model:String;
Boja:PBoja;
sled:prec;
end;

i ogranak svakog elementa te liste:

PBoja = ^TBoja;
TBoja = record
BojaIKol : String;
sled : pb;
end;

Prodji kroz bazu i radi sledece: ubacuj u glavnu listu marku i model samo ako vec nije u glavnoj listi a Boja ostavi na NIL.
Kada napunis glavnu listu svim markama i modelima prodji kroz nju od pocetka samo sada u bazi trazi boju i kolicinu koja odgovara toj marci i modelu ubacujuci u pomocnu listu tu boju i kolicinu i povezivajuci sada tu novoformiranu (malu) listu boja i kolicina sa glavnom listom preko Boja:PBoja.

Evo kako bi to izgledalo u memoriji racunara:

Levis 501 -------sled:prec---- Diesel Kosulja ------------------
|................................................. |
| Boja:Pboja .............................. | Boja:Pboja
| .................................................|
bela(100) ............................... plava(100)
| sled:pb ...................................| sled:pb
crvena(100).............................zuta(11)
| sled:pb
zuta(10)

Mislim da je koncept jasan ...

Posle samo prodjes kroz kompleks lista i formiras Tree u programu.
Sve sto je besmislenije, utoliko je bolje.
prof Jaukovic [FON] : "Kolega, jeste l' nesto rekli ili samo pricate ?"
10.02.2002. u 09:17 

Riste Pejov
Team Leader/Senior Software Developer @ Ein-Sof ltd S..
Skopje, Macedonia

Član broj: 128
Poruke: 571
62.220.202.*

Jabber: richie@bagra.net.mk
ICQ: 154236769
Sajt: riste.softver.org.mk


Profil

icon Re: Delphi DB tree problem10.02.2002. u 15:03
ja mislim da ti prvo ne valja tip tabele,
uradi dve tabele koje ce biti vezane uz pomoc jednog Key fielda
jednu za firme, (levis, diesel, itn) i drugu za proizvode
primer:
[code]

tabela firme:
------------------------------
firma_ID ime
------------------------------
1 Levis
2 Diesel
3 Adidas
4 Reebok
............
----------------------------

tabela proizvodi
-------------------------------------
firma_ID opis kolicina
-------------------------------------
1 501 10
1 maica 2
2 kosulja 2
.............................................
-------------------------------------

onda uz dva selecta dobijes Tree

uz prvi: SELECT * FROM firma
dobijes root node-ove za tree

a onda za svaki node uradis jos po jedan select: SELECT * FROM PROIZVODI WHERE firma_ID=1
i dobijes child nodove za svaku firmu

pozdrav

People who think they know everything tend to irritate those of us who do.
10.02.2002. u 15:03 

overflow
Goran Milosavljević
Beograd

Član broj: 396
Poruke: 345
*.rcub.bg.ac.yu

ICQ: 106825659
Sajt: www.paradise.co.yu


Profil

icon Re: Delphi DB tree problem10.02.2002. u 16:50
Da, Pejov je upravu, ali ... ako vec imamo strukturu tabele koju ti imas morali bi smo da uradimo ono sto sam naveo.
A da ne pricam gluposti, ili da nije tacno kako mi Ventura rece da moj kod "ne pije vodu" evo screen shot-a programa kao i sam program uradjen po onom konceptu.


Sve sto je besmislenije, utoliko je bolje.
prof Jaukovic [FON] : "Kolega, jeste l' nesto rekli ili samo pricate ?"
10.02.2002. u 16:50 

Riste Pejov
Team Leader/Senior Software Developer @ Ein-Sof ltd S..
Skopje, Macedonia

Član broj: 128
Poruke: 571
*.mol.com.mk

Jabber: richie@bagra.net.mk
ICQ: 154236769
Sajt: riste.softver.org.mk


Profil

icon Re: Delphi DB tree problem11.02.2002. u 13:27
Ali ja ipak ne bih rasipao procesorsko vreme
i memoriju na linkovane liste,
moze se to isto sto sam rekao simulirati i sa vec postojece tabele
primer:
Code:

//Query1 - Select za root node-ove 
SELECT DISTINCT proizvodjac FROM tabela;
//Query2 - onda ponovis Query za svakog proizvodjaca (Select za subnodove )
SELECT DISTINCT proizvod FROM tabela WHERE proizvodjac=Query1.fieldbyname('proizvodjac').asString
//Query3 - Query za svakog proizvoda (subnodove za proizvod)
SELECT DISTINCT boja,kolicina FROM tabela WHERE proizvodjac=Query1.fieldbyname('proizvodjac').asString
AND proizvod=Query2.fieldbyname('proizvod').asString


evo jos jedno resenje problema
People who think they know everything tend to irritate those of us who do.
11.02.2002. u 13:27 

overflow
Goran Milosavljević
Beograd

Član broj: 396
Poruke: 345
*.verat.net

ICQ: 106825659
Sajt: www.paradise.co.yu


Profil

icon Re: Delphi DB tree problem13.02.2002. u 13:59
Jos jedna vazna napomena - resenje koje si ti predstavio prolazi BAR 3 (tri) puta kroz kompletnu tabelu, dok moje savrseno resenje samo 1 (jedan) put ubrzavajuci znatno ceo postupak. :P

Sve sto je besmislenije, utoliko je bolje.
prof Jaukovic [FON] : "Kolega, jeste l' nesto rekli ili samo pricate ?"
13.02.2002. u 13:59 

Riste Pejov
Team Leader/Senior Software Developer @ Ein-Sof ltd S..
Skopje, Macedonia

Član broj: 128
Poruke: 571
212.110.78.*

Jabber: richie@bagra.net.mk
ICQ: 154236769
Sajt: riste.softver.org.mk


Profil

icon Re: Delphi DB tree problem13.02.2002. u 21:44
Epa sad vidi ovako,
tvoje resenje je brze, ali u slucaju kad tabela ima do 100 rekorda
ali kad bi tabela imala 4000+ rekorda, onda garantiram da ce moje
resenje brze proci
People who think they know everything tend to irritate those of us who do.
13.02.2002. u 21:44 

overflow
Goran Milosavljević
Beograd

Član broj: 396
Poruke: 345
*.rcub.bg.ac.yu

ICQ: 106825659
Sajt: www.paradise.co.yu


Profil

icon Re: Delphi DB tree problem13.02.2002. u 23:15
Citat:
Riste Pejov:
Epa sad vidi ovako,
tvoje resenje je brze, ali u slucaju kad tabela ima do 100 rekorda
ali kad bi tabela imala 4000+ rekorda, onda garantiram da ce moje
resenje brze proci :D


'ajde u sta da nece? ;)
Sve sto je besmislenije, utoliko je bolje.
prof Jaukovic [FON] : "Kolega, jeste l' nesto rekli ili samo pricate ?"
13.02.2002. u 23:15 

Riste Pejov
Team Leader/Senior Software Developer @ Ein-Sof ltd S..
Skopje, Macedonia

Član broj: 128
Poruke: 571
212.110.78.*

Jabber: richie@bagra.net.mk
ICQ: 154236769
Sajt: riste.softver.org.mk


Profil

icon Re: Delphi DB tree problem14.02.2002. u 14:16
Vidi sad ovako, ako prva dva polja su indexirana,
onda prve dve Query prolaze kroz bazu samo onoliko puta koliko
koliko ima razlicnih firma i modela, a treca isto tako prolazi samo za one modele i firme koje vec postoje , tako da sigurno da moj pristup nece ucitati celu bazu u nikom slucaju, a tvoj ce imati sa garancijom

(RowCount-Broj_razlicitih_firma)*Velicina_Firma_Field +
(RowCount-Broj_razlicitih_modela)*Velicina_model_Field
vise IO sa diska.

Kad bi u igri bila tabela sa 4000+ rekorda onda vise taj IO nije zanemarljv i producira vise vremena za presmetku.

Analiziraj bolje dva algoritma i videces da sam u pravu
People who think they know everything tend to irritate those of us who do.
14.02.2002. u 14:16 

[es] :: Pascal / Delphi / Kylix :: Delphi DB tree problem

[ Pregleda: 2059 | Odgovora: 8 ]

Postavi temu Odgovori

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