BITTE helfen Sie uns HEUTE mit einer SPENDE
Helfen Sie das LibreOffice Forum zu erhalten!

❤️ DANKE >><< DANKE ❤️

> KEINE WERBUNG FÜR REGISTRIERTE BENUTZER!<
Ihre Spende wird für die Deckung der laufenden Kosten sowie den Erhalt und Ausbau 🌱 des LibreOffice Forums verwendet.
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

Libreoffice 6.3 langsamer als 5.2?

Base ermöglicht es Ihnen, Ihre Daten in einer Datenbank direkt mit LibreOffice zu bearbeiten.
Freischreiber
Beiträge: 755
Registriert: Fr 28. Mär 2014, 10:41

Libreoffice 6.3 langsamer als 5.2?

Beitrag von Freischreiber » Mo 8. Jun 2020, 17:21

Hallo!

Gerade mußte ich ein Makro abändern, da es unter Libreoffice 6.3 zu einer Fehlermeldung kam.
Das Problem hatte ich schon mal: https://www.libreoffice-forum.de/viewto ... 898#p50220

Damals half das Einsetzen eines WAIT(100), um die Fehlermeldung "Fehler in der Funktionsfolge." zu vermeiden.
Daraus mußte ich jetzt ein WAIT(1000) machen, was den Aufruf eines neuen leeren Auftragsformulars doch sehr verlangsamt.

Kennt jemand das Problem und/oder weiß, wie man es auf schnellerem Weg vermeiden kann?

Das Makro lautet jetzt:

Code: Alles auswählen

Sub Neuauftrag(oEvent as object)
	oformAuftraege = oEvent.Source.Model.Parent
	oFormAuftrag = ThisDatabaseDocument.getformdocuments.GetByName("f-Auftrag")
	oFormAuftrag.open
	oFormAuftrag = oFormAuftrag.Component.drawpage.forms(0)
	Speicherfrage(oFormAuftrag)
	Wait(1000) 'Damit das Formular soweit ist, sonst kommt Fehler "Fehler in der Funktionsfolge"
	oFormAuftrag.Filter = "ANr = '1000'" 'Scheinheilige Filterung, damit kein oFormAuftrag.Last() vor dem MoveToInsertRow() gebraucht wird.
	oFormAuftrag.reload
	'oFormAuftrag.Last() 'Umgeht den Bug https://bugs.documentfoundation.org/show_bug.cgi?id=90088
	oFormAuftrag.MoveToInsertRow() 'erst nach Sprung zum letzten Datensatz kann neuer Datensatz angelegt werden.
End Sub
Viele Grüße
Freischreiber
Freischreiber nutzt seit 6/2023 LibreOffice Version: 7.2.7.2 (x64) unter Windows 10 und SplitDB mit HSQL 2.7.2.

RobertG
Beiträge: 2732
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Libreoffice 6.3 langsamer als 5.2?

Beitrag von RobertG » Mo 8. Jun 2020, 17:37

Hallo Freischreiber,

wenn ein Wait(1000) den Aufruf sehr verlangsamt, dann ist da etwas faul. Das ist ja lediglich eine Sekunde.
Was ist denn das für eine ominöse "Speicherfrage" direkt vor dem Wait? Was sind das anschließend für Workarounds, bevor Du zu einem neuen Eintrag kommen willst?

Gruß

Robert
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare

Pit Zyclade
Beiträge: 2674
Registriert: Mo 12. Nov 2012, 16:59

Re: Libreoffice 6.3 langsamer als 5.2?

Beitrag von Pit Zyclade » Mo 8. Jun 2020, 19:04

Ich bin ja taub (auf diesem Gebiet), aber wenn wait(100) nicht geht, warum dann wait(1000) ??? Das ist ja das 10fache.
Hast du denn jeden Stufen-Zwischenwert geprüft ??? Oder nur auf den hohlen Bauch geklopft?
LO 7.5.8.2 (X86_64) / AOO 4.1.14 / Windows 11 64bit
Problem gelöst? Dann bitte im Betreff der ersten Nachricht [gelöst] voranstellen.

Freischreiber
Beiträge: 755
Registriert: Fr 28. Mär 2014, 10:41

Re: Libreoffice 6.3 langsamer als 5.2?

Beitrag von Freischreiber » Di 9. Jun 2020, 09:00

Hallo Robert,

das Speichern-Makro schaut, ob in dem zu öffnenden Formular noch ein anderer Auftrag offen ist, bei dem vor dem Öffnen eines neuen Datensatzes noch Änderungen gespeichert werden müssen:

Code: Alles auswählen

Sub Speicherfrage(oFormSpeichern)
   DIM intFrage As Integer
   with oFormSpeichern 
         if .ismodified() then
            intFrage = MsgBox("Der angezeigte Datensatz wurde geändert. Änderungen speichern?", MB_ICONQUESTION + MB_YESNO + MB_DEFBUTTON1, "Makro BuchungAuftragsFormular")
         'MB_DEFBUTTON1 macht das Ja zur vorgeschlagenen Antwort.
               if intFrage = IDYES then
                  if .isnew() then
                     .insertrow
                     else
                     .updaterow
                 end if
               end if
         end if
   end with
