Supportnet / Forum / Skripte(PHP,ASP,Perl...)
Fehlercode
Frage
Hi,
meine Seite soll einen Datensatz aus einer Tabelle löschen. Prinzipiell klappt auch alles, bis auf den Fall, daß dieser Datensatz mit einer anderen Tabelle verbunden ist. Für den Fall bekomme ich eine Fehlermeldung, daß dieser Datensatz nicht gelöscht werden kann. Diese Fehlermeldung ist absolut in Ordnung, schließlich habe ich die Datenbank so aufgebaut. Nun gibt es aber genung user, die bei so einer Fehlermeldung Panik bekommen. Meine Lösung: ich möchte diese Fehlermeldung gerne abfangen und in einer if-Anweisung meinen eigenen Kommentar dazu abgeben. Ich bräuchte dafür den Fehlercode, mit der Meldung an sich kann ich ja nicht weiterarbeiten (oder?). Mit Err.Number bekomme ich immer die Nummer 0 ausgeworfen (demnach gibt es gar keinen Fehler). Bei conn.errors bekomme ich die Meldung ... wird nicht unterstützt. Was kann man da machen? Ist vielleicht 80040e23 der Fehlercode? Wie kann ich den dann weiterverarbeiten? Danke im voraus.
Patricia
Microsoft OLE DB Provider for ODBC Drivers-Fehler 80040e23
[Microsoft][ODBC Microsoft Access 97 -Treiber] Der Datensatz kann nicht gelöscht oder geändert werden, da die Tabelle maschine in Beziehung stehende Datensätze enthält.
Antwort 1 von Karl
Hi Patricia,
Damit der errorhandler überhaupt angesptochen wird, muss er erstmal aktiviert werden [ON ERROR RESUME NEXT], ansonsten wird zur Systemerror-Routine verzweigt und die Verarbeitung an der Stelle mit Fehler abgebrochen.
Ein tiefer Blick auf den Quelltext der Musterdateien, die ich Dir geschickt habe, dann wäre Dir das nicht passiert...
Ich denke, Du wolltest es Dir einfach machen. Einfach geht aber nicht. Kein Programmierer schreibt ein Zeichen zuviel...
<%
....
Case "Löschen"
Rem hier wird der eigene Error-handler eingeschaltet
On Error Resume Next
If IsEmpty(Session("rsTadmin_Recordset")) Then
Response.Redirect "adminTForm.asp?FormMode=Bearbeiten"
End If
Set rsTadmin = Session("rsTadmin_Recordset")
If rsTadmin.EOF and rsTadmin.BOF Then Response.Redirect "adminTForm.asp"
rsTadmin.Delete
Rem wenn das Löschen funktioniert hat,
Rem dann ist die Fehlernummer 0
If Err.Number = 0 Then
If rsTadmin.CursorType = adOpenStatic Then rsTadmin.Requery
rsTadmin.MoveNext
If rsTadmin.EOF Then
Session("rsTadmin_AbsolutePage") = Session("rsTadmin_AbsolutePage") - 1
If rsTadmin.BOF And rsTadmin.EOF Then rsTadmin.Requery
End If
End If
case ...
%>
Rem Errorhandler implementieren...
If Err Then
....
<!-- HTML-Kopf und body der Error-Ausgaberoutine-->
....
<%
Select Case strDataAction
Case "Einfügen"
Response.Write("Der Datensatz konnte nicht in " & Session("TableName") & " eingefügt werden.")
Case "Aktualisieren"
Response.Write("Der aktualisierte Datensatz konnte nicht an " & Session("TableName") & " gesendet werden.")
Case "Löschen"
Rem diese Zeile wird ausgegeben, wenn das Löschen fehlschlägt Response.Write("Der Datensatz konnte nicht aus " & Session("TableName") & " gelöscht werden.")
End Select
%>
...
<table width=98% cellspacing=1 cellpadding=2 border=0>
<tr>
<td align=left bgcolor=silver><font size=-1><b> Objekt</b></font></td>
<td width=100% align=left bgcolor=silver><font size=-1><b>Beschreibung</b></font></td>
</tr>
<tr>
<td><font size=-1><b> Quelle:</b></font></td>
<td bgcolor=white><font size=-1><%= Err.Source %></td>
</tr>
<tr>
<td nowrap><font size=-1><b> Fehlernummer:</b></font></td>
<td
<!-- hier werden die Fehlernummern ausgegeben, aufschreiben und spezielle Fehlerbearbeitung darauf abstellen, muss bei Provider-Update eventuell korrigiert werden -->
bgcolor=white><font size=-1><%= Err.Number %></font></td>
</tr>
<tr>
<td><font size=-1><b> Beschreibung:</b></font></td>
<td bgcolor=white><font size=-1><%= Server.HTMLEncode(Err.Description) %></font></td>
</tr>
<tr>
<td colspan=2><hr></td>
</tr>
...
mfg Karl
Damit der errorhandler überhaupt angesptochen wird, muss er erstmal aktiviert werden [ON ERROR RESUME NEXT], ansonsten wird zur Systemerror-Routine verzweigt und die Verarbeitung an der Stelle mit Fehler abgebrochen.
Ein tiefer Blick auf den Quelltext der Musterdateien, die ich Dir geschickt habe, dann wäre Dir das nicht passiert...
Ich denke, Du wolltest es Dir einfach machen. Einfach geht aber nicht. Kein Programmierer schreibt ein Zeichen zuviel...
<%
....
Case "Löschen"
Rem hier wird der eigene Error-handler eingeschaltet
On Error Resume Next
If IsEmpty(Session("rsTadmin_Recordset")) Then
Response.Redirect "adminTForm.asp?FormMode=Bearbeiten"
End If
Set rsTadmin = Session("rsTadmin_Recordset")
If rsTadmin.EOF and rsTadmin.BOF Then Response.Redirect "adminTForm.asp"
rsTadmin.Delete
Rem wenn das Löschen funktioniert hat,
Rem dann ist die Fehlernummer 0
If Err.Number = 0 Then
If rsTadmin.CursorType = adOpenStatic Then rsTadmin.Requery
rsTadmin.MoveNext
If rsTadmin.EOF Then
Session("rsTadmin_AbsolutePage") = Session("rsTadmin_AbsolutePage") - 1
If rsTadmin.BOF And rsTadmin.EOF Then rsTadmin.Requery
End If
End If
case ...
%>
Rem Errorhandler implementieren...
If Err Then
....
<!-- HTML-Kopf und body der Error-Ausgaberoutine-->
....
<%
Select Case strDataAction
Case "Einfügen"
Response.Write("Der Datensatz konnte nicht in " & Session("TableName") & " eingefügt werden.")
Case "Aktualisieren"
Response.Write("Der aktualisierte Datensatz konnte nicht an " & Session("TableName") & " gesendet werden.")
Case "Löschen"
Rem diese Zeile wird ausgegeben, wenn das Löschen fehlschlägt Response.Write("Der Datensatz konnte nicht aus " & Session("TableName") & " gelöscht werden.")
End Select
%>
...
<table width=98% cellspacing=1 cellpadding=2 border=0>
<tr>
<td align=left bgcolor=silver><font size=-1><b> Objekt</b></font></td>
<td width=100% align=left bgcolor=silver><font size=-1><b>Beschreibung</b></font></td>
</tr>
<tr>
<td><font size=-1><b> Quelle:</b></font></td>
<td bgcolor=white><font size=-1><%= Err.Source %></td>
</tr>
<tr>
<td nowrap><font size=-1><b> Fehlernummer:</b></font></td>
<td
<!-- hier werden die Fehlernummern ausgegeben, aufschreiben und spezielle Fehlerbearbeitung darauf abstellen, muss bei Provider-Update eventuell korrigiert werden -->
bgcolor=white><font size=-1><%= Err.Number %></font></td>
</tr>
<tr>
<td><font size=-1><b> Beschreibung:</b></font></td>
<td bgcolor=white><font size=-1><%= Server.HTMLEncode(Err.Description) %></font></td>
</tr>
<tr>
<td colspan=2><hr></td>
</tr>
...
mfg Karl
Antwort 2 von Patricia
Hi,
vielen Dank, Du warst wirklich meine Rettung. Ich hatte die Frage auch schon in anderen Listen gestellt und bisher konnte mir keiner helfen.
Patricia
vielen Dank, Du warst wirklich meine Rettung. Ich hatte die Frage auch schon in anderen Listen gestellt und bisher konnte mir keiner helfen.
Patricia

