Zeitschleife für Makroablauf

Hallo *,

ich stehe vor dem Problem, dass der Kontakt zu einer Datenbank im Netz
abhängig ist von der wait_timeout-Einstellung des Servers. Wird eine
Zeit lang nichts mehr an Daten angefordert, so verliert z.B. MySQL mit
dem direkten Treiber den Kontakt und die Datenbankdatei muss geschlossen
und neu gestartet werden. Unter JDBC lässt sich so etwas mit
autoReconnect=true vermeiden, erfordert aber auch erst einmal einen
vorübergehenden Verbindungsabbruch.

Da habe ich mir gedacht: Schickst Du doch einfach in bestimmten
Zeitabständen automatisch eine kleine Abfrage wie SELECT NOW() zum
Server und die Verbindung bleibt bestehen. Nur: Wie mache ich so eine
Zeitschleife auf, ohne mir den Ablauf weiterer Makros unmöglich zu machen?

Gruß

Robert

Hallo Robert,

eine Möglichkeit wäre mit einem externen Programm in bestimmten Zeitabständen ein Makro extern aufzurufen. Wenn ich mich recht erinnere, arbeitest Du ja mit LINUX, so könnte man mit einem kleinen BASH-Skript so eine Schleife programmieren und in der Schleife extern ein Makro aufrufen. Und wenn Du das mit einem parallel installierten LO machst, dann ist Dein Standard-LO völlig unbeteiligt.

Das Nachfolgende ist eine WINDOWS-Batch mit den LO-Aufrufen. "CoronaNews" ist das Makro-Modul und "Main" ist das aufzurufende Makro, der Rest ist selbsterklärend:

@ECHO OFF

REM »LibreOffice« Standard-Installation:
REM SET L="C:\Program Files\LibreOffice\program/soffice.exe"

REM »LibreOffice« Parallel-Installation:
SET L="E:\LOP\LibreOffice 6.4.7.2\program\soffice.exe"

SET M="macro:///Standard.CoronaNews.Main"
%L% --nologo %M%

Vielleicht hilft Dir das weiter.

Viele Grüße
Hans-Werner

------ Originalnachricht ------

Hallo Hans-Werner,

eine Möglichkeit wäre mit einem externen Programm in bestimmten
Zeitabständen ein Makro extern aufzurufen. Wenn ich mich recht erinnere,
arbeitest Du ja mit LINUX, so könnte man mit einem kleinen BASH-Skript
so eine Schleife programmieren und in der Schleife extern ein Makro
aufrufen. Und wenn Du das mit einem parallel installierten LO machst,
dann ist Dein Standard-LO völlig unbeteiligt.

Natürlich ginge so etwas. Nur ist das dann nichts für Normaluser und
systemübergreifend. Außerdem gäbe das dann zusätzlich das Problem, dass
die Verbindung ja nicht die gleiche ist. Und da das dann noch verdeckt
erfolgen soll müsste ich sogar das Benutzerpasswort in Reinschrift im
Makro stehen haben.

Ich bin bisher überhaupt nicht in die Verlegenheit gekommen, Base für
solche Zwecke zu nutzen. Da baue ich mir lieber mit PHP-Scripten ein
Formular zusammen. Aber es gibt eben Leute, die das mit den Scripten
nicht hin bekommen und gerade zur Vereinfachung hier Base nutzen wollen.
Und da ist es ja blöd, wenn die Treiber das zwar lokal gut hin bekommen,
für den Webgebrauch aber nur bedingt geeignet sind.

Deswegen müsste der Timer irgendwo in LO selbst schlummern und zu
bestimmten Zeiten aufwachen und die kurze Prozedur starten, nachdem der
Kontakt hergestellt wurde. Und dazu fehlt mir der zündende möglichst
einfache Gedanke.

Gruß

Robert

Hallo Robert,

aus Deiner ersten Beschreibung war der Kontext nicht umfassend ersichtlich.

Wo man noch schauen könnte:

https://api.libreoffice.org/docs/idl/ref/servicecom_1_1sun_1_1star_1_1system_1_1SystemShellExecute.html

oder

10.12. UNO-Listeners und Handlers
http://www.uni-due.de/~abi070/count.php?id=OOME_3_0_deutsch.odt
http://www.uni-due.de/~abi070/count.php?id=OOME_3_0_deutsch.pdf

Aber zu beiden Möglichkeiten (s.o.) habe ich leider keinerlei Erfahrungswerte ...

Viele Grüße
Hans-Werner :-))

------ Originalnachricht ------

Hallo Robert,

eine letzte Möglichkeit, die mir einfällt:

Externer Makro-Aufruf (wie in meiner ersten Mail beschrieben) gesteuert über CronTab, gibt es sowohl in LINUX als auch in WINDOWS.

Das Passwort kann man auch notfalls mit einem kleinen Makro im Makro "versteckt erzeugen". Ist zwar nicht der "Königsweg", aber besser als es direkt anzugeben.

Viele Grüße
Hans-Werner :-))

------ Originalnachricht ------

Hi Robert,
ich würde da an einen Timer-event denken. Weiss nicht obs bei LO / UNO / ..
sowas gibt. Ich glaube bei VBA gabs sowas. Eventuell hilft Dir aber
<http://de.openoffice.info/viewtopic.php?f=2&t=61293>
Schau Dir dort mal Countdown.ods an

Hallo Bernd,

das Beispiel macht genau das, was ich eigentlich auch geplant hatte. Ich
war nur davon ausgegangen: Ein einmal laufendes Makro blockiert mir die
anderen Makros. Ist ja gar nicht so, denn das Makro kann über ein
zweites aus der Schleife rausgeholt werden.

So ist das, wenn wir viel über "Lerning by Doing" machen ...

Danke auch an Hans-Werner. Ich werde das jetzt5 so umsetzen, wie f3K das
auch gemacht hat.

Gruß

Robert

Hallo Robert,

wenn es nicht fürchterlich eilig ist, warte noch ein wenig mit der Umsetzung. Für die 7.1 kommt ne recht interessante, neue Makrobibliothek, die unter anderem einen Timer enthält.

Falls es für Dein Buch ist, wäre eine Einbindung darüber möglicherweise sinnvoll.

Schau mal hier ->

On GitLab: https://gitlab.com/LibreOfficiant/scriptforge

der passende mail-Tread lief die Tage auf der libreoffice.dev Liste.

Viele Grüße

Thomas

Hallo Thomas,

wenn es nicht fürchterlich eilig ist, warte noch ein wenig mit der
Umsetzung. Für die 7.1 kommt ne recht interessante, neue
Makrobibliothek, die unter anderem einen Timer enthält.

Falls es für Dein Buch ist, wäre eine Einbindung darüber möglicherweise
sinnvoll.

Den werde ich dann natürlich einbauen. Ist aber erst einmal für jemanden
im OpenOffice.info-Forum. Da bricht der Kontakt zum Datenbankserver von
der Datenbankdatei aus laufend zusammen.

Mit dem folgenden Makro scheine ich das jetzt zumindest beim direkten
Treiber lösen zu können: