Seite 1 von 1

Sub bei Datensatzwechsel

Verfasst: Sa 30. Okt 2021, 23:40
von chemnitzer
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

Re: Sub bei Datensatzwechsel

Verfasst: So 31. Okt 2021, 09:22
von RobertG
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

Re: Sub bei Datensatzwechsel

Verfasst: So 31. Okt 2021, 16:21
von chemnitzer
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.

Re: Sub bei Datensatzwechsel

Verfasst: So 31. Okt 2021, 19:41
von RobertG
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

Re: Sub bei Datensatzwechsel

Verfasst: Di 9. Nov 2021, 19:08
von chemnitzer
Hallo
Danke für die Korrekturen. Ich habe sie eingepflegt und es funktioniert.
MfG
Roland