Fórum pro uživatele kancelářského balíku OpenOffice | LibreOffice
 

#1 Re: Base » Otevření hypertextového odkazu » 9. 4. 2013 09:35:57

Bohužel neumím toto makro definovat. Já tím myslel, aby když kliknu na tlačítko, které budu mít ve formuláři, aby se mi spustilo makro, kde bude, jak píšete, hodnota www stránky předdefinovaná a k ní by se měla ještě vzít hodnota z pole IDzásilky z formuláře.
Toto jsem dříve řešil pod MS Office a tam to bylo celkově úplně jiné než zde a nemám zdání, jak to tady nějak napasovat, aby se provedla operace, kterou požaduji :-( Každá pomoc dobrá, jestli budete vědět.
Díky předem

#2 Re: Base » Otevření hypertextového odkazu » 25. 3. 2013 09:30:34

Zdravím Vás.
Netuším, zda si ani vy nevíte rady s tímto pro mne velkým problémem nebo jsem se špatně vyjádřil, tak se pokusím ještě jednou to nějak popsat. Potřeboval bych ve formuláři, kde budu mít X textových polí a z toho jedno textové pole (nazveme jej třeba IDzásilky) a jedno tlačítko, na které když kliknu tak se mi otevře předem definovaná stránka (vypsaná v makru) + nakonec této stránky se připíše ještě hodnota z pole, takže to bude třeba: "xxxxxzasilka.cz/sleduj=" (předem definovaná hodnota) & "IDzásilky" (hodnota z textového pole IDzásilky).
Napíše se to takto snadno, ale hůř naprogramuje, takže proto bych rád, jestli víte, jak toto vyřešit.
Děkuji Vám předem.

#3 Base » Otevření hypertextového odkazu » 22. 3. 2013 13:40:26

Billlly_Samotar
Odpovědí: 3

Zdravím Vás.

Měl bych jednu prosbu a to, zda je možné a ideálně jak je možné nastavit, abych měl v Base OpenOffice ve formuláři v dané kolonce textu (textové pole) napsanou nějakou hodnotu (nějakou www adresu) a když kliknu na tlačítko, které budu mít vedle této hodnoty, tak aby se mi otevřel prohlížeč a tam adresa, která je zadaná v tom mém poli. Potřebuji to použít pro otevření vždy stejné www adresy a na konci této adresy aby mi to vložilo hodnotu z mého pole a tím se přesně definovala stránka k otevření.
Věřím, že to pro Vás nebude těžké a budete mi moct s tímto poradit.

Velmi Vám předem děkuji
Pavel S.

#4 Re: Base » Pole zobrazující jen hodnoty příslušné nadřazenému poli » 2. 3. 2012 08:19:22

Nejde přesně o znovu-ukládání stejných dat v nové tabulce. Pokusím se to ještě jednou nějak namodelovat:
1) mám tabulku firmy (IDFirmy, název firmy, adresa, telefonní spojení a jiné kontaktní údaje aj.)
2) mám tabulku kontakty (IDOsoby totožné jako IDFirmy a navíc pořadové číslo aby mohlo být více osob, příjmení, jméno aj.)
3) tabulka zásilky - na tuto tabulku je udělán formulář, který by měl mít pole jako IDZasilky, DatumOdeslani, Predmet aj. a mimo to aby se vždy uložilo na jakou firmu se to odesílá + na jakou osobu je to odesláno. Takže dvě rozeviratelné nabídky. V první si zadavatel vybere firmu kam zásilku odeslat a jakmile si ji vybere tak v druhém rozeviratelném okně mu to nabídlo jen osoby, které mají na začátku totožné ID jako vybraná firma. Do tabulky Zasilky aby se neukladaly nazvy té firmy a její údaje, stejně jako jméno, příjmení kontaktu, ale vždy jen IDFirmy a IDOsoby. Dle dotazu poté uvidím, jak se to propárovalo a mimo IDček uvidím i údaje o firmě a o osobě.
.
Pevně věřím, že jsem to snad nyní napsal už trošku polopaticky.
.
PS: Aby se právě do tabulky Zasilky neukladaly udaje o firmach a osobach chtel bych aby se ve formulari tyto udaje ukazali, ale do tabulky se ulozily IDcka. Jinak receno abych v rozeviratelnem poli vybral dle nazvu firmy a do tabulky se mi ulozilo jeji ID a jak k tomu jeste nastavit, aby se mi nasledne dle toho v rozeviratelnem okne zobrazily uz jen osoby spadajici pod tuto firmu.
Diky predem za reakci.

