Dne 31.1.2011 22:57, Jiri Spitz napsal(a):
Z Vašeho popisu mi není schéma databáze úplně jasné, ale mám pocit, že s
návrhem databáze není všechno úplně v pořádku.

Dobrý podvečer,
zkusím to upřesnit (asi to zjednodušení, které jsem tam zanesl bylo už přehnané). Je tam ještě trochu komplikace, o které jsem nepsal, ale teď ji sem vrznu. Databáze běží na postgresu, proto při popisu použiju "terminologii" postgresu. (pozn.: celá databázová aplikace by měla být napsána v php, nemůžu k tomu ale žádného známého programátora dokopat, proto si potřebuju alespoň rovizorně dočasně pomoct jinak - proto OOo Base)

Popis problému:
V několika technologických místech mám nějaká zařízení, na kterých běží určité služby. Trošku komplikace je u zařízení, kde může být zařízení poskládáno z více částí a já potřebuju podchytit hierarchii, co je do čeho vloženo.

Mám proto vytvořeny tři tabulky: misto, zarizeni, sluzba
hierarchii zařízení vložených do sebe jsem se rozhodl vyřešit v rámci tabulky "zarizeni" tak, že budu zařízení odkazovat nejen do tabulky "misto", ale v případě zařízení "podřazeného" i odkazem na "nadřazené" zařízení v téže tabulce.

tabulka misto:
mid: serial (primární klíč)
adresa, ... další pole

tabulka zarizeni:
zid: serial (primární klíč)
mid: integer (vazba na tab. misto)
zarizeniid: integer (vazba na "nadřazené" zařízení)
nazev, typ, sn ... dalsi pole

tabulka sluzba:
sid: serial (primarni klic)
zid: integer (vazba na tab. zarizeni)

na jednom listu v Base potřebuji vidět tabulku technologických míst a v podformuláři tabulku zařízení na technologickém místě. Tohle je bez problému. První průšvih nastává při vytvážení vazeb nadřízených a podřízených zařízení. V tabulce "zarizeni" používám pro sloupeček "zarizeniid" ovl. prvek seznam. Obsah seznamu získávám pomocí SQL[nativní]:
select nazev,zid from zarizeni union select '<žádný>',null;
Problém je, že při zápisu nového zařízení do tabulky se tento dotaz nepřepočítá a já na toto nově vložené zařízení nemůžu navázat zařízení jiné. Musím formulář zavřít a znovu otevřít. Přitom se znovu provede select a vytvoří se položky seznamu. Takže první část mého dotazu je, jak donutit seznam, aby znovu spustil SQL[native] dotaz a přepočítal položky (asi zase není tak native, jak by se dalo čekat).

Na stejném listu bych pak rád viděl tabulku služeb. Ale ne tak, aby se mi ukázaly pouze služby navázané na jedno zařízení (to by byl podformulář tabulky zařízení), ale tak, aby se ukázaly všechny služby na technologickém místě. Nemůžu služby zobrazit jako podformulář tebulky "mista", protože v hierarchi je mezi nimi ještě tabulka "zarizeni". Chtěl jsem to řešit filtrem formuláře, ale nevím, jak do filtru dostat seznam "zid", abych vyfiltroval příslušné služby.

Nicméně pro dynamický výběr dat můžete použít parametrický dotaz. Příklad:
...
parametrický dotaz použijete v podřízeném formuláři můžete parametr kraj
vázat na pole kraj z nadřízené tabulky. Při změně změně záznamu v hlavní
tabulce se dotaz přepočítá a v podřízeném formuláři se zobrazí správná
data. Dotaz pochopitelně může mít více parametrů.

Parametrický dotaz je jasná cesta, jen jsem nikde nenašel, jak mám zapsat vazbu parametru na aktuální záznam v jiné tabulce. V mém případě bych tam zřejmě potřeboval dostat obsah ovládacího prvku z formuláře. Netuším jak se na něj odkázat (nebo se to dá udělt jinak a já nevím jak).


Nakolik jsem pochytil schopnosti OOo Base, jsou editovatelné pouze
výběrové dotazy založené na jedné tabulce. Vaše podřízená tabulka C tedy
asi editovatelná nebude, protože dotaz bude zřejmě zahrnovat více tabulek.

Pochopil jsem správně, že můžu formulář založit na dotazu a bude editovatelný? To by problém řešilo - protože výsledná pole dotazu budou z jedné tabulky, pouze ve WHERE klauzuli bude select z více tabulek. Tady ale bude zase potřeba použít parametrický dotaz, takže platí moje neznalost propojení parametru na záznam / ovládací prvek popsaná výše.

Díky za jakoukoli radu, která povede k funkčnímu výsledku.

--
Zbyněk Burget
Nádražní 224
798 26 Nezamyslice

tel: 588 580 000, 739 930 931
IČ:  606 88 220
DIČ: CZ7210184674

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Odpovedet emailem