in Access nicht vollendetes insert wegen raiserrer SG 11

31/08/2009 - 13:49 von Antje Kaiser | Report spam
Hallo zusammen,
ich habe ein, mir zunàchst unerklàrliches, Phànomen entdeckt.
In einem Accessfomular (Access 2003 - SQL Server 2005 - adp) habe ich
Datensàtze in der Datenblattansicht. Beim Einfügen eines Satzes in diese
Tabelle soll via Trigger noch ein weiterer eingefügt werden, was auch
problemlos funktioniert. Trifft aber eine notwendige Randbedingung zum
Einfügen des anderen Satzes nicht zu, möchte ich per raiserror dem Nutzer
mitteilen, daß diese oder jene Bedingung fehlschlàgt. Den eigentlich per Hand
eingefügten Satz soll er aber trotzdem speichern. Auch das tut er alles, nur
Access verhàlt sich in diesem Fall komisch. Nachdem mir die
Raiserror-Meldung, die ich mit Schweregrad 11 (sonst kommt garnichts an) im
Trigger ausgelöst habe, angezeigt wurde bleibt Access mit dem Stift als
Satzmarkierung in dem Satz stehen. Im Hintergrund ist er aber schon
eingefügt. Das merke ich, da er mir sagt: Aufgrund einer Schlüsselverletzung
kann nicht nocheinmal ... usw. Mache ich nun 2 x ESC sieht es aus als wàre
mein eingefügter Satz weg, er ist nicht zu sehen. Erst wenn ich das Fenster
zu und wieder aufmache kann ich ihn sehen.
Hat jemand eine Idee, was zu tun ist? Dieses Verhalten irritiert den Nutzer
natürlich unheimlich, aber via AfterInsert oder so kann ich auch kein requery
machen. Nach dem Einfügen in der Datenbank komm ich scheinbar nicht mehr ran.
Danke für Eure Hilfe im voraus.

Gruß
Antje
 

Lesen sie die antworten

#1 Elmar Boye
31/08/2009 - 13:58 | Warnen spam
Hallo Antje,

Antje Kaiser schrieb:
Hallo zusammen,
ich habe ein, mir zunàchst unerklàrliches, Phànomen entdeckt.
In einem Accessfomular (Access 2003 - SQL Server 2005 - adp) habe ich
Datensàtze in der Datenblattansicht. Beim Einfügen eines Satzes in diese
Tabelle soll via Trigger noch ein weiterer eingefügt werden, was auch
problemlos funktioniert. Trifft aber eine notwendige Randbedingung zum
Einfügen des anderen Satzes nicht zu, möchte ich per raiserror dem Nutzer
mitteilen, daß diese oder jene Bedingung fehlschlàgt. Den eigentlich per Hand
eingefügten Satz soll er aber trotzdem speichern. Auch das tut er alles, nur
Access verhàlt sich in diesem Fall komisch. Nachdem mir die
Raiserror-Meldung, die ich mit Schweregrad 11 (sonst kommt garnichts an) im
Trigger ausgelöst habe, angezeigt wurde bleibt Access mit dem Stift als
Satzmarkierung in dem Satz stehen. Im Hintergrund ist er aber schon
eingefügt.



RAISERROR alleine reicht nicht, Du mußt auch die Transaktion,
in der Du Dich im Trigger immer befindest, zurück rollen.
Nach dem Muster:

IF (...) -- was auch immer das schief liegt
BEGIN
RAISEERROR(N'Das mag ich nicht...", 16, 1)
IF @@TRANCOUNT > 0 ROLLBACK TRAN
RETURN
END

Als Schweregrad solltest Du 16 verwenden, wie die meisten Fehler,
die die Datenkonsistenz betreffen. Alles unter Schweregrad 11 wird
als Information betrachtet und von ADO ausgefiltert.

Siehe auch:
<URL:http://www.sommarskog.se/error-handling-I.html>
<URL:http://www.sommarskog.se/error-hand...I.html>

Gruß Elmar

Ähnliche fragen