#5 Re: Base » Pole zobrazující jen hodnoty příslušné nadřazenému poli » 6. 1. 2012 16:26:58

Možná jsem se špatně vyjádřil v původním příspěvku, ale bylo to myšleno, že mám formulář kde jsou pole např: ID záznamu, ID firmy, Název firmy, Adresa aj., poté pole Jméno, telefon, mail atd., které se bude filtrovat a zobrazí jen kontakty, které patří dané firmě.
.
Když ale založím nový záznam, byl bych rád, kdyby tyto hodnoty (včetně jmen) byly v jedné finální tabulce např. "zásilky". Takto dle pod-formulářů bych vytvořil nový záznam v tabulce zásilky kde by byly základní informace a poté pod-formulář by zobrazil jen ty kontakty pro daný záznam, ale už by to bylo uloženo v jiné tabulce než té "zásilky". Abych poté nemusel přes SQL příkaz/dotaz slučovat tyto hodnoty k sobě a poté je teprve vyhodnotí.
Sice by to možné bylo, ale raději bych aby bylo možno vytvořit kombinované pole, které mi zobrazí už jen kontakty k výběru dle nadřazeného pole.
.
Pevně věřím, že jsem to snad nyní napsal trochu srozumitelně. Jestliže ne, všem se omlouvám.

#6 Base » Pole zobrazující jen hodnoty příslušné nadřazenému poli » 16. 12. 2011 09:13:43

Billlly_Samotar
Odpovědí: 7

Dobrý den.

Chtěl bych Vás požádat o radu. Mám databázi, kde mám tabulky jako "seznam firem", "kontakty", "zásilky" aj. a dělám formulář (nad tabulkou zásilek), kde bych rád použil "Kombinované pole" zobrazující prvně hodnoty z tabulky firmy (ID nebo Název firmy) a níže druhé "Kombinované pole" zobrazující kontakty, které této firmě jsou podřízeny -> abych viděl jen lidi spadající pod firmu zadanou v prvním "Kombinovaném poli".
Nevím, zda je možné to řešit jakoby podformulářem, který by byl závislý na hodnotě zadané firmy, ale aby když si následně ten kontakt vyberu jej to uložilo pod tu původní tabulku (např. zásilky).

Budu rád za každou možnou radu a v případě, že by jste něco nevěděli, klidně zodpovím přesněji.

Děkuji předem. cool

#7 Re: Base » Vyřešeno - Dotaz na filtrování dat dle datumu » 28. 11. 2011 14:56:51

Tak jsem to nakonec opět vyřešil sám. :-)


SELECT "Nazev_tabulky".*, DATEDIFF( 'dd', "datum_1", CURRENT_DATE ) AS "Pocet_dni_od_datum_1_k_dnesnimu_dni" FROM "Nazev_tabulky" WHERE "datum_2" IS NULL AND DATEDIFF( 'dd', "datum_1", CURRENT_DATE ) >= 14


Zobrazí to tedy hodnoty z tabulky, kde pole "datum_1" je starší 14cti dnů a "datum_2" je prázdné. Mě se to například hodí pro přehlednost data od přijetí zboží co je na skladě do doby než se vydá.
Snad příště pomůžete. cool

#8 Base » Vyřešeno - Dotaz na filtrování dat dle datumu » 23. 11. 2011 09:09:19

Billlly_Samotar
Odpovědí: 1

Zdravím Vás.

Rád bych Vás požádal o radu. Mám databázi, kde mám x polí a mezi nimi i pole typu Date [DATE]. Potřeboval bych vytvořit dotaz na tuto tabulku a filtrovat data, která budou splňovat určité podmínky. Např. jestliže zadané datum bude menší než aktuální datum-14dní aby mi je to zobrazilo. Nevím jak mám nastavit do dotazu funkci něco jako =Today aj.

Vytvářet dotazy, kde budu mít přímo datum vypsané mi nepřipadá úplně ideální:

