Re: Fehlerbehandlung in Formularen - wie? (ADP/A03)
From: Gerald Aichholzer (gary_at_sbox.tugraz.at)
Date: 01/11/05
- Next message: Michael Happ: "Re: Umbenennen von Tabellen in Name mit #### als Prefix"
- Previous message: Gerald Aichholzer: "Re: Problem mit (nicht)-editierbarer Sicht (ADP/A03)"
- In reply to: Henry Habermacher [MVP Access]: "Re: Fehlerbehandlung in Formularen - wie? (ADP/A03)"
- Next in thread: Henry Habermacher [MVP Access]: "Re: Fehlerbehandlung in Formularen - wie? (ADP/A03)"
- Reply: Henry Habermacher [MVP Access]: "Re: Fehlerbehandlung in Formularen - wie? (ADP/A03)"
- Messages sorted by: [ date ] [ thread ]
Date: Tue, 11 Jan 2005 14:57:48 +0100
Henry Habermacher [MVP Access] wrote:
>
> "Gerald Aichholzer" <gary@sbox.tugraz.at> wrote in message
> news:41e3b42d@e-post.inode.at...
>
>> wie erstellt man in einem ADP-Projekt die Fehlerbehandlung
>> in einem Formular?
>>
>> Ich gebe mir versuchsweise im Form_Error() den Wert des
>> Parameter DataErr aus, z.B. erhalte ich
>>
>> 3162, wenn ein Pflichtfeld leer gelassen wurde
>> 2627, wenn ein eindeutiger Index verletzt wurde
>>
>> Der erste Fall lässt sich noch recht einfach per VBA im
>> Form_BeforeUpdate() abdecken.
>
>
> Ja, das ist der richtige Ort
>
>> Aber wie komme ich im zweiten Fall auf den Fehler, z.B.
>> wenn es mehrere eindeutige Indices gibt?
>>
>> Ich könnte im Form_BeforeUpdate() eine Prüfung einbauen,
>> aber erstens ist das nicht performant (vor allem, wenn
>> noch einige foreign keys dazukommen) und zweitens ist man
>> in einer Multiuser-Umgebung trotzdem nicht vor Problemen
>> gefeit.
>
>
> Du musst ja nur schauen, ob es bei einem anderen Datensatz diesen Index
> schon gibt und falls ja, den Benutzer darauf aufmerksam machen und
> Cancel = True setzen.
> Selbst in einer Multiuser Umgebung kannst Du davon ausgehen, dass es
> äusserst selten vorkommen wird, dass sich Verarbeitungen überholen.
> Zudem gehe ich davon aus, dass, wenn sonst jemand den Update gemacht
> hat, Du einen Fehler bekommst, dass der Datensatz von anderer Seite
> bereits geändert worden ist (ADP mit MSDE z.B. sollte über den TimeStamp
> dies verifizieren).
>
> Aber Du kannst selbstverständlich auch den Form_Error() dafür verwenden
> und im falle, dass der Update in die Hose ging, den Benutzer
> entsprechend informieren, dass er die Daten nun ändern muss. Unangenehm
> ist jetzt lediglich, dass u.U. wirklich jemand den Datensatz
> zwischenzeitlich verändert hat und Du diesen nun neu einlesen musst,
> damit der Benutzer sieht, was jetzt im Datensatz drin steht.
>
> Ich selber bevorzuge hier die Form_BeforeUpdate Prozedur und habe damit
> bisher noch keinen Fall gehabt, wo trotzdem ein Duplicate Fehler
> aufgetreten wäre. Und falls dieser auftritt, gibt's wegen dem Form_Error
> Handling ja dann hoffentlich eine sinnige Fehlermeldung, die der
> Benutzer dann sogar selber zu interpretieren weiss, sofern Du die
> richtige Information ausgibst (Err-Objekt und besser auch gleich noch
> die Errors-Collection durchgehen)
>
> Whitepaper zum ErrorHandling (für DAO) gibt's beim www.dbdev.org zum
> Download.
>
Hallo Henry,
danke für deine Informationen. Du hast natürlich großteils recht.
Mit Performance habe ich vor allem das Prüfen von Fremdschlüsseln
gemeint, d.h. wenn ich im Form_BeforeUpdate in fünf Tabellen nach-
schauen muss, ob der eingegebene Wert wirklich existiert, dann
ist das nicht performant.
Im Form_Error() kriege ich nur den Hinweis, dass z.B. ein Fehler
in der referentiellen Integrität passiert ist, aber nicht welche
der vielen Beziehungen den Fehler verursacht hat, sodass ich den
Anwender entsprechend aufmerksam machen kann.
Das mit der sinnigen Fehlermeldung im Form_Error() kann man beim
SQL Server vergessen, weil
Die INSERT-Anweisung verstieß gegen die COLUMN FOREIGN KEY-
Einschränkung 'FK_BetragEtat_Etat'. Der Konflikt trat in der
DurchblickAvw-Datenbank, Tabelle 'Etat', column 'idEtat' auf
sagt dem Anwender nicht wirklich etwas.
Im Form_Error() kriege ich auch nur mit DataErr die Fehlernummer
als Parameter, wobei Error$(DataErr) immer "Anwendungs- oder
Objektfehler" liefert, d.h. ich kann die Fehlermeldung nicht mal
parsen (wenn ich das wollen würde).
schöne Grüße,
Gerald
- Next message: Michael Happ: "Re: Umbenennen von Tabellen in Name mit #### als Prefix"
- Previous message: Gerald Aichholzer: "Re: Problem mit (nicht)-editierbarer Sicht (ADP/A03)"
- In reply to: Henry Habermacher [MVP Access]: "Re: Fehlerbehandlung in Formularen - wie? (ADP/A03)"
- Next in thread: Henry Habermacher [MVP Access]: "Re: Fehlerbehandlung in Formularen - wie? (ADP/A03)"
- Reply: Henry Habermacher [MVP Access]: "Re: Fehlerbehandlung in Formularen - wie? (ADP/A03)"
- Messages sorted by: [ date ] [ thread ]
Relevant Pages
|