🙏 Helfen Sie jetzt mit, unser LibreOffice Forum zu erhalten! 🙏
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱

🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀

❤️ DANKE >> << DANKE ❤️

>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

Makro funktioniert nicht mehr nach Update

Base ermöglicht es Ihnen, Ihre Daten in einer Datenbank direkt mit LibreOffice zu bearbeiten.
Antworten
pingpong
Beiträge: 22
Registriert: Fr 4. Apr 2014, 04:45

Makro funktioniert nicht mehr nach Update

Beitrag von pingpong » Mi 11. Nov 2015, 06:45

Hallo liebe Gemeinde,

ich hatte ein LO Update von 4.3.7 auf 4.4.6.3
Meine Datenbank mit verschiedenen Makros macht fast alles was sie soll, bis auf ein einziges Macro. Das Macro zum speichern und Beenden aller geöffneten Formulare inklusive Base selbst geht nicht mehr. Die geöffneten Forms schließen sich, alles ist gut, aber beim letzten Schritt, dem Schließen des Programms hängt sich alles auf. Keine Rückmeldung usw.
Wie kann ich den Fehler finden?

Code: Alles auswählen

SUB speichern_und_beenden(event as object)
oController = ThisDatabaseDocument.CurrentController
oController.closeSubComponents
oController.ActiveConnection.close()
oDoc = ThisDatabaseDocument
oDoc.store()
oDoc.close(True)
END SUB

gogo
* LO-Experte *
Beiträge: 1081
Registriert: Sa 5. Feb 2011, 19:07

Re: Makro funktioniert nicht mehr nach Update

Beitrag von gogo » Mi 11. Nov 2015, 15:40

Ohne dass ich's getestet hätte - versuch' zwischen die Anweisungen print Befehle einzubauen:

Code: Alles auswählen

SUB speichern_und_beenden(event as object)
print "0"
oController = ThisDatabaseDocument.CurrentController
print "1"
oController.closeSubComponents
print "2"
oController.ActiveConnection.close()
print "3"
oDoc = ThisDatabaseDocument
print "4"
oDoc.store()
print "5"
oDoc.close(True)
print "6"
END SUB
Dann merkst Du vielleicht wo das Problem auftritt. Zeitprobleme (Object does not exist ...) kann man evtl. umgehen, und Prozesse auch komplett auslagern. z.B.:

Code: Alles auswählen

SUB speichern_und_beenden(event as object)
oController = ThisDatabaseDocument.CurrentController

SubCompsClosed=CloseTheSubComps(oController)
if SubCompsClosed <> "###FERTIG###" then
    msgbox "Die Funktion 'SubCompsClosed' meldet:" & SubCompsClosed & " speichern_und_beenden wird NICHT weiter fortgesetzt!"
    exit sub
    ' oder besser: END
end if

oController.ActiveConnection.close()
oDoc = ThisDatabaseDocument
oDoc.store()
oDoc.close(True)
END SUB

FUNCTION CloseTheSubComps(oCtrl)
CloseTheSubComps="###GESTARTET###"
oCtrl.closeSubComponents
'...
'... Tests ob oCtrl.closeSubComponents erfolgreich war
'...
CloseTheSubComps="###FERTIG###"
END FUNCTION
g
2008 LucidL./MaverickM./WinXP LibreOffice 3.3.2 > 02/13 LinuxMint13/Xubuntu > 09/13 Debian Wheezy+LO3.5.4.2 > 01/15 Debian Jessie KDE+LO4.3.3.2/Mint17 openbox auf USB+LO4.2.8.2 > 03/16 ArchLin & LO5.1+ff > 02/18 Kubuntu

F3K Total
* LO-Experte *
Beiträge: 2501
Registriert: So 10. Apr 2011, 10:10

Re: Makro funktioniert nicht mehr nach Update

Beitrag von F3K Total » Mi 11. Nov 2015, 19:08

Hi, versuche mal

Code: Alles auswählen

oDoc.close -1
...läuft bei mir ;-)
Gruß R
Windows 11: AOO, LO Linux Mint: AOO, LO

Rentner Heinz
Beiträge: 23
Registriert: Mi 9. Jul 2014, 16:10

Re: Makro funktioniert nicht mehr nach Update

Beitrag von Rentner Heinz » Do 12. Nov 2015, 00:10

Hallo R.
oDoc.close -1 = funktioniert nicht, das mit print ... hilft zwar schon, ist
aber sehr störend, weil der Butten ja gerade ohne weitere Aktivitäten
speichern und schließen soll.

Noch einen schönen Abend
Rentner Heinz

gogo
* LO-Experte *
Beiträge: 1081
Registriert: Sa 5. Feb 2011, 19:07

Re: Makro funktioniert nicht mehr nach Update

Beitrag von gogo » Do 12. Nov 2015, 08:27

die Prints sind ja nur zum debuggen - hat die Datenbank dann wirklich ohne LO-Absturz geschlossen? Wenn ja, dann hast Du "nur" ein Zeit-Problem, d.h. dass LO im Zuge des Makros auf etwas zugreift, das es nicht (mehr) gibt, oder dass es einen unzulässigen Zugriff gibt etc.