SELECT * FROM "Reklamace_STB" WHERE "datum_prijeti" <= {D '2011-11-18' }

Potřeboval bych, zda by jste mi prosím mohli pomoci, jak upravit dotaz, nebo zda přímo formulář dokáže nějakou funkcí (makrem po spuštění tlačítka) vytřídit a zobrazit data jen dle zadaných kritérií. Také nevím jak do výše napsaného dotazu nějak zakomponovat aby to bralo např. napsané datum + 14dní.

Díky předem za odpověď a radu. roll

#9 Re: Base » Načtení údajů do formuláře podle výběru prvního prvku formuláře » 5. 9. 2011 14:30:57

Sice jsem ti nahoře poslal jednu možnost, ale myslím si, že i toto lze použít:
.
Copy Record To New
.
Však projdi sám a uvidíš co z toho bude možno použitelné.

#10 Re: Base » Načtení údajů do formuláře podle výběru prvního prvku formuláře » 5. 9. 2011 08:40:34

Tato stránka by ti měla snad poradit. Jak budu mít čas tak bych případně udělal i ukázkový soubor, ale jestli stihneš dříve něco vymyslit budu rád, když přiložíš.
.
Dotaz EN forum
.
Doporučuji podívat se především na předposlední příspěvek (od Moderátora DrewJensen).
.
EDITOVÁNO:
Databázi, z které případně můžeš čerpat nějaké hodnoty (a není jich málo a dost práce mi dalo některé sám zjistit neb jsem též začátečník) máš na této stránce:
.
Databaze.zip

Je to krkolomné řešení, ale je to řešení...Jinak musíš si tuto Databázi v Base registrovat aby ti fungovalo spouštění některých SQL dotazů -> Nástroje -> Volby -> OO.Base -> Databáze a tam dáš přidat a dáš tam tuto db s necháš název Databaze.

Snad to aspoň trošku pomůže. Jsou tam řešeny věci, na které jsem se ptal v předešlých příspěvcích tak můžeš testovat. :-)

Jo jinak aby jsi otestoval funkčnost tak musíš jít do formuláře Evidence_Modemu a tam ve spodní části Reklamací jít na datum přijetí a jakmile jej změníš (nebo zadáš nové) tak se aktualizují data z tabulky vybava_modemu -> momentálně nastaveno jen na sloupec origbal a cd a přenáší se to do tabulky zzz_....

Tak snad pochopíš jak to mám psané:-)

#11 Re: Base » Načtení údajů do formuláře podle výběru prvního prvku formuláře » 5. 9. 2011 07:31:34

Zdravím Vás.

Toto jistě možné je, ale otázkou je, zda je potřeba používat více databází nebo si nevystačíte s více tabulkami. Myslím si, že použít dvě tabulky kde v jedné budete mít seznam všech lidí a v druhé by jste si ukládal jen vybrané co použijete a tuto tabulku měl následně propojenou s X dalšími formuláři pro Vaši potřebu tak je to ideální. Jestli je potřeba to přeci řešit dvěma databázemi záleží na Vás co je lepší zda jednu chcete mít jako SQL DB (základní se všemi jmény) a druhou pod Base (jen vybraná s kterými budete aktuálně pracovat) nebo např. místo SQL to řešit přes tabulku Accessu, přes ODBC zdroje aj.

Důležité je mít prvně přesné požadavky a dle toho následně hledat řešení. Nevím co přesně zamýšlíte, ale já bych nebyl vůbec proti, kdyby všechny údaje měli být v jedné DB a pracovat s více tabulkami.

#12 Base » Otevření formuláře po spuštění Base aj. » 2. 9. 2011 12:07:34

Billlly_Samotar
Odpovědí: 1

Opět Vás zdravím s pár dotazy, na které jistě velké množství z Vás, co si tento příspěvek přečtou mi budou moct dokázat odpovědět.
.
1) Chtěl bych, když spustím databázi, aby se hned po startu spustil formulář, který v ní mám uložený. Je toto v OO možné či nikoli a člověk si jej musí spustit sám? V MS Access jsem to tak nastavené měl, ale tady to vypadá, jako bych musel mít napsané makro a to rovnou nastavit aby se spouštělo při startu. Můžete mi prosím poradit? Vím jak spustit po startu makro => Nástroje -> Přizpůsobit -> záložka Události -> dole vybrat Databázi (aby to nebylo definováno pro celé OO) -> zvolit "Otevřít dokument" a v pravé části dát Makro a požadované si vybrat.
.
Odpověď na dotaz první: Makro k otevření formuláře po startu (pod OO 3.3 funguje):
.

