prüfen vor dem speichern
Moderator: Moderatoren
prüfen vor dem speichern
Hallo,
ich möchte die erfassten Daten vor dem speichern auf logische Richtigkeit prüfen.
Idealerweise würde ich mich gerne auf Formularebene beim Ereignis "vor der Datensatzaktion" einklinken und dabei irgendwie verhindern, daß die Daten gespeichert werden, wenn sie nicht in Ordnung sind.
Habe schon eine Menge gegoogelt, bin aber nicht fündig geworden.
Hat jemand eine Idee dazu?
Danke für Eure Hilfe im Voraus.
Gruß eBayer
ich möchte die erfassten Daten vor dem speichern auf logische Richtigkeit prüfen.
Idealerweise würde ich mich gerne auf Formularebene beim Ereignis "vor der Datensatzaktion" einklinken und dabei irgendwie verhindern, daß die Daten gespeichert werden, wenn sie nicht in Ordnung sind.
Habe schon eine Menge gegoogelt, bin aber nicht fündig geworden.
Hat jemand eine Idee dazu?
Danke für Eure Hilfe im Voraus.
Gruß eBayer
Intel(R) Core(TM)2 Quad CPU Q8200 @ 2.33GHz mit 4 GB Memory (3,2 GB aktiv)
Vista Home Premium 32 Bit
openOffice 3.1.1 mit Sun Report Builder 1.1.0 und MySql 5.1
Hauptinteresse ooBase seit 12.2008
Vista Home Premium 32 Bit
openOffice 3.1.1 mit Sun Report Builder 1.1.0 und MySql 5.1
Hauptinteresse ooBase seit 12.2008
Re: prüfen vor dem speichern
Hallo eBayer,
mir fällt dazu folgendes ein: du könntest ein Flag setzen und evtl. nach dem Verlassen eines Eingabefeldes (Fokusverlust) die Richtigkeit prüfen und das Flag sowie eine Fehlermeldung anpassen, wenn die Eingabe nicht richtig ist. Das müsste dann vor dem Speichern abgefragt werden. Na ja, so ganz sicher bin ich mir da nicht, ob und wie genau das umgesetzt werden kann.
Gruss
Bert
mir fällt dazu folgendes ein: du könntest ein Flag setzen und evtl. nach dem Verlassen eines Eingabefeldes (Fokusverlust) die Richtigkeit prüfen und das Flag sowie eine Fehlermeldung anpassen, wenn die Eingabe nicht richtig ist. Das müsste dann vor dem Speichern abgefragt werden. Na ja, so ganz sicher bin ich mir da nicht, ob und wie genau das umgesetzt werden kann.
Gruss
Bert
OpenOffice 3.1.1 unter Debian 5.0 und mit PostgreSQL 8.3
- komma4
- ********
- Beiträge: 5332
- Registriert: Mi, 03.05.2006 23:29
- Wohnort: Chon Buri Thailand Asia
- Kontaktdaten:
Re: prüfen vor dem speichern
Du nutzt schon die Möglichkeiten Eingabe-/Wertebereiche durch die Kontrollelemente festzulegen?eBayer hat geschrieben:Hat jemand eine Idee dazu?
Bei Nutzung einer "richtigen" Datenbank kann ebenfalls einiges eingeschränkt werden (kommt dann aber zu einer eher unschönen [technischen; in englisch ?] Fehlermeldung.
Prüfroutinen "nach Fokusverlust" sind jedenfalls schon mal eine gute Idee.
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Re: prüfen vor dem speichern
Danke für Eure schnellen Antworten.
Das Problem beim prüfen bei Focusverlust ist, daß Abhängigkeiten mit anderen Datenfeldern erst bei weiteren einzugebenden Daten prüfbar sind. Da man in einer Erfassungsmaske aber kreuz und quer klicken kann, geht das nicht. Es bleibt also nur die Prüfung vor dem speichern. Das kann ich natürlich mit einem "speichern" Button realisieren, der per Makro erst prüft und dann ggf. eine Fehlermeldung aufzeigt oder im positiven Fall eben speichert.
Wenn ich aber eine Datensatzauswahl per Tabellenelement habe, kann man sich im Tabellenelement bewegen und automatisch wird ungeprüft gespeichert.
Natürlich habe ich einschränkende Bedingungen bereits in der Datenbank und in den Controls hinterlegt.
Es müsste daher eher eine Funktion sein, die über das Ereignis "recsave" selbst aufgerufen wird und die dann ggf. das speichern unterdrückt. Ich könnte mir vorstellen, daß sowas auf der "UNO" - Ebene machbar sein müsste.
Gruß eBayer
Das Problem beim prüfen bei Focusverlust ist, daß Abhängigkeiten mit anderen Datenfeldern erst bei weiteren einzugebenden Daten prüfbar sind. Da man in einer Erfassungsmaske aber kreuz und quer klicken kann, geht das nicht. Es bleibt also nur die Prüfung vor dem speichern. Das kann ich natürlich mit einem "speichern" Button realisieren, der per Makro erst prüft und dann ggf. eine Fehlermeldung aufzeigt oder im positiven Fall eben speichert.
Wenn ich aber eine Datensatzauswahl per Tabellenelement habe, kann man sich im Tabellenelement bewegen und automatisch wird ungeprüft gespeichert.
Natürlich habe ich einschränkende Bedingungen bereits in der Datenbank und in den Controls hinterlegt.
Es müsste daher eher eine Funktion sein, die über das Ereignis "recsave" selbst aufgerufen wird und die dann ggf. das speichern unterdrückt. Ich könnte mir vorstellen, daß sowas auf der "UNO" - Ebene machbar sein müsste.
Gruß eBayer
Intel(R) Core(TM)2 Quad CPU Q8200 @ 2.33GHz mit 4 GB Memory (3,2 GB aktiv)
Vista Home Premium 32 Bit
openOffice 3.1.1 mit Sun Report Builder 1.1.0 und MySql 5.1
Hauptinteresse ooBase seit 12.2008
Vista Home Premium 32 Bit
openOffice 3.1.1 mit Sun Report Builder 1.1.0 und MySql 5.1
Hauptinteresse ooBase seit 12.2008
- komma4
- ********
- Beiträge: 5332
- Registriert: Mi, 03.05.2006 23:29
- Wohnort: Chon Buri Thailand Asia
- Kontaktdaten:
Re: prüfen vor dem speichern
Natürlich geht das - ist aber mehr Arbeit.eBayer hat geschrieben:Da man in einer Erfassungsmaske aber kreuz und quer klicken kann, geht das nicht.
Erstelle eine "zentrale" Prüfroutine (die nach jedem Fokusverlust aufgerufen wird) und prüfe:
Code: Alles auswählen
If Kontrollfeld1.String <> "" AND
Kontrollfeld2.Value > 0 AND
Kontrollfeld3.SelectedItem > -1 ...
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Re: prüfen vor dem speichern
Hallo
Die "händische" Funktion für "das erst prüfen und dann speichern" heiß "explicit commit" , und das gibt es nicht unter OO.o.
Unter HSQL selbst kann das eine Eigenschaft der Tabelle sein, die Entwickler bei Sun haben bei der Umsetzung in OO.o darauf leider verzichtet.
Ärgerlicherweise ist die "zyklus"-Geschichte in den Formularen ebenfalls in OO.o-Vers. 3. .. geändert worden, inzwischen kann kann man das Auto-commit (über die Navigations-Button bzw. über das letzte Feld der TAB-Reihenfolge) nicht mehr abstellen. Wie schade das alles.
>komma4
Genau deshalb würde mich mal die Erklärung zu dem Satz "schalte erst (dann...) den SPEICHERN-button frei" interessieren.
Wie geht das?
Martin
Die "händische" Funktion für "das erst prüfen und dann speichern" heiß "explicit commit" , und das gibt es nicht unter OO.o.
Unter HSQL selbst kann das eine Eigenschaft der Tabelle sein, die Entwickler bei Sun haben bei der Umsetzung in OO.o darauf leider verzichtet.
Ärgerlicherweise ist die "zyklus"-Geschichte in den Formularen ebenfalls in OO.o-Vers. 3. .. geändert worden, inzwischen kann kann man das Auto-commit (über die Navigations-Button bzw. über das letzte Feld der TAB-Reihenfolge) nicht mehr abstellen. Wie schade das alles.
>komma4
Genau deshalb würde mich mal die Erklärung zu dem Satz "schalte erst (dann...) den SPEICHERN-button frei" interessieren.
Wie geht das?
Martin
- komma4
- ********
- Beiträge: 5332
- Registriert: Mi, 03.05.2006 23:29
- Wohnort: Chon Buri Thailand Asia
- Kontaktdaten:
Re: prüfen vor dem speichern
Wenn eine Prüfung der Eingaben (logischer Zusammenhang) gewünscht ist, dann muss ein Speichern durch Datensatzwechsel (Navigationsleiste; TAB-Sprung) verhindert werden.
Umsetzen würde ich das durch die erwähnte Prüfroutine, die im Fall "fehlerhafter" oder fehlender Eingaben eine entspr. Meldung ausgibt und den Cursor positioniert (sinnigerweise beim Verlassen des letzten Eingabefeldes)
Das Speichern des Datensatzes erfolgt dann über eine Schaltfläche, die erst bei vollständigen und korrekten EIngaben aktiv wird.
On das konkret mit BASE-Formularen umzusetzen ist ... k.A.: ich bin ein Fossil aus der EDV - 3270er-Eingabemasken, SDF, ... oder eben durch Code gesteuerte Dialoge (bei OOo).
Umsetzen würde ich das durch die erwähnte Prüfroutine, die im Fall "fehlerhafter" oder fehlender Eingaben eine entspr. Meldung ausgibt und den Cursor positioniert (sinnigerweise beim Verlassen des letzten Eingabefeldes)
Das Speichern des Datensatzes erfolgt dann über eine Schaltfläche, die erst bei vollständigen und korrekten EIngaben aktiv wird.
On das konkret mit BASE-Formularen umzusetzen ist ... k.A.: ich bin ein Fossil aus der EDV - 3270er-Eingabemasken, SDF, ... oder eben durch Code gesteuerte Dialoge (bei OOo).
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Re: prüfen vor dem speichern
Hallo Komma,
ES GIBT IN EINEM FORMULAR KEIN LETZTES EINGABEFELD!!
Mit der Maus kannst Du klicken wohin Du willst...... spätestens beim schließen des Formulars, kannst Du jede händische Prüfroutine aushebeln.
Dann wird nämlich bei noch nicht gespeicherten Daten gefragt, ob die Änderungen verworfen oder akzeptiert werden sollen.
Trotzdem Danke für den Versuch der Klärung.
Gruß eBayer
ES GIBT IN EINEM FORMULAR KEIN LETZTES EINGABEFELD!!
Mit der Maus kannst Du klicken wohin Du willst...... spätestens beim schließen des Formulars, kannst Du jede händische Prüfroutine aushebeln.
Dann wird nämlich bei noch nicht gespeicherten Daten gefragt, ob die Änderungen verworfen oder akzeptiert werden sollen.
Trotzdem Danke für den Versuch der Klärung.
Gruß eBayer
Intel(R) Core(TM)2 Quad CPU Q8200 @ 2.33GHz mit 4 GB Memory (3,2 GB aktiv)
Vista Home Premium 32 Bit
openOffice 3.1.1 mit Sun Report Builder 1.1.0 und MySql 5.1
Hauptinteresse ooBase seit 12.2008
Vista Home Premium 32 Bit
openOffice 3.1.1 mit Sun Report Builder 1.1.0 und MySql 5.1
Hauptinteresse ooBase seit 12.2008
- komma4
- ********
- Beiträge: 5332
- Registriert: Mi, 03.05.2006 23:29
- Wohnort: Chon Buri Thailand Asia
- Kontaktdaten:
Re: prüfen vor dem speichern
ich meine das letzte logische Eingabefeld (in der Reihenfolge), wenn der Cursor dieses verlässt wird (bei meinen Test-Formularen) der Datensatz gespeichert.eBayer hat geschrieben:ES GIBT IN EINEM FORMULAR KEIN LETZTES EINGABEFELD!!
Da muss die Routine ansetzen - egal, wo vorher mit der Maus geklickt wurde (auch mir als Fossil ist das Gerät bekannt

Die Anmerkungen von Martin (explicit commit; auto commit) scheinen mir da schon eher geeignet, die von mir vorgeschlagene Herangehensweise als nicht praktikabel zu bewerten.
Dann bleiben aber immer noch Varianten einer Lösung:
Schreiben dieser Eingaben nicht in die Zieltabelle, sondern in eine Prüftabelle (Übernahme in das Ziel erst nach erfolgter Prüfung, bspw. beim Schliessen des BASE-Dokuments).
Oder eben die Nutzung von Dialogen .. da kannste denn machen, was Du willst (und was mit BASIC&Co. so machbar ist).
Je nachdem, was Dir wichtig ist: "einfache" Handhabung - oder Datenkonsistenz nach Deinen Vorgaben.
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Re: prüfen vor dem speichern
Hallo Komma,
ich sagte ja schon Danke......
Bin nach mehr als 30 Jahren SW-Entwicklung ebenso ein Fossil, will mich aber trotzdem nicht zufriedengeben.
Ich werde weiter forschen und halte Dich auf dem laufenden.
Gruß eBayer
ich sagte ja schon Danke......
Bin nach mehr als 30 Jahren SW-Entwicklung ebenso ein Fossil, will mich aber trotzdem nicht zufriedengeben.
Ich werde weiter forschen und halte Dich auf dem laufenden.
Gruß eBayer
Intel(R) Core(TM)2 Quad CPU Q8200 @ 2.33GHz mit 4 GB Memory (3,2 GB aktiv)
Vista Home Premium 32 Bit
openOffice 3.1.1 mit Sun Report Builder 1.1.0 und MySql 5.1
Hauptinteresse ooBase seit 12.2008
Vista Home Premium 32 Bit
openOffice 3.1.1 mit Sun Report Builder 1.1.0 und MySql 5.1
Hauptinteresse ooBase seit 12.2008
- komma4
- ********
- Beiträge: 5332
- Registriert: Mi, 03.05.2006 23:29
- Wohnort: Chon Buri Thailand Asia
- Kontaktdaten:
Re: prüfen vor dem speichern
Na, dann ... als ein so alter Kämpfer mit "Hauptinteresse BASE seit Dezember 2008" kennst Du bestimmt auch das neue englische Forum und Drew Jensen und die anderen dort ansässigen Koryphäen.
Wenn Du dort keine befriedigende Antwort bekommst bleibt dir noch die Mailingliste dev@dba.openoffice.org (auch über Gmane erreichbar)
Wenn Du dort keine befriedigende Antwort bekommst bleibt dir noch die Mailingliste dev@dba.openoffice.org (auch über Gmane erreichbar)
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Re: prüfen vor dem speichern
[quote="eBayer"]
...... spätestens beim schließen des Formulars, kannst Du jede händische Prüfroutine aushebeln.
Dann wird nämlich bei noch nicht gespeicherten Daten gefragt, ob die Änderungen verworfen oder akzeptiert werden sollen.
Trotzdem Danke für den Versuch der Klärung.
Gruß eBayer[/quote]
Hallo eBayer
Es wäre ja schön, wenn es wenigstens SO wäre, da aber die Zyklus-Funktion so geändert wurde, daß beim Übergang von Tab-Reihenfolge Letzter auf Tab-Reihenfolge Erster der aktuelle Datensatz ohne Rückfrage gespeichert wird, hat sich das mit der "Rückfrage" dann schon erledigt.
Wie gesagt, aktuell keine gute Umsetzung, Schade das.
Martin
...... spätestens beim schließen des Formulars, kannst Du jede händische Prüfroutine aushebeln.
Dann wird nämlich bei noch nicht gespeicherten Daten gefragt, ob die Änderungen verworfen oder akzeptiert werden sollen.
Trotzdem Danke für den Versuch der Klärung.
Gruß eBayer[/quote]
Hallo eBayer
Es wäre ja schön, wenn es wenigstens SO wäre, da aber die Zyklus-Funktion so geändert wurde, daß beim Übergang von Tab-Reihenfolge Letzter auf Tab-Reihenfolge Erster der aktuelle Datensatz ohne Rückfrage gespeichert wird, hat sich das mit der "Rückfrage" dann schon erledigt.
Wie gesagt, aktuell keine gute Umsetzung, Schade das.
Martin
-
- ***
- Beiträge: 62
- Registriert: Di, 20.03.2007 11:41
Re: Prüfen vor dem speichern
Hallo eBayer,
leider hatte ich diese Diskussion bisher nicht verfolgt. Spontan fallen mir zwei Dinge dazu ein.
Vor einiger Zeit hatte ich ebenfalls eine Prüfroutine für ein Tabellenkontrollfeld geschrieben. Im Wesentlichen ging es darum, dass in Abhängigkeit von den Eingaben in bestimmten Feldern andere Felder zwingend gefüllt sein mussten. Meine Prüfroutine hängte ich damals an das Ereignis ”Vor dem Datensatzwechsel“, setzte dazu ein entsprechendes Flag und speicherte die aktuelle Zeilennummer. Beim Ereignis ”Nach dem Datensatzwechsel“ fragte ich das Flag ab. Bei fehlenden Eingaben ging ich einfach wieder in die vorhergehende Zeile zurück und gab einen entsprechenden Hinweis aus. Der Anwender war dadurch gezwungen seine fehlenden Eingaben zu ergänzen. Gern hätte ich damals die entsprechenden Felder noch rot gefärbt. Das scheint aber bei einem Tabellenkontrollfeld nicht zu gehen, jedenfalls habe ich damals keine Lösung gefunden.
Falls der eben geschilderte Lösungsansatz in Deinem Fall nicht ausreicht, habe ich noch eine andere, allerdings ungeprüfte, Idee. Könnte man das Problem nicht mit einem Listener, eventuell dem XRowSetApproveListener, lösen. Letztens hatte ich gute Erfahrungen mit dem XConfirmDeleteListener gemacht.
Ich hoffe, ich konnte Dir ein klein wenig helfen
Christiana
leider hatte ich diese Diskussion bisher nicht verfolgt. Spontan fallen mir zwei Dinge dazu ein.
Vor einiger Zeit hatte ich ebenfalls eine Prüfroutine für ein Tabellenkontrollfeld geschrieben. Im Wesentlichen ging es darum, dass in Abhängigkeit von den Eingaben in bestimmten Feldern andere Felder zwingend gefüllt sein mussten. Meine Prüfroutine hängte ich damals an das Ereignis ”Vor dem Datensatzwechsel“, setzte dazu ein entsprechendes Flag und speicherte die aktuelle Zeilennummer. Beim Ereignis ”Nach dem Datensatzwechsel“ fragte ich das Flag ab. Bei fehlenden Eingaben ging ich einfach wieder in die vorhergehende Zeile zurück und gab einen entsprechenden Hinweis aus. Der Anwender war dadurch gezwungen seine fehlenden Eingaben zu ergänzen. Gern hätte ich damals die entsprechenden Felder noch rot gefärbt. Das scheint aber bei einem Tabellenkontrollfeld nicht zu gehen, jedenfalls habe ich damals keine Lösung gefunden.
Falls der eben geschilderte Lösungsansatz in Deinem Fall nicht ausreicht, habe ich noch eine andere, allerdings ungeprüfte, Idee. Könnte man das Problem nicht mit einem Listener, eventuell dem XRowSetApproveListener, lösen. Letztens hatte ich gute Erfahrungen mit dem XConfirmDeleteListener gemacht.
Ich hoffe, ich konnte Dir ein klein wenig helfen
Christiana
OOo 3.1 mit WIN XP SP 3 und PostgreSQL 8.2
Re: prüfen vor dem speichern
Hallo,
ich bin nun auch dort angekommen (beim Prüfen meiner Angaben im Formular) und wollte deshalb diesen Thread nochmal aufwärmen und weiter daran arbeiten.
Ich hab in meinem Formular ein Eingabefeld, welches folgendermaßen überprüft werden muss (der eingegebene Wert ist ein String): Es dürfen nur Ziffern drinstehen, keine Buchstaben oder sonstige Zeichen. Es darf keine "0" (Null) am Anfang stehen. Der Wert darf in der Datenbanktabelle nur einmal vergeben sein. Wie kann ich denn ein Eingabefeld in einem Formular überprüfen, ob da nur Ziffern drinstehen? Irgendwie so ähnlich: Feld.Value.isNumber... Ich hab versucht, das mittels X-Ray herauszufinden, aber irgendwie komm ich damit noch nicht so richtig klar. Vielleicht kann mir ja mal wer genaue erklären, wie ich das da rausfinden kann. Ich möchte auf maskierte Felder verzichten, da ich gerne spezielle Fehlermeldungen als Ausgabe verwenden möchte. Auch Regeln direkt in der Datenbank kommen für mich deshalb nicht in Frage.
Gruss
Bert
ich bin nun auch dort angekommen (beim Prüfen meiner Angaben im Formular) und wollte deshalb diesen Thread nochmal aufwärmen und weiter daran arbeiten.
Ich hab in meinem Formular ein Eingabefeld, welches folgendermaßen überprüft werden muss (der eingegebene Wert ist ein String): Es dürfen nur Ziffern drinstehen, keine Buchstaben oder sonstige Zeichen. Es darf keine "0" (Null) am Anfang stehen. Der Wert darf in der Datenbanktabelle nur einmal vergeben sein. Wie kann ich denn ein Eingabefeld in einem Formular überprüfen, ob da nur Ziffern drinstehen? Irgendwie so ähnlich: Feld.Value.isNumber... Ich hab versucht, das mittels X-Ray herauszufinden, aber irgendwie komm ich damit noch nicht so richtig klar. Vielleicht kann mir ja mal wer genaue erklären, wie ich das da rausfinden kann. Ich möchte auf maskierte Felder verzichten, da ich gerne spezielle Fehlermeldungen als Ausgabe verwenden möchte. Auch Regeln direkt in der Datenbank kommen für mich deshalb nicht in Frage.
Gruss
Bert
OpenOffice 3.1.1 unter Debian 5.0 und mit PostgreSQL 8.3