Ereignis zum Auffangen von Fehlern des SQL-Servers (z.B. PrimaryKe

14/03/2008 - 18:26 von Klaus | Report spam
Hallo,

ich habe ein Access 2007-Frontend, das via ODBC auf einen SQL 2005 Server
zugreift.
Bei welchem Formularereignis kann ich Fehler wie
z.B.PrimaryKey-Verletzungen auffangen und in eine nutzerfreundliche Meldung
umwandeln? Das Errorr-Ergeingnis des Formulars reagiert ja darauf nicht...
Für einen Rat wàre ich sehr dankbar, denn meine Kunden wollen keine
ODBC-Fehlermeldungen mehr sehen.

Und ein weiteres Problem: manchmal bekomme ich Meldungen, ein anderer Nutzer
hàtte meine Daten in der Zwischenzeit geàndert (obwohl ich ganz alleine auf
den Server zugreife). Das kommt m.E. von Triggern oder gespeicherten
Prozeduren, die tatsàchlich Daten àndern und das auch tun sollen. Das bekommt
aber das Frontend logischer Weise nicht mit. Wie kann ich diesen Fehler
vermeiden?

Herzlichen Dank im Voraus an jeden netten Menschen, der mir weiterhilft!

Klaus
 

Lesen sie die antworten

#1 Henry Habermacher
17/03/2008 - 07:12 | Warnen spam
Hallo Klaus

Voller Realname wird hier gern gesehen, Danke

Klaus wrote:
ich habe ein Access 2007-Frontend, das via ODBC auf einen SQL 2005 Server
zugreift.
Bei welchem Formularereignis kann ich Fehler wie
z.B.PrimaryKey-Verletzungen auffangen und in eine nutzerfreundliche
Meldung umwandeln? Das Errorr-Ergeingnis des Formulars reagiert ja
darauf nicht... Für einen Rat wàre ich sehr dankbar, denn meine Kunden
wollen keine ODBC-Fehlermeldungen mehr sehen.



Nebst dem Err Objekt findest Du bei ODBC Fehlern in Access auch noch die
Errors Collection. diese solltest Du durchrackern und dort kannst Du dann
rausfinden, welcher Fehler tatsàchlich aufgetreten ist.

Hier ein Beispiel:

http://support.microsoft.com/kb/154510/en-us

Und ein weiteres Problem: manchmal bekomme ich Meldungen, ein anderer
Nutzer hàtte meine Daten in der Zwischenzeit geàndert (obwohl ich ganz
alleine auf den Server zugreife). Das kommt m.E. von Triggern oder
gespeicherten Prozeduren, die tatsàchlich Daten àndern und das auch tun
sollen. Das bekommt aber das Frontend logischer Weise nicht mit. Wie
kann ich diesen Fehler vermeiden?



Zum einen musst Du sicher stellen, dass Du, wenn Du die Tabellen als
Recordset holst, immer den Parameter dbSeeChanges angibst. Das geht aber für
Formulare nicht. Hier hilft in der Regel ein Me.Refresh im Form_AfterUpdate
event aus.

Wichtig auf alle Fàlle: Jede SQL Server Tabelle, welche Du in Access über
ODBC einbindest sollte ein TimeStamp Feld haben. Füg' dieses in allen
Tabellen hinzu und binde die Tabellen neu in die Anwendung ein. Erfreue Dich
nachher einer besseren Performance und vorallme hàufigerweise dem Ausbleiben
der genannten Meldung. Der Grund ist denkbar einfach: über das Timestamp
Feld (welches Du in Access überhaupt nicht anfassen musst) erkennt Access
bei jedem Update, ob der Datensatz noch der gleiche ist. Wenn kein TimeStamp
Feld drin ist, dann muss Access alle Felder einzeln auf Gleichheit prüfen,
was natürlich zum einen wesentlich langsamer ist und zum anderen bei
DateTime und hochpràzisen Numerischen Datentypen, die Access nicht so gut
beherrscht oftmals zu obiger Fehlermeldung führt (Rundungsfehler).

Gruss
Henry

SEK2 Anmeldung: http://donkarl.com/?SEK
Microsoft MVP Office Access
Keine E-Mails auf Postings in NGs. Danke.
Access FAQ www.donkarl.com

Ähnliche fragen