[u]Sub OpenStartForm[/u]
   oContexto = CreateUnoService("com.sun.star.sdb.DatabaseContext") 
   oFonte = oContexto.getRegisteredObject("Databaze") 
   oForms = oFonte.DatabaseDocument.FormDocuments 
   oAConnection = oFonte.getConnection("","") 

   Dim pProp(1) As New com.sun.star.beans.PropertyValue 
   pProp(0).Name = "ActiveConnection" 
   pProp(0).Value = oAConnection 
   pProp(1).Name = "OpenMode" 
   pProp(1).Value = "open" 

   oForm = oForms.loadComponentFromURL("Hlavni_Menu", "_blank", 0, pProp())
End Sub

.
2) Dále jestli by jste mi mohli ještě napsat nějaké makro, které když přes tlačítko ve formuláři otevřu nějaký formulář, původní (ten s tím tlačítkem) se zavře a bude aktivní okno formulář, který jsem otevřel.
.
3) Dalším dotazem a snad posledním je, když spustím formulář, jestli by bylo možno nastavit nějaké makro aby se hned formulář Maximalizoval. Vždy jej musím maximalizovat ručně. Je toto prosím též možné?
.
Odpověď na dotaz třetí: Makro k maximalizaci je zde (pod OO 3.3 funguje):

[u]Sub Maximalizace[/u] 'Maximalizuje dané/aktivní okno
oController = ThisComponent.getCurrentController()
oFrame = oController.getFrame()
oContainerWindow = oFrame.ContainerWindow
oContainerWindow.isMaximized = True
End Sub

Děkuji předem za odpovědi.

#13 Re: Base » Vyřešeno - Maximální hodnota ; SQL jako Makro pro update dat v tabulce » 2. 9. 2011 07:58:15

Tak jsem si se vším, po hledání různých příspěvků a testování, poradil a zde výsledné makro (možná někomu pomůže tongue ):

.
rem---------------------------------------------------------
rem Použije hodnotu pole pro jiné - použito pole ID a následně upraveno a zadáno do RP
sub Uprava_RP_dle_ID_STB(oevent as object)
Dim odatum_prijeti,orp,oID,oGrid
Dim Pole_pro_zjisteni_delky as String
Dim QueryDefinitions As Object 
Dim QueryDefinition As Object 
Dim DatabaseContext As Object 
Dim DataSource As Object 

odatum_prijeti=oevent.source
oGrid=odatum_prijeti.parent
oID=oGrid.getbyname("ID") 'přiřazení hodnoty danému poli
orp=oGrid.getbyname("rp") 'přiřazení hodnoty danému poli
wait 300                  'timer - čeká 0,3 sec

QueryToDo="SELECT max(id)+1 FROM Reklamace_STB ORDER BY  max(id) DESC" 'SQL, kde zobrazí nejvyšší hodnotu a přičte 1
DatabaseContext = createUnoService("com.sun.star.sdb.DatabaseContext") 
DataSource = DatabaseContext.getByName("Databaze")  'pojmenování Databáze -> jak je zaregistrovaná pro účely propojení

If Not DataSource.IsPasswordRequired Then 
   Connection = DataSource.GetConnection("","") 
Else 
      InteractionHandler = createUnoService("com.sun.star.sdb.InteractionHandler") 
      Connection = DataSource.ConnectWithCompletion(InteractionHandler) 
End If 
Statement = Connection.createStatement() 
ResultSet = Statement.executeQuery(querytodo) ' spuštění SQL dotazu (výše zadán) a následně práce s ním
If Not IsNull(ResultSet) Then                   ' podmínka na výsledek SQL dotazu
   While ResultSet.next 
     Automaticke_cislo = ResultSet.getString(1)
   Wend 
End If 