End Sub
Wenn du mit ominösen Workarounds das .filter und das .reload meinst, die kann man auch rauslöschen, und der Fehler bleibt. Ich weiß nicht mehr, warum ich das ergänzt hatte ggü. deinem Originalmakro.

Das Makro lief so seit langem völlig problemlos. Ohne daß ich daran etwas geändert hätte, kommt es unter LO 6.3 plötzlich zu dem Fehler.

@Pit
Nein, ich habe nicht jeden Zwischenwert ausprobiert. Für mich ist die Tatsache signifikant, daß 100ms nicht mehr reichen. 500ms auch nicht. Anders ausgedrückt: Wie dick die Beule ist, interessiert mich nicht so sehr. Sondern mehr: woher kommt der Hammer?

Viele Grüße
Freischreiber
Freischreiber nutzt seit 6/2023 LibreOffice Version: 7.2.7.2 (x64) unter Windows 10 und SplitDB mit HSQL 2.7.2.

RobertG
Beiträge: 2732
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Libreoffice 6.3 langsamer als 5.2?

Beitrag von RobertG » Di 9. Jun 2020, 09:58

Hallo Freischreiber,

was ich zuerst ändern würde ist die Bezeichnung der Variablen. Das zieht jedem, der nicht mit Basic arbeitet, die Schuhe aus, wenn Du
- oformAuftraege ausliest, ohne sie weiter zu gebrauchen
- oFormAuftrag erst einmal dem Writer-Formular innerhalb von Base zuweist (getFormDocuments) und anschließend dann
- oFormAuftrag das Formular auf der Drawpage meinst.

Danach würde ich den Filter und den Reload raus werfen. Du willst doch schließlich nur einen neuen Datensatz einfügen, oder? Dann natürlich den Sprung nach last rein - wegen des benannten Bugs.

Wann genau tauchen denn die Probleme au: Wenn Du eine Speicherabfrage hast oder ohne diese Abfrage? Vielleicht wäre es sinnvoll, das Ganze zu einer Funktion mit einem Rückgabewert zu machen. Solange der nicht erreicht ist wird nicht weiter fortgefahren ...)

Gruß

Robert
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare

Freischreiber
Beiträge: 755
Registriert: Fr 28. Mär 2014, 10:41

Re: Libreoffice 6.3 langsamer als 5.2?

Beitrag von Freischreiber » Di 9. Jun 2020, 11:23

Hallo Robert,
- oformAuftraege ausliest, ohne sie weiter zu gebrauchen
Die Zeile hab ich gelöscht. Das verstehe ich noch. Keine Ahnung, wo die herkam.
- oFormAuftrag erst einmal dem Writer-Formular innerhalb von Base zuweist (getFormDocuments) und anschließend dann
- oFormAuftrag das Formular auf der Drawpage meinst.
Die sind offenbar beide nötig, jedenfalls kann ich keine davon löschen, ohne einen neuen Fehler zu bekommen.
Wann genau tauchen denn die Probleme au: Wenn Du eine Speicherabfrage hast oder ohne diese Abfrage?
Wenn die Abfrage anspringt, weil Änderungen da sind, kommt ein anderer Fehler: "BASIC-Laufzeitfehler.
Es ist eine Ausnahme aufgetreten
Type: com.sun.star.sdbc.SQLException
Message: Zeilen vor der ersten beziehungsweise nach der letzten Zeile haben kein Lesezeichen.."

Wenn sie nicht anspringt, der Ausgangsfehler ("Fehler in der Funktionsfolge")

Viele Grüße
Freischreiber
Freischreiber nutzt seit 6/2023 LibreOffice Version: 7.2.7.2 (x64) unter Windows 10 und SplitDB mit HSQL 2.7.2.

RobertG
Beiträge: 2732
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Libreoffice 6.3 langsamer als 5.2?

Beitrag von RobertG » Di 9. Jun 2020, 16:57

Zu oFormAuftrag: Sicher brauchst Du die beide. Aber beim zweiten Zugriff handelt es sich um eine völlig anderes Ding als beim ersten Zugriff. Deswegen haätte ich solch eine Konstruktion nie geschrieben:

Code: Alles auswählen

oFormAuftrag = oFormAuftrag.Component.drawpage.forms(0)
Das wäre dann so etwas wie

Code: Alles auswählen

oMainForm = oFormAuftrag.Component.drawpage.forms(0)
... und wo ich schon gerade an dieser Stelle bin: Du greifst blind das erste Formular aus der Writeroberfläche. Das kannst Du Dir leisten, wenn Du nur ein Formular ohne Unterformular o.ä. hast. Mir scheint aber schon da der Fehler zu liegen, weil Du ja eine Fehlermeldung produzierst, sobald zurückgegeben wird, dass das Formular verändert wurde.

