Fastruktúra

Fastruktúra
2009-08-04T14:38:54+02:00
2009-08-13T07:43:37+02:00
2022-11-14T15:45:33+01:00
bognor85
Sziasztok,

abban kérném a segítségeteket, hogy egy adatbázistáblában (Firebird, de ez mellékes) tárolom a következő adatokat: ID, Leiras, Osszeg, Osszegzo, Szulo. Az Osszegzo mező egy logikai, hogy az adot rekord az alá tartozók összegét tartalmazzák.
A Szulo az ID-vel van összekapcsolva, a fa struktúra megjelenítése végett.
A probléma 2 dolog lenne:
- Delphiben meg kellene fastruktúraként jeleníteni az ID, leiras és összeg mezőkkel, hogy melyik alá mi tartozik (a windowsban ismert módon a kis + és - jelekkel kibontani ill. összecsúkni)
- ahol Osszegzo = 'T', ott az alá tartozó rekordok összegét kell beírni.

Ha van rá vmi komponens, ingyenes vagy nem túl drága (max. 10-15 HUF) annak is nagyon örülnék, mert sürgősen meg kell oldanom a problémát.

Segítségeteket előre is köszönöm!

Üdv. N
Mutasd a teljes hozzászólást!
Na,
közben megoldottam a problémát.

SQL szerver tárolt eljárással írtam meg, és ezt hívom meg a kliens programból.
A lényeg, olyan eljárást írtam, amely az éppen módosított rekord szülő ID szerint számolt átlagot (summa/db). És ezt az értéket beírta a szülő rekordba. Utána a szülő szülőjét kérdezem le és az eljárás hasonló, egészen addig megy rekurzívan, amíg talál szülőt.
Nagyon jó lett, és gyors...

Mindenkinek azért köszönöm a hozzászólásokat és a segítséget!

Üdv, N
Mutasd a teljes hozzászólást!

  • Hello,

    Szerintem túl spéci a feladat ahhoz, hogy meglévő komponens lenne rá.

    Mi van ha pl. egy rekordban az Osszegzo mező True úgy hogy a fakstruktúrában alatta is van (egy vagy több) olyan rekord ahol az Osszegzo mező True értéket tartalmaz?
    Mutasd a teljes hozzászólást!
  • Hát erre való a treeview, a neten találsz agy kazal ingyened DBTreeView komponenst is. Csak beállítod az ID és a parent mezőket, és fában jeleníti meg. A node-ok caption cseréje az "összegzö" mezőidnél nem lehet túl nagy probléma.
    (egy jól eltlált SQL-el eleve az kerül a megjelenítendő mezőbe)
    Mutasd a teljes hozzászólást!
  • dm = data module //vagy a form amire a táblákat raktad
    tv = treeview

    tv.Items.Clear; for i:=0 to dm.componentcount-1 do if (dm.Components[I] is tadotable) then //and ((dm.Components[I] as tcomponent).Name <> 'Tablad_neve') begin item := tv.Items.add(nil, dm.Components[I].name); //item.ImageIndex := 2; for j:=0 to (dm.Components[I] as tadotable).Fields.Count-1 do begin tv.Items.AddChild(item, dm.Components[I] as tadotable).Fields[j].FieldName); //tv.Items[tv.Items.Count-1].ImageIndex := 1; end; end;

    a tadotablet, kicserélheted queryre is.
    az összesítést meg tudod oldani az AddChild utasításnál...
    Mutasd a teljes hozzászólást!
  • Hello Javacoder,

    ahogy mondod, ez is előfordulhat, sőt biztosan elő fog fordulni, hogy lesz olyan rekord, ahol Osszegzo mező True és mondjuk tartozik alá még két mező ami True és mondjuk a legutolsó true alá pedig false akkor felfelé kell összegezni.
    Pl.: Rem. a példa szemléltető lesz!

    Leiras Osszegzo Osszeg
    T 'T' 4
    |-A 'T' 4
    |||-B 'T' 2
    |||||-C 'F' 1
    |||||-D 'F' 1
    |||
    |||-E 'T' 2
    |||||-F 'F' 1
    |||||-G 'F' 1

    Valami ilyenre gondolok. A 'T' és 'F' értékek helyes megadásáról a program gondoskodik, olyan nem fordul elő, hogy mindenhol 'T' van vagy 'F'.
    Ami a szépsége, hogy előszőr magát a struktúrát rögzíti a felhasználó, elmenti, és utána tölti fel összegekkel, és aogy tölti fel összegekkel, futásidőben kell az összegzést elvégezni a 'T' mezőkre.

    A TreeView-ban sztem nem lehet több oszlopot egymás mellett megjeleníteni, tehát úgy, hogy nem fűzőm össze az oszlopokat!

    Köszi, várom a válaszokat és az esetleges megoldásokat!

    Üdv.: N
    Mutasd a teljes hozzászólást!
  • Hali!

    Bár nem teljesen az amire te gondolsz, de talán meg tudod oldani vele:dropdownpanel.
    Mutasd a teljes hozzászólást!
  • Hali JJózsi,

    nem nem igazán evvel nem oldható meg a dolog. Adatbázisban gondolkodj, több száz rekord is lehet.

    Üdv.
    Mutasd a teljes hozzászólást!
  • Na,
    közben megoldottam a problémát.

    SQL szerver tárolt eljárással írtam meg, és ezt hívom meg a kliens programból.
    A lényeg, olyan eljárást írtam, amely az éppen módosított rekord szülő ID szerint számolt átlagot (summa/db). És ezt az értéket beírta a szülő rekordba. Utána a szülő szülőjét kérdezem le és az eljárás hasonló, egészen addig megy rekurzívan, amíg talál szülőt.
    Nagyon jó lett, és gyors...

    Mindenkinek azért köszönöm a hozzászólásokat és a segítséget!

    Üdv, N
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd