Dne 3.2.2011 19:17, Zbyněk Burget napsal(a):
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á.
OK. Máte dvě možnosti - ruční a automatickou.
Ruční: Když ve fomuláři skočíte do pole s ovládacím prvkem (např.
rozbalovací seznam), rozsvítí se v navigační liště tlačítko "Obnovit
ovládací prvky". Jeho stisknutím se aktualizuje dotaz vybírající seznam
pro dané pole a je možné přidávat i z čerstvě přidaného záznamu.
Automatická: Nastavte úroveň zabezpečení maker na něco nižšího než
"vysoká". Vytvořte si ve svém databázovém souboru nový modul s
libovolným jménem a vložte do něj toto makro:
sub obnovit
dim document as object
dim dispatcher as object
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dispatcher.executeDispatch(document, ".uno:RefreshFormControl", "",
0, Array())
end sub
V návrhovém režimu formuláře vyberte sloupec, pro kterého se obnovení
seznamu týká a v seznamu událostí navažte toto makro na událost "Při
zaměření".
POZOR: Ruční i automatická metoda má háček. Obnovení seznamu v poli
ukládá aktuální řádek do databáze. To znamená, že pole primárního indexu
(a případně všech unikátních indexů) musí být vyplněna dříve, než
skočíte do inkriminovaného pole. U ostatních polí s povinně vyplněnou
hodnotou je pak vhodné definovat výchozí hodnotu. Jinak skok do
výběrového pole skončí chybou, která se navíc nedá snadno "odstřelit",
protože se formulář zacyklí. Pak zbývá jedině v makru nastavit přerušení
a když se makro na přerušení zastaví, tak stornovat jeho běh.
Nic lepšího se mi vymyslet nepodařilo.
J. S.
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]