Ohne eine richtige Beispieldatei lässt sich für mich da nicht viel viel mehr draus schließen. Ich würde jedenfalls den ersten Fehler auch zuerst angehen - und das ist der, der bei

Code: Alles auswählen

if .ismodified() then
auftaucht.

Gruß

Robert
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare

Freischreiber
Beiträge: 755
Registriert: Fr 28. Mär 2014, 10:41

Re: Libreoffice 6.3 langsamer als 5.2?

Beitrag von Freischreiber » Di 9. Jun 2020, 17:59

Hallo Robert,

was ist daran falsch? Darf nicht zweimal dieselbe Variable benutzt werden? Die erste Zeile öffnet das Formulardokument, die zweite - tut was eigentlich?

In dem zu öffnenden Formular gibt es laut Formularnavigator vier MainForms - aber die haben wohl mit deiner Variable oMainForm erstmal nichts zu tun, oder?

Ich hab jetzt mal in der zweiten Zeile und für das Last und MoveToInsertRow den Variablennamen oMainForm eingeführt, es bleibt aber dabei, daß ohne Wait(1000) eine Fehlermeldung kommt. Von der Speicherfrage ganz abgesehen.

Und wie geht man einen Fehler an, zu dem man nicht einmal in Google einen Treffer findet? ""BASIC-Laufzeitfehler.
Es ist eine Ausnahme aufgetreten
Type: com.sun.star.sdbc.SQLException
Message: Zeilen vor der ersten beziehungsweise nach der letzten Zeile haben kein Lesezeichen.."

Ist es ein Problem, daß diese Speicherfrage ausgelagert ist in ein eigenes Makro?

Viele Grüße
Freischreiber
Freischreiber nutzt seit 6/2023 LibreOffice Version: 7.2.7.2 (x64) unter Windows 10 und SplitDB mit HSQL 2.7.2.

RobertG
Beiträge: 2732
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Libreoffice 6.3 langsamer als 5.2?

Beitrag von RobertG » Di 9. Jun 2020, 20:20

Hallo Freischreiber,

den gleichen Variablennamen für unterschiedliche Dinge zu nutzen lässt Basic zu. Es trägt aber natürlich zur Verwirrung bei, wenn Du anfangs das Writerdokument und dann das Formular in diesem Writerdokument damit meinst.

Jetzt hast Du 4 Formulare in Deinem Formulardokument nebeneinander liegen, die auch noch alle den gleichen Namen haben? Da kannst Du doch gar nicht mehr raus bekommen, welches Formular denn nun die Nummer '0' ist, die Du da hast - es sei denn mit einem Tool wie xray. Ich würde die Formulare mit unterschiedlichen Namen benennen und dann den Code anpassen:

Code: Alles auswählen

oMainForm = oFormAuftrag.Component.drawpage.forms.getByName("MeinMainForm")
Dann weißt Du wenigstens, in welchem Formular denn gegebenenfalls ein Fehler auftritt.

Gruß

Robert
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare

gogo
Beiträge: 1072
Registriert: Sa 5. Feb 2011, 19:07

Re: Libreoffice 6.3 langsamer als 5.2?

Beitrag von gogo » Do 18. Jun 2020, 10:23

"Fehler in der Funktionsfolge" kommt vermutlich "nicht immer". Wo's sicher kommt ist, wenn Du einen neuen Datensatz hast und Du auf "Nein" klickst. Dann passiert in der "SUB Speicherfrage" nämlich nichts (obwohl .ismodified()=true) und "oFormAuftrag.reload" auf einen nicht existierenden Datensatz verursacht den Fehler bzw. .MoveToInsertRow() funktioniert auch nicht immer ...

Mach' aus der "SUB Speicherfrage" eine "FUNCTION Speicherfrage" mit 2 möglichen Rückgabewerten und werte diese dann in der "Sub Neuauftrag" aus. z.B.:

Code: Alles auswählen

sub Neuauftrag(oEvent as object)
	...
	if Speicherfrage(oFormAuftrag) <> "###OK###" THEN EXIT SUB 'oFormAuftrag bleibt da geöffnet!!!
	...
end sub

FUNCTION Speicherfrage
	Speicherfrage="###FEHLER###"
	...
		if intFrage = IDYES then
			if .isnew() then
				.insertrow
			else
				.updaterow
			end if
			Speicherfrage="###OK###"
		end if
        ...
END FUNCTION
Das Wait entfällt dann, da die sub sowieso auf das Ende der function wartet...
Zuletzt geändert von gogo am Do 18. Jun 2020, 10:52, insgesamt 2-mal geändert.
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 nutzen:


Bitte beteiligen Sie sich mit 7 Euro pro Monat und helfen uns bei unserem Budget für das Jahr 2024.
Einfach per Kreditkarte oder PayPal.
Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet.

❤️ Vielen lieben Dank für Ihre Unterstützung ❤️

Antworten