Dne 3.2.2011 22:13, Jiri Spitz napsal(a):
Dne 3.2.2011 19:17, Zbyněk Burget napsal(a):
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.
Tak o tomhle jsem tedy nevěděl :-( užitečná funkce zůstala přehlédnuta...
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
Jj, to je už skoro úplně to, co jsem hledal. Experimentoval jsem s kde
čím, ale funkci RefreshFormControl jsem neobjevil. Existuje někde
rozumný popis toho UNO nebo API nebo jak to správně nazvat? Neskutečně v
tom bloudím. Kdysi, za dob accessu jsem byl schopný napsat ve VBA skoro
cokoli. Popis API byl přímo v accessu, při psaní se metody a propertiies
nabízely samy. V OOo je to alespoň pro mne absolutní chaos.
Na něco se dá odkazovat přímo např. přes
ThisComponent.CurrentController.XXX.YYY.ZZZ na něco přes
"DispatchHelper"... Nečekám, že bude dokumentace v češtině, ale já ji
nenašel ani v angličtině. Google mi najde vždycky akorát nějaké diskuze
na fórech, kde se řeší nějaký konkrétní problém. Neznám strukturu
objektů a tak mi možná i celá logika programového přístupu k API připadá
chaotická.
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í".
tady jsem to udělal trošičku jinam - navázal jsem na událost formuláře
"Po změně záznamu" - netrpí to tak problémem s uložením záznamu. Tady už
bych k tomu měl jen vyloženě kosmetické připomínky. Položky v seznam
ovládacího prvku přepočítají. To funguje bezvadně při přidávání nového
záznamu - okamžitě se v seznamu objeví a můžu jej použít. Pokud záznam
nepřidávám, ale měním, položky v seznamu se sice přepočítají, ale v
řádích, kde už byly použité se nezmění. Musím na seznam kliknout a
hodnota se okamžitě změní na novou. Tohle bych ale možná už považoval za
chybu Base. Zabere ruční refresh formuláře, nicméně - tohle nepotřebuju
řešit - je to kosmetická chyba a při reálné práci se na ni snad ani
nenarazí. Možná by se to ale mohlo někam nahlásit, aby se na to někdo z
programátorů kouknul, pokud bude mít náladu.
Díky za všechny přínosné rady. Base má sice ještě hodně nedostatků
(občas záhadně padá), ale řekl bych, že začíná být reálně použitelný.
Teď jsem po něm chtěl i celkem nestandardní věci a zvládl to.
--
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]