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]

Odpovedet emailem