' zjištění délky výsledku dotazu (pole ID), upravení výsledku podle podmínek a následně použítí čísla dál (pro pole RP)
If Len(Automaticke_cislo) = 1 Then
   Pole_pro_zjisteni_delky = "00" + Automaticke_cislo
 ElseIf Len(Automaticke_cislo) = 2 Then
   Pole_pro_zjisteni_delky = "0" + Automaticke_cislo
 ElseIf Len(Automaticke_cislo) > 3 Then
   MsgBox "ID záznamu je větší jak 999, při vytvoření RP makro přenáší jen tři čísla - bude potřeba makro upravit"
 Else
   Pole_pro_zjisteni_delky = Automaticke_cislo
End If

wait 100 'timer - čeká 0,1 sec
If Len(orp.Text)= 0 Then 'podmínka na zjištění délky pole RP - vyplní se, jestliže je prázdné; jinak zůstává původní hodnota
orp.Text = "RP-S-"& YEAR(NOW()) & "-" & Pole_pro_zjisteni_delky
End If
orp.commit 'přenesení požadovaných hodnot a aktualizace tohoto daného pole
end sub

#14 Re: Base » Vyřešeno - Maximální hodnota ; SQL jako Makro pro update dat v tabulce » 1. 9. 2011 08:59:21

Zdravím Vás.
.
Tak nakonec to celé zbylo na mne a úplně nejsnazší možnou metodou, která mne nakonec napadla jsem učinil konec mému problému.
.
Skoro to už nyní funguje perfektně:

rem ------------------------------------------------------------------------
sub Uprava_pole_dle_jineho(oevent as object)
' Převezme hodnotu z jiného pole (případně doplní - použito u RP s ID)
dim odatum_prijeti,orp,oID,oGrid
dim Pole_pro_zjisteni_delky as String

odatum_prijeti=oevent.source
oGrid=odatum_prijeti.parent
oID=oGrid.getbyname("ID")
orp=oGrid.getbyname("rp")

' zjištění délky pole ID a následně dle toho upravení pro použítí čísla v RP
If Len(oID.text) = 1 Then
   Pole_pro_zjisteni_delky = "00" + oID.text
 ElseIf Len(oID.text) = 2 Then
   Pole_pro_zjisteni_delky = "0" + oID.text
 ElseIf Len(oID.text) > 3 Then
   MsgBox "ID záznamu je větší jak 999, při vytvoření RP makro přenáší jen tři čísla - bude potřeba makro upravit"
 Else
   Pole_pro_zjisteni_delky = oID.text
End If

wait 300 ' 0,3 sec
orp.Text = "RP-S-"& YEAR(NOW()) & "-" & Pole_pro_zjisteni_delky
orp.commit
end sub

.
Z tohoto makra je zřejmé, že doplnění na daný mnou potřebný formát funguje na bázi jednoduché  podmínky. Jakmile aktualizuji Formulářový prvek "Datum přijetí" (odatum_prijeti) spustí se makro, které hodnotu z pole ID (oid; automatické číslo) vezme, zkotroluje podmínkou délku tohoto pole, upraví na požadovaný formát a tuto upravenou hodnotu s označujícím textem zadá do pole RP (orp). Vše vyřešeno až na jeden detail a to funkci automatického pole ID (oID). Když zadávám na požadovaný řádek formuláře nějakou hodnotu tak dokud nepřejdu na jiný záznam, neukáže se tam Automatické číslo ID a mě se vyplní pouze text, který se tam zobrazuje automaticky plus rok. ID díky tomu, že žádné nebylo tak mám prázdnou pozici zde.
.
Je prosím nějaká možnost mít pole, které jakmile začnu psát aby se ihned počítalo a ne až po přejití na další záznam (potvrzení záznamu).
Například udělat nějaké vlastní počitadlo (v MS Accessu jsem měl), které prošlo daný sloupec s čísly, našlo největší, přičetlo jedničku a následně toto číslo mi to vložilo do požadované hodnoty pole. Umíte mi prosím někdo poradit? Nemohu najít funkci, která mi projde sloupec a najde největší hodnotu (v MS Access to byla hodnota DMax).
.
Děkuji předem za odpověď.

#15 Re: Base » Vyřešeno - Maximální hodnota ; SQL jako Makro pro update dat v tabulce » 29. 8. 2011 20:15:58

