🙏 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. 🤗

Sub bei Datensatzwechsel

Base ermöglicht es Ihnen, Ihre Daten in einer Datenbank direkt mit LibreOffice zu bearbeiten.
Antworten
chemnitzer
Beiträge: 43
Registriert: Di 20. Jan 2015, 18:56
Wohnort: Hungen

Sub bei Datensatzwechsel

Beitrag von chemnitzer » Sa 30. Okt 2021, 23:40

Hallo
ich habe wieder Fragen zu einem Formular. Eine Mariadb mit einer Tabelle wo Daten drin sind wird im Formular angezeigt -> das ist OK. Ordne ich dem Formular für den Datensatzwechsel davor oder danach eine Sub zu. z.B.:

Code: Alles auswählen

Sub vorher
	msgbox "In Sub vorher"
End Sub

Wechsel ich jetzt den Datensatz so wird die Nachricht auch angezeigt, ABER der Satzzeiger läuft durch die ganze Tabelle durch. Zeigt auch alle Datensätze der Reihe nach an. Warum wird automatisch immer zum nächsten Datensatz gegangen und wie kann ich das STOPPEN ?
Im "echten" Sub stehen noch andere Anweisungen deshalb das nur als Test.
Verwendete LO Version 7.1.6.2
MfG
Roland

RobertG
* LO-Experte *
Beiträge: 2884
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Sub bei Datensatzwechsel

Beitrag von RobertG » So 31. Okt 2021, 09:22

Hallo Roland,

bei der internen HSQLDB kann ich da den Fehler nicht nachstellen.
Bei MariaDB mit direkter Verbindung (also nicht JDBC oder ODBC) stelle ich erst einmal fest: Da werden zwei Ereignisse weiter gegeben. Mit dem folgenden Makro kann ich die auslösenden Ereignisse der Implementation zuordnen und lediglich ein Ereignis heraus nehmen.

Code: Alles auswählen

SUB Vorher(oEvent AS OBJECT)
	IF InStr(oEvent.Source.ImplementationName, "ODatabaseForm") THEN
		MSGBOX oEvent.Source.ImplementationName
	END IF
END SUB
Trotzdem springt der Cursor jeweils um 2 Datensätze weiter. Das heißt, dass das Ereignis eben mit dem Implementationsnamen tatsächlich doppelt abläuft.

Das Ganze scheint ein Zeitproblem zu sein. Die Reaktion der Datenbank dauert wohl länger als der Ablauf des Makros. Wenn ich in die Prozedur keine Messagebox einbaue, dann erfolgt der Sprung von einem Datensatz zum nächsten. Wenn ich nach der Messagebox ein

Code: Alles auswählen

WAIT 1000
, also eine Wartezeit von 1 Sekunde einbaue, dann funktioniert das Ganze auch ohne Wiederholungen.

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

chemnitzer
Beiträge: 43
Registriert: Di 20. Jan 2015, 18:56
Wohnort: Hungen

Re: Sub bei Datensatzwechsel

Beitrag von chemnitzer » So 31. Okt 2021, 16:21

Hallo Robert
erst einmal Danke für deine Mühe. Ich setze jetzt mal meinen Code rein und dann das Problem.

Code: Alles auswählen

Sub Test_Wechsel(oEvent AS OBJECT)
	Dim oDoc As Object
	Dim oDrawpage As Object
	Dim oForm As Object
	Dim obfsPfad As Object
	Dim oPfad As Object
	Dim oName As Object
	Dim otxtPfad As Object
	Dim otxtName As Object
	
	oDoc = thisComponent
	oDrawpage = oDoc.Drawpage
	oForm = oDrawpage.Forms.getByName("MainForm")
	otxtPfad = oForm.getByName("txt_Pfad")
	otxtName = oForm.getByName("txt_Name")
	obfsPfad = oForm.getByName("bsf_Komplett")				'Label wo der modifizierte Pfad für die grafik steht
	
	IF InStr(oEvent.Source.ImplementationName, "ODatabaseForm") THEN
		MSGBOX oEvent.Source.ImplementationName
		wait(5000)
		obfsPfad.Label = otxtPfad.Text & " | " & otxtName.Text
	END IF
End Sub
Wenn ich den Datensatzzeiger durch Klicken in der Tabelle weiter setze, wird das "obfsPfad.Label" entsprechend geändert
(nach Datensatzwechsel). Die Tabelle hat unten die Funktionen (first,back,next,last), wenn ich hier auf "next" gehe läuft das ganze bis zum letzten Datensatz +1 durch. Kann man das auch Abfangen, dass nur ein Satz weitergegangen wird ?

Gruss
Roland

PS: Hatte keine DB-Sicherung und musste das neu zusammenbauen.

RobertG
* LO-Experte *
Beiträge: 2884
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Sub bei Datensatzwechsel

Beitrag von RobertG » So 31. Okt 2021, 19:41

Hallo Roland,

Du hattest bei dem WAIT-Befehl zwei Fehler. Zum einen sitzt die Angabe der Zeit bei Dir in einer Klammer, zum anderen in der inneren IF-Bedingung.

Code: Alles auswählen

Sub Test_Wechsel(oEvent AS OBJECT)
	Dim oForm As Object
	Dim obfsPfad As Object
	Dim oPfad As Object
	Dim oName As Object
	Dim otxtPfad As Object
	Dim otxtName As Object
	
	oForm = oEvent.Source
	otxtPfad = oForm.getByName("txt_Pfad")
	otxtName = oForm.getByName("txt_Name")
	obfsPfad = oForm.getByName("bsf_Komplett")				'Label wo der modifizierte Pfad für die grafik steht
	
	IF InStr(oEvent.Source.ImplementationName, "ODatabaseForm") THEN
		MSGBOX oEvent.Source.ImplementationName
		obfsPfad.Label = otxtPfad.Text & " | " & otxtName.Text
	END IF
	wait 1000
End Sub
Ich habe zusätzlich noch den Einstieg raus genommen. Schließlich startest Du das Makro ja durch das Formular, in dem etwas geändert werden soll.

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

chemnitzer
Beiträge: 43
Registriert: Di 20. Jan 2015, 18:56
Wohnort: Hungen

Re: Sub bei Datensatzwechsel

Beitrag von chemnitzer » Di 9. Nov 2021, 19:08

Hallo
Danke für die Korrekturen. Ich habe sie eingepflegt und es funktioniert.
MfG
Roland


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