Seite 1 von 1
Makro funktioniert nicht mehr nach Update
Verfasst: Mi 11. Nov 2015, 06:45
von pingpong
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
Re: Makro funktioniert nicht mehr nach Update
Verfasst: Mi 11. Nov 2015, 15:40
von gogo
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
Re: Makro funktioniert nicht mehr nach Update
Verfasst: Mi 11. Nov 2015, 19:08
von F3K Total
Hi, versuche mal
...läuft bei mir

Gruß R
Re: Makro funktioniert nicht mehr nach Update
Verfasst: Do 12. Nov 2015, 00:10
von Rentner Heinz
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
Re: Makro funktioniert nicht mehr nach Update
Verfasst: Do 12. Nov 2015, 08:27
von gogo
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.
Re: Makro funktioniert nicht mehr nach Update
Verfasst: Do 12. Nov 2015, 10:12
von pingpong
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
Re: Makro funktioniert nicht mehr nach Update
Verfasst: Do 12. Nov 2015, 12:06
von gogo
wäre der nächste Schritt gewesen
ersetze die Print's durch
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
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()
Re: Makro funktioniert nicht mehr nach Update
Verfasst: Do 12. Nov 2015, 20:14
von Rentner Heinz
Problem erledigt (wait 500 bei Zeilen 3 und 5 war bei mir die Lösung)
Dank an alle Mitwirkenden.
Rentner Heinz
Re: Makro funktioniert nicht mehr nach Update
Verfasst: Fr 13. Nov 2015, 07:02
von pingpong
Jaaa! Erledigt.
HB (habe)

jetzt 250 ms eingesetzt bei 3 und 5, alles funzt bestens.
Vielen Dank an alle!
Fritz
Re: Makro funktioniert nicht mehr nach Update
Verfasst: Fr 13. Nov 2015, 08:38
von gogo
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...