Jak vytvoříte textovou tabulku v Base a naplníte ji daty

base.png Vytvoření tiskopisů ve firmě s použitím databázových dat je pro někoho triviální záležitost, ale pro jiného je to složitá věc. Protože se pan Milan Uhrák nedávno touto problematikou zabýval, sepsal návod, jak na to šel on, a poslal nám ho do redakce. My ho rádi uveřejňujeme a touto cestou mu děkujeme.  

Nedávno jsem byl pověřen vytvořením tiskopisů pro naši vnitřní firemní potřebu. Jednalo se o podpisové archy s použitím databázových dat. První volba padla na generátor sestav, ale po několika hodinách zkoušení (pravda, pracoval jsem s tím snad podruhé v životě) jsem tuto cestu vzdal.

Mám již nějaké zkušenosti s programováním a mezi jinými i s databází Base z OpenOffice.org, takže jsem se rozhodl vyřešit úkol tímto způsobem. Nechci tvrdit, že je to jediný možný nebo nejefektivnější a nejsnadnější způsob, prostě jsem se touto cestou vydal a při jejím řešení jsem se toho zase hodně naučil. Své zkušenosti bych vám chtěl touto cestou předat, snad i vás něčím tento článek obohatí.

Ve výchozím stavu jsem měl datový zdroj ODBC, ale pro tento příklad je makro přepsané na „obyčejnou“ databázi a úkol: vyhotovit sestavu členů. Těch je opravdu hodně a jsou rozděleni do jakýchsi „obvodů“. Sestavy by měly být pro každý z nich zvlášť.

Prvním problémem bylo vyřešit, jak se k datovému zdroji připojit. Nejsem znalec všech těch „com.sun.star“, ale mám vyhledávač Google a skvělé publikace od Andrewa Pitonyaka, tak s chutí do toho!

Jak na sestavy a propojení dat

Nalezený stručný návod se proměnil v jednoduchou funkci

getDataFromSourceRS(cStrediska) as Variant

která vytvoří připojení a vrací rovnou výsledek „zadrátovaného“ dotazu (tady jiný dotaz nevolám, takže „když to funguje, nesahám na to“...)

Vedlejším produktem tohoto ulehčení ovšem bylo (alespoň myslím, že to bylo právě tímto), že „zadrátovaná“ proměnná pro spojení nejde po použití uvolnit. Zřejmě zabírá nějaký slot pro spojení s MySQL (v původním dokumentu; předkládaná varianta je už spojená s nativním Base) a po asi 15 použitích vedla k zablokování spojení a nutnosti ukončení OpenOffice.org a pak znovuotevření dokumentu se sestavou. Vy šikovnější si můžete tuto funkci rozdělit na jednotlivé fáze (tj. připojení + vytažení a následné předání dat) a trošku je parametrizovat, aby byly univerzálnější.

Dalším krokem bylo načítání záznamů a jejich umísťování v tabulce. Než data do textové tabulky umístíte, nějakou si musíte vytvořit a naformátovat. Ale také případně smazat původní z předchozího načítání. Na to máme deletetables() a CreateTable(odoc, nColumns). Později insertNewRow(aDataRow) a jako perlička je ukazatel ve statusbaru řízený skrze objekt oSBar.setValue(nRow).

V sestavě je také nastavováno záhlaví a jsou do něj umísťována – kromě běžného textu – pole „číslo strany“ a „počet stran“.

oHeader.setString("")
oHTextC = oHeader.createTextCursor()
fldPages = oDoc.createInstance("com.sun.star.text.TextField.PageCount")
fldPages.NumberingType = 4
fldCurPage = oDoc.createInstance("com.sun.star.text.TextField.PageNumber")
fldCurPage.NumberingType = 4
fldCurPage.SubType = com.sun.star.text.PageNumberType.CURRENT 
oHeader.insertString(oHtextC,  "Seznam členů střediska " & nStredisko & " " & sStredName & chr(9) & "strana ", False)
oHeader.insertTextContent(oHTextC, fldCurPage, False)
oHeader.insertString(oHtextC," / ", False)
oHeader.insertTextContent(oHTextC, fldPages, False)

Ostatní části kódu, myslím, nepotřebují komentář.

V příloze najdete jak samotný textový dokument, tak databázový soubor. Databáze byla vytvořena generátorem osob vlastní výroby, a jistě není dokonalá. I v předkládané sestavě není vše jako v původní, zcela chybí část adresy a podobně, ale je to jen příklad, který se dá doladit dle potřeb.

Aby byla ukázka funkční, musíte databázový soubor členové.odb zaregistrovat. Registraci provedete prostřednictvím Nástroje | Volby | OpenOffice.org Base | Databáze – vyberete volbu nová a zvolíte soubor k registraci.

Stáhněte si ukázkový soubor Členové:

stahnout.png 

Stáhněte si ukázkový soubor Sestava studie:

stahnout.png 

(Jako ve škole) Průměr: 1.50 | Hodnotilo: 8
 

Komentáře

user avatar Milan Uhrák
Odpovědět
Jak vytvoříte textovou tabulku v Base a naplníte ji daty
18. 12. 2012, 13:30:30
No nikdo tady nic nenapsal :(, opravdu jsem čekal, co na to řeknete, ale zase - článek řeší problém, který trápí snad jen pár lidí, a ti ho vyřeší jinak :D

Jen pro upřesnění - v názvu článku mělo původně být :

Vytvoření tabulkové sestavy z dat uložených v databázi pomocí makra nebo tak nějak .. název článku je teď poněkud matoucí
user avatar zvedavec
Odpovědět
Jak vytvoříte textovou tabulku v Base a naplníte ji daty
18. 12. 2012, 19:19:10
Tak z toho mala uzivatelu OO je logicke, ze jeste mene pouziva Base, takze az tolik lidi to zrejme netrapi :-).

Stran vyse uvedeneho navodu myslim, ze pro bezneho uzivaele ani neni zrejme, na co vlastne to navod je, protoze s matoucim nadpisem mate pravdu.
Sam jsem se na tento clanek dival, ze se poucim, jak vytvorit tabulku v Base a nasel jsem akorat jakysi kod, ktery nedava bez nahledu tabulky v clanku zadny smysl.

Ma-li to byt opravdu navod, melo by byt jeho soucasti vice "obrazoveho" materialu, aby bylo jasnejsi, co je vzorova tabulka, jak vypada, kde se generuje sestava, jak vypada atd.

Odpovědět

 

Nejsou podporovány žádné značky, komentáře jsou jen čistě textové. Více o diskuzích najdete v nápovědě. Diskuzi můžete sledovat pomocí RSS kanálu.

 
 
 
woo jaw demo hz