Celý ten seriál jsem právěže zezačátku procházel a dostával se do tajů OpenOffice, ale toto jsem nikde nenašel. Ale díky ohledně toho nahrávání souborů. ;-) Já tuším, že pro lidi je to snadné, ale pro znalejší ke kterým se nehlásím neb na to nemám :-)
.
PS: Musím se ještě hóóódně učit :-D
.
Editováno:
.
PS: Tak mazec...vytvořil jsem si DB, chci ji na WIKI uložit a ejhle. Tady jsem zaregistrovaný, ale tyto přihlašovací údaje mi pod WIKI nefungují a píše mi to, že jméno tohoto uživatele není zaregistrováno. Když chci dát registraci přehodí mne to tady na stránky kde jsem přihlášený a dělat nový účet s novou mailovkou jen kvůli tomu, zda náhodou se mi poté nezpřístupní i WIKI no tak to spíše asi bude chyba někde jinde...nevíte prosím kde? Jinak jsem upravil první článek s prosbou a přiložil k ní daný testovací soubor       New DB.zip
.
Děkuji mnohokrát za ochotu.

#16 Base » Vyřešeno - Maximální hodnota ; SQL jako Makro pro update dat v tabulce » 29. 8. 2011 12:10:10

Billlly_Samotar
Odpovědí: 5

Zdravím Vás.
.
Na všechny dotazy co jsem měl jsou zde i odpovědi. Přeji pěkný den.
.
Chtěl bych požádat, zda by někdo byl tak ochotný a napsal zde makro, které bude dělat jednoduchou funkci a to zobrazí nejvyšší hodnotu ve sloupci dané tabulky, k ní přičte jedničku a to je vše. V MS Accessu to jde udělat přes funkci DMax, ale zde v OO Base nevím jak. Mám sloupeček ID (automatické číslo) z kterého by se mohlo vycházet, projít tento sloupec, najít nejvyšší hodnotu, přičíst jedničku a tu uložit do jiného pole.
Nebo druhá možnost, tento příkaz umím normálně v SQL si napsat (TOP1 kde na konci dám řazení DESC). Teď ale nevím, jak by se v makru mohlo s výslednou hodnotou dotazu pracovat -> např. najde to nejvyšší ID 12 tak aby tuto hodnotu to použilo, přičetlo k ní jedničku a tu poté použilo pro jiné pole.
Tak jsem našel Makro, které mi hodnotu z výsledného SQL najde, ale funguje to jen bez funkce TOP, jakmile ji tam dám, hodí se mi chybová hláška -> viz. obrázek i s makrem. Jakmile "TOP 1" smažu zobrazí se čistě jen hodnota a mohu s ní pracovat. Když mi TOP funguje v SQL v OO, je možnost to nějak nastavit i do makra?
.
chyba_sql_top.jpg
.
Děkuji za odpověď.
.
--------------------------------------------------------------------------------
PŮVODNÍ DOTAZ NA FÓRU:
Níže popsané jsem již skoro vyřešil a odpověděl v dalším příspěvku.
Myslím si, že je to pro Vás zcela jednoduchá otázka a přesto pro mne dosti složitá. Databázi v Base sem si už docela pěkně vyšperkoval, ale základ neumím. Rád bych jestli by jste někdo byl tak hodný a upravil zkušební tabulku z přílohy ( New DB.zip ) o tabulce s formulářem kde je pár polí. Co bych v této db potřeboval.
.
Když budu ve formuláři vytvářet nový záznam (řádek) aby se mi automaticky doplnila jedna hodnota v daným formátu. Dát automatické číslo jako primární sloupec není problém a bylo by to i ideální vzít hodnotu z tohoto čísla a použít ji u jiného sloupce kde by byl formát např. doc_2011_xxx kde místo xxx bude číslo vždy o třech znacích od 000, 001, 002 až po 999 (podle toho, kolikátý to bude záznam dle automatického čísla v DB).
.
Nevím jak přenést ve formuláři na pozadí hodnotu jednoho prvku (pole id s číslem) do pole druhého (pole document, kde má být předem definovaný text), aby se automaticky zaktualizovalo a drželo si stále daný formát (že to neudělá doc_2011_1, doc_2011_2 aj.).
.
Kdyby jste si nevěděli rady s tím držením formátu tak alespoň vymyslet a dát sem ukázku nějakého formuláře, kde se bude automaticky přenášet ta hodnota z jedné buňky do druhé (nebo klidně vytvořit vlastní počitadlo pro tu buňku jestli je to snazší či přes update sql dotaz).
.
Díky předem za ochotu.

