Seite 1 von 1
GELÖST Error Handling
Verfasst: Fr, 02.05.2014 20:45
von WSO
Haallo Zusammen,
ich suche nach Beispielen für ein Error handling für die Feldprüfungen via Makro vor der Verarbeitung (update, delete, insert).
Die Updates der Datenbank für die nach der fehlerfrei durchlaufenen Prüfung soll Base übernehmen.
Falls das Makro Fehler bei der Eingabedatenprüfung feststellt, soll:
der Cursor neu positioniert werden (wie?)
die weitere Veratbeitung durch das Formular (update, delete, inset) soll nicht ausgeführt werden (wie?)
der Fehlertext aus der Fehlertabelle geholt werden (funktioniert)
der varibale Fehlertext per msgbox ausgegeben werden (funktioniert)
Systemfehlermeldungen möchte ich global an/ausschalten können und wenn ausgeschlatet durch eine eigene Meldung ersetzen,
z.B.: ("Systemfehler in Modul: " +modul + "Die aktuelle Verarbeitung wurde abgrbrochen, bitte wenden Sie sich an den Systemadministrator"
Danke für alle Anregungen,
Wolfram
Re: Error Handling
Verfasst: Fr, 02.05.2014 21:20
von RobertG
Hallo Wolfram,
zuerst einmal musst Du beim Formular an die Eigenschaft "Vor der Datensatzaktion" gehen.
Dann ist Dir vielleicht dieser Thread nützlich, in dem ich auch nach etwas gesucht habe, wie ich Fehler abfangen kann:
viewtopic.php?f=8&t=63400#p242354
Gruß
Robert
Re: Error Handling
Verfasst: Sa, 03.05.2014 01:14
von WSO
Hi Robert,
Hmm, vielleicht habe ich mich falsch ausgedrückt.
In dem Thread war ich zuvor schon drin um zu lernen, dass der ErrorListneter das nicht kann.
Ein Makro zue Eingabedatenprüfung, ist ja irgentwann mit der Fehlerpüfung durch, gibt z.B. die Fehlereldung über ungültige Dateneingaben aus,
der Anwender drückt ok und schon habe ich den Schrott in der Datenbank.
Es geht hier nicht um Mussfelder, sondern um kontextsensitive Abhängigkeiten zwischen den Datenfeldern.
Praxisbeispiel:
Feld "Summe_bisheriger_Umsatz"
Feld "Kauf_auf_Rechnug" (J/N)
Jetzt soll die Anwendung verhindern, dass ein Kauf auf Rechnung durc hgeführt bwird, wenn der bisherige Umsatz < x ist.
Es muss einen Befehl geben, der das Formular zwingt die weitere Verarbeitung (die Datensatzaktion) abzubrechen und mit dem Einlesen der Formulardaten erneut zu beginnen,
sonst machen Fehlerprüfungen doch keinen Sinn.
Genau diesen Befehl suche ich, in der Doku konnte ich dazu nichts finden.
Macht sonst keiner sowas?
Gruss,
Wolfram
Re: Error Handling
Verfasst: Sa, 03.05.2014 09:21
von RobertG
Hallo Wolfram,
genau das habe ich an der entsprechenden Stelle doch geschrieben - aber vielleicht klappt das ja bei Dir nicht:
Mit oForm.MoveToCurrentRow verhindere ich, dass ein Datensatz abgespeichert wird, wenn er neu erstellt wird und noch Eingaben erforderlich sind.
Gruß
Robert
Re: Error Handling
Verfasst: Sa, 03.05.2014 12:48
von WSO
ja, und wie ist das update und delete von einen Datensatz?
Gruss
Wolfram (sonnig 25 Grad)
Re: Error Handling
Verfasst: Sa, 03.05.2014 15:20
von WSO
geht leider nicht wie erwartet.
habe diese Makro beim als Ereignis "vor der Datensatzaktion" eigehängt.
Bei Insert wird der update verhindert, allerdings wird die Fehlermeldung zweimal ausgegeben.
Bei Datensatzänderung oder Löschung geht es nicht.
Nach zweimaliger Bestätigung der msgbox wir die Datensatzverarbeitung durchgeführt.
Könnte natürlich die gesamte Datenmanipulation in Makros verlegen, das wäre aber ein zu aufwendiger workaround.
Code: Alles auswählen
sub xDEL
DIM oDoc AS OBJECT
DIM oDrawpage AS OBJECT
DIM oBearbForm AS OBJECT
oDoc=thisComponent
oDrawpage=oDoc.drawpage
oBearbForm = oDoc.drawpage.forms.getbyindex(0)
msgbox ("Abbruch wegen Userfehler")
oBearbForm.MoveToCurrentRow
end sub
Re: Error Handling
Verfasst: Sa, 03.05.2014 18:00
von DPunch
Servus
Du könntest z.B. eine Funktion wie die folgende an das Formularereignis "Vor der Datensatzaktion" hängen
Code: Alles auswählen
Function Validate as Boolean
Validate = True
REM ***
REM Auf Fehler testen
REM ***
If Fehler Then
MsgBox "Es ist ein Fehler aufgetreten (...)"
Validate = False
End If
End Function
Re: Error Handling
Verfasst: Sa, 03.05.2014 20:23
von WSO
genial einfach und effektiv!
Vielen, vielen Dank,
Wolfram