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

Delphi DB tree problem

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

[ Pregleda: 4956 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

ventura

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



+6455 Profil

icon Delphi DB tree problem09.02.2002. u 22:49 - pre 222 meseci
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.


 
Odgovor na temu

overflow
Goran Milosavljević
Integration & Internet Senior
Engineer @ Telenor
Beograd

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

ICQ: 106825659
Sajt: localhost


Profil

icon Re: Delphi DB tree problem10.02.2002. u 09:17 - pre 222 meseci
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.
 
Odgovor na temu

Riste Pejov
Team Leader/Senior Software Developer @
Ein-Sof ltd Skopje
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 - pre 222 meseci
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.
 
Odgovor na temu

overflow
Goran Milosavljević
Integration & Internet Senior
Engineer @ Telenor
Beograd

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

ICQ: 106825659
Sajt: localhost


Profil

icon Re: Delphi DB tree problem10.02.2002. u 16:50 - pre 222 meseci
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.
 
Odgovor na temu

Riste Pejov
Team Leader/Senior Software Developer @
Ein-Sof ltd Skopje
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 - pre 222 meseci
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.
 
Odgovor na temu

overflow
Goran Milosavljević
Integration & Internet Senior
Engineer @ Telenor
Beograd

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

ICQ: 106825659
Sajt: localhost


Profil

icon Re: Delphi DB tree problem13.02.2002. u 13:59 - pre 222 meseci
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.
 
Odgovor na temu

Riste Pejov
Team Leader/Senior Software Developer @
Ein-Sof ltd Skopje
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 - pre 222 meseci
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.
 
Odgovor na temu

overflow
Goran Milosavljević
Integration & Internet Senior
Engineer @ Telenor
Beograd

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

ICQ: 106825659
Sajt: localhost


Profil

icon Re: Delphi DB tree problem13.02.2002. u 23:15 - pre 222 meseci
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.
 
Odgovor na temu

Riste Pejov
Team Leader/Senior Software Developer @
Ein-Sof ltd Skopje
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 - pre 222 meseci
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.
 
Odgovor na temu

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

[ Pregleda: 4956 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

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