#17 Re: Base » Vyřešeno - Vlozeni hodnoty ze schranky do nazvu souboru » 26. 8. 2011 21:22:53

Tak kdyby jste věděli nějaký lepší návod, ale jinak jsem hledal až nakonec na japonských stránkách jsem našel funkční makro, které mi dokázalo udělat přesně co potřebuji, takže úplně finální verze makra je (kdyby někdo potřeboval také použít, ale jistě bude znát kratší a lepší):
.

sub Odemceni_Posun_na_dane_misto_Oznaceni_Copy_Save
rem ----------------------------------------------------------------------
' Definice proměných
dim document   as object
dim dispatcher as object
dim args1(1) as new com.sun.star.beans.PropertyValue
dim args2(1) as new com.sun.star.beans.PropertyValue
dim args3(2) as new com.sun.star.beans.PropertyValue
dim args4(9) as new com.sun.star.beans.PropertyValue
rem ----------------------------------------------------------------------
' Nastavení dokumentu
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
' Přepne dokument do formátu Editace (původně jen pro čtení)
dispatcher.executeDispatch(document, ".uno:EditDoc", "", 0, Array())

rem ----------------------------------------------------------------------
' Přesun na určitou pozice (v našem případě před "Číslo RP")
' tři řádky dolů - neoznačuje
args1(0).Name = "Count"
args1(0).Value = 3
args1(1).Name = "Select"
args1(1).Value = false
dispatcher.executeDispatch(document, ".uno:GoDown", "", 0, args1())
' 26 znaků doprava - neoznačuje
args2(0).Name = "Count"
args2(0).Value = 26
args2(1).Name = "Select"
args2(1).Value = false
dispatcher.executeDispatch(document, ".uno:GoRight", "", 0, args2())

rem ----------------------------------------------------------------------
' Označení určité pozice (momentálně "Čísla RP" - 13znaků)
args3(0).Name = "Count"
args3(0).Value = 13
args3(1).Name = "Select"
args3(1).Value = true
dispatcher.executeDispatch(document, ".uno:GoRight", "", 0, args3())
' Uložení do schránky
dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())

rem ----------------------------------------------------------------------
' Vloží hodnotu ze schánky
 oClip = CreateUnoService("com.sun.star.datatransfer.clipboard.SystemClipboard")
  oTransfer = oClip.getContents()

  ' sequence of com.sun.star.datatransfer.DataFlavor
  aDataFlavors = oTransfer.getTransferDataFlavors()
  bType = False
  For i = 0 To UBound(aDataFlavors) Step 1
    aDataFlavor = aDataFlavors(i)
    If aDataFlavor.MimeType = "text/plain;charset=utf-16" Then
      bType = True
      Exit For
    End If
  Next
  If bType Then
    ' convert utf-16 to UNO string
    oConverter = CreateUnoService( _
        "com.sun.star.script.Converter")
    Hodnota_ze_schranky = oConverter.convertToSimpleType( _
        oTransfer.getTransferData(aDataFlavor), _
        com.sun.star.uno.TypeClass.STRING)
'    MsgBox Hodnota_ze_schranky 'Pro otestování co je aktuálně ve schránce uloženo
  End If

rem ----------------------------------------------------------------------
' Nastavení "Čísla RP" do hlavičky dokumentu (POPIS - TITLE)
args4(0).Name = "Properties.UseUserData"
args4(0).Value = true
args4(1).Name = "Properties.DeleteUserData"
args4(1).Value = false
args4(2).Name = "Properties.Title"
args4(2).Value = Hodnota_ze_schranky '<-----------------ZDE je hodnota ze schránky!
args4(3).Name = "Properties.Subject"
args4(3).Value = "Reklamační protokol"
args4(4).Name = "Properties.KeyWords"
args4(4).Value = "Reklamacni protokol"
args4(5).Name = "Properties.Description"
args4(5).Value = "MTL Cable spol. s r.o."
args4(6).Name = "Properties.AutoReload"
args4(6).Value = false
args4(7).Name = "Properties.AutoReloadTime"
args4(7).Value = 0
args4(8).Name = "Properties.AutoReloadURL"
args4(8).Value = ""
args4(9).Name = "Properties.AutoReloadFrame"
args4(9).Value = ""

