Tak, částečný a celkem podstatný úspěch se dostavil - viz níže
Dne 1.2.2011 21:17, Jiri Spitz napsal(a):
Dne 1.2.2011 18:45, Zbyněk Burget napsal(a):
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).
Vyrobte si formulář založený na tabulce "zarizeni" s podřízeným
formulářem založeným opět na tabulce "zarizeni". Svažte pole "zid" z
nadřízeného formuláře s polem "zarizeniid" z podřízeného formuláře. V
podformuláři se pak objeví vždy seznam všech zařízení majících za
"rodiče" právě vybrané zařízení v hlavním formuláři. Nová zařízení lze
pochopitelně dopisovat.
Váš formulář s rozbalovacím polem pak využijete v případě, že budete
potřebovat změnit rodiče již existujícího zařízení. (Jinak byste ho
musel pod původním rodičem vymazat a znovu vytvořit pod novým rodičem.)
Tohle je něco trochu jiného, než potřebuju. Nevadí mi, když jsou všechna
zařízení v jedné tabulce, součástí tabulky je sloupeček, kde vidím vazbu
na "rodiče". Mohlo by se zdát, že je to nepřehledné, ale pro daný účel
to ideálně vyhovuje. Na základě níže zmíněného parametrického dotazu by
bylo hezké, kdyby takový parametrický dotaz šel použít na získání
položek ovládacího prvku seznam v tabulce zařízení.
Minimálně bych ale potřeboval donutit stroj, aby mi položky v seznamu
přepočítal po vložení nebo updatu záznamu v tabulce. Je pravděpodobné,
že to bude muset být vyřešeno pomocí nějakého makra navázaného na
událost. S programováním v OOo ale žádné extra zkušenosti nemám a
dokumentace je pro mne velice mírně řečeno absolutně nepřehledná.
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).
V režimu návrhu prostě do formuláře založeného na parametrickém dotazu
do chlívečku pro vazební pole napíšete název parametru (to za dvojtečkou
v SQL příkazu) místo názvu pole, toť vše. Zkoušel jsem to (i na
PostgreSQL) a funguje to.
Tak tohle zafungovalo naprosto úžasně, chová se to přesně tak, jak jsem
potřeboval.
DÍKY
Mimochodem, bylo by nanejvýš žádoucí definovat mezi tabulkami referenční
integrity (cizí klíče). Ty Vám nedovolí do podřízených tabulek vložit
nic, co nemá definované identifikátory v nadřízených tabulkách. Zároveň
je možno definovat kaskádování pro mazání a změny klíčových hodnot,
pokud chcete, aby se smazání řádku nebo změna klíče přenesla z nadřízené
tabulky i do podřízených tabulek. Pokud kaskádování nepovolíte, nebude
možné v nadřízených tabulkách mazat řádky a měnit klíče, pokud budou
existovat nějaké podřízené záznamy. Záleží na tom, co preferujete.
Celá databáze má samozřejmě nastavené všechny možné klíče a spoustu
constraints, které hlídají integritu dat. Sem je pro zjednodušení neuvádím.
A na závěr, pokud pracujete s PostgreSQL, tak si *neinstalujte* OOo 3.3.
Učinil jsem tak a všechny tabulky mám rázem read-only, protože OOo
nevidí jejich primární indexy. Protože se mi to stalo na více
počítačích, tak to není náhoda. (A musel jsem upgradovat na novou verzi
SDBC, která se tam v někdy posledních dnech musela objevit).
Díky, za varování, snad to někdo brzy odladí.
--
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]