Du kannst dann die Prints einzeln rausnehmen (fang' am besten beim print "0" an) und sehen nach welchem Entfernen der Absturz wieder auftritt.
g
2008 LucidL./MaverickM./WinXP LibreOffice 3.3.2 > 02/13 LinuxMint13/Xubuntu > 09/13 Debian Wheezy+LO3.5.4.2 > 01/15 Debian Jessie KDE+LO4.3.3.2/Mint17 openbox auf USB+LO4.2.8.2 > 03/16 ArchLin & LO5.1+ff > 02/18 Kubuntu

pingpong
Beiträge: 22
Registriert: Fr 4. Apr 2014, 04:45

Re: Makro funktioniert nicht mehr nach Update

Beitrag von pingpong » Do 12. Nov 2015, 10:12

ES hat funktioniert mit den "prints". Das Makro hatte sich wohl irgendwie verschluckt, oder so.
Ich habe die "prints" eingefügt, das Makro ein paarmal damit ausgeführt, alles ging. Dann habe ich die prints gelöscht und siehe da: Es läuft wieder!
-warum auch immer- Ist wohl so eine Art Voodoo.

Nachtrag: Es geht nicht immer, es scheint ein Zeitproblem zu sein. Kann man das Makro irgendwie verlangsamen?

Vielen Dank

gogo
* LO-Experte *
Beiträge: 1081
Registriert: Sa 5. Feb 2011, 19:07

Re: Makro funktioniert nicht mehr nach Update

Beitrag von gogo » Do 12. Nov 2015, 12:06

wäre der nächste Schritt gewesen ;)

ersetze die Print's durch

Code: Alles auswählen

wait 500
wobei 500 Millisekunden sind, die kann man anpassen.
die Prints 0 und 1 machen sicher kein Problem, kannst Du also löschen. Print 4 und 6 ebenso.
Evtl ist es gut die Zeile

Code: Alles auswählen

oDoc = ThisDatabaseDocument
weiter nach oben zu schieben z.B. gleich als Zeile 1.

am ehesten ist das Problem im Bereich vom Print 5, denn sollte der Speichern-Prozess noch laufen wenn das oDoc.close(True) startet, dann gibt's klarerweise Probleme (wie soll man etwas aus dem RAM auf die Festplatte schreiben, das nicht mehr im RAM ist)

Um überflüssiges Speichern zu verhindern kannst Du auch eine der folgenden Zeilen verwenden:

Code: Alles auswählen

if oDoc.wasModifiedSinceLastSave then oDoc.store()
' besser
if oDoc.isModified then oDoc.store()
g
2008 LucidL./MaverickM./WinXP LibreOffice 3.3.2 > 02/13 LinuxMint13/Xubuntu > 09/13 Debian Wheezy+LO3.5.4.2 > 01/15 Debian Jessie KDE+LO4.3.3.2/Mint17 openbox auf USB+LO4.2.8.2 > 03/16 ArchLin & LO5.1+ff > 02/18 Kubuntu

Rentner Heinz
Beiträge: 23
Registriert: Mi 9. Jul 2014, 16:10

Re: Makro funktioniert nicht mehr nach Update

Beitrag von Rentner Heinz » Do 12. Nov 2015, 20:14

Problem erledigt (wait 500 bei Zeilen 3 und 5 war bei mir die Lösung)
Dank an alle Mitwirkenden.

Rentner Heinz

pingpong
Beiträge: 22
Registriert: Fr 4. Apr 2014, 04:45

Re: Makro funktioniert nicht mehr nach Update

Beitrag von pingpong » Fr 13. Nov 2015, 07:02

Jaaa! Erledigt.
HB (habe) :) jetzt 250 ms eingesetzt bei 3 und 5, alles funzt bestens.

Vielen Dank an alle!
Fritz

gogo
* LO-Experte *
Beiträge: 1081
Registriert: Sa 5. Feb 2011, 19:07

Re: Makro funktioniert nicht mehr nach Update

Beitrag von gogo » Fr 13. Nov 2015, 08:38

Die Timeouts sind nur eine Holzhammer-Lösung. Wenn es bei den Prozessen längere Verzögerungen gibt, dann werden die Probleme wieder auftreten.

Die sicherste Methode eine Datenbank zu schließen ist ein Makro außerhalb der DB zu speichern (z.B. "meine Makros.Standard.Module1... " oder in einer Extension) und dieses Makro dann aus einem Button in einem Formular heraus anzusprechen:

Code: Alles auswählen

sub DB_schliessen(oEvent)
oDatenBank = oEvent.Source.Model.Parent.Parent.Parent.Parent
oDatenBank.close(true)
end sub
Das löst aber nicht die Problematik des Schließens per Alt+F4 oder Klick auf das Schließen-Kreuz in der Titelleiste, was besonders unangenehm ist bei ausgeblendeter Datenbank-GUI...
g
2008 LucidL./MaverickM./WinXP LibreOffice 3.3.2 > 02/13 LinuxMint13/Xubuntu > 09/13 Debian Wheezy+LO3.5.4.2 > 01/15 Debian Jessie KDE+LO4.3.3.2/Mint17 openbox auf USB+LO4.2.8.2 > 03/16 ArchLin & LO5.1+ff > 02/18 Kubuntu


An alle, die das LibreOffice-Forum gern nutzen und unterstützen wollen:


Bitte helfen Sie uns mit 7 Euro pro Monat.
Durch Ihren Beitrag tragen Sie dazu bei, unsere laufenden Kosten für die kommenden Monate zu decken.
Unkompliziert per Kreditkarte oder PayPal.
Als ein kleines Dankeschön werden Sie im LO-Forum als SUPPORTER gekennzeichnet.



Antworten