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.:
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
, 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