dispatcher.executeDispatch(document, ".uno:SetDocumentProperties", "", 0, args4())
end sub

#18 Base » Vyřešeno - Vlozeni hodnoty ze schranky do nazvu souboru » 26. 8. 2011 11:55:40

Billlly_Samotar
Odpovědí: 1

Dobrý den.
.
Mám v Base vytvořenou Databázi, v ní X formulářů, dotazů a sestav a chtěl bych danou sestavu uložit jako samostatný soubor. Ideálně kdyby bylo možno z dané Sestavy určitou hodnotu vytáhnout (to se mi povedlo a mám ji ve schránce), ale s touto hodnotou bych chtěl dále pracovat. Ne ji vložit do daného dokumentu jako text, ale tuto hodnotu ze schránky uložit do nějaké proměnné nebo rovnou do hlavičky souboru (POPIS - TITLE). Níže přikládám dosavadní makro.
.
Předem díky za rychlou pomoc.
.
Zde slíbené makro:

sub Odemceni_Posun_na_dane_misto_Oznaceni_Copy_Save
rem ----------------------------------------------------------------------
' Definice proměných
dim document   as object
dim dispatcher as object
dim args1(1) as new com.sun.star.beans.PropertyValue
dim args2(1) as new com.sun.star.beans.PropertyValue
dim args3(2) as new com.sun.star.beans.PropertyValue
dim args4(9) as new com.sun.star.beans.PropertyValue
rem ----------------------------------------------------------------------
' Nastavení dokumentu
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
' Přepne dokument do formátu Editace (původně jen pro čtení)
dispatcher.executeDispatch(document, ".uno:EditDoc", "", 0, Array())

rem ----------------------------------------------------------------------
' Přesun na určitou pozice (v našem případě před "Číslo RP")
' tři řádky dolů
args1(0).Name = "Count"
args1(0).Value = 3
args1(1).Name = "Select"
args1(1).Value = false
dispatcher.executeDispatch(document, ".uno:GoDown", "", 0, args1())
' 26 znaků doprava
args2(0).Name = "Count"
args2(0).Value = 26
args2(1).Name = "Select"
args2(1).Value = false
dispatcher.executeDispatch(document, ".uno:GoRight", "", 0, args2())

rem ----------------------------------------------------------------------
' Označení určité pozice (momentálně "Čísla RP" - 13znaků)
args3(0).Name = "Count"
args3(0).Value = 13
args3(1).Name = "Select"
args3(1).Value = true
dispatcher.executeDispatch(document, ".uno:GoRight", "", 0, args3())
' Uložení do schránky
dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())

rem ----------------------------------------------------------------------
' Nastavení "Čísla RP" do hlavičky dokumentu (POPIS - TITLE)
args4(0).Name = "Properties.UseUserData"
args4(0).Value = true
args4(1).Name = "Properties.DeleteUserData"
args4(1).Value = false
args4(2).Name = "Properties.Title"
args4(2).Value = "TEST" 'Tady místo TEST bych rád použil hodnotu ze SCHRÁNKY.
args4(3).Name = "Properties.Subject"
args4(3).Value = "Reklamační protokol"
args4(4).Name = "Properties.KeyWords"
args4(4).Value = ""
args4(5).Name = "Properties.Description"
args4(5).Value = ""
args4(6).Name = "Properties.AutoReload"
args4(6).Value = false
args4(7).Name = "Properties.AutoReloadTime"
args4(7).Value = 0
args4(8).Name = "Properties.AutoReloadURL"
args4(8).Value = ""
args4(9).Name = "Properties.AutoReloadFrame"
args4(9).Value = ""

dispatcher.executeDispatch(document, ".uno:SetDocumentProperties", "", 0, args4())
end sub

Zápatí

Používáme FluxBB