con.execute Fehlerabfangen

  • VB6

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von LaMa5.

    con.execute Fehlerabfangen

    Hallo Kollegen,
    ich habe das Problem wenn bei con.execute(insert...) ein Fehler aufgrund eines doppelten Indexes auftritt, kommt eine Fehlermeldung von VB und die Abfangroutine "on error goto..." kommt nicht zum Einsatz.

    Hat irgendjemand dieses Problem gelöst oder gibt es eine andere Altenative das programmtechnisch zu lösen? selbst on Error goto 0 wird ausser Kraft gesetzt.

    Danke für die Hilfe im Voraus
    BasicBeetle
    Hi,

    der befehl "On Error Goto 0" schaltet die Fehlerbehandlung von Windows wieder an!!

    Schreibe mal testweise an den Anfang der Sub/Function in der der Fehler auftritt: On Error Resume Next

    Das schaltet die Fehlerbehandlung von Windows für diese Routine komplett aus. Du müsstest dann allerdings eine manuelle Fehlerkorrektur machen.


    bye ...

    LaMa5.
    Die Wissenschaft wird nie ein besseres Kommunikationssystem in den Büros erfinden können als die Kaffeepause.
    (Autor: Earl Wilson, amerik. Schriftsteller)

    https://www.serviceteam-md.de
    Hi LaMa5,

    danke für die Nachricht. Doch leider klappt es mit dem
    On Error Resume next auch nicht.

    Es handelt sich bei dem Fehler auch um einen klassichen Laufzeitfehler. Es wundert mich eigentlich das der mit der Routine/Funktion On error goto nicht abgefangen werden kann.

    Oder kommt die Fehler Meldung gar nicht von VB/Windows sondern von Access/Windows da es sich ja mehr um einen DB Fehler als um einen Programmfehler handelt. Kann man Access Fehlermeldung in irgendeiner Art und Weise abfangen?

    Gruß
    BasicBeetle
    Hi,

    für die Fehlersuche benötige ich mal ein bisschen Quelltext und wie die Datenbank (welche) angebunden ist.


    bye ...

    LaMa5.

    Edit:

    Und den genauen Wortlaut der Fehlermeldung!!
    Die Wissenschaft wird nie ein besseres Kommunikationssystem in den Büros erfinden können als die Kaffeepause.
    (Autor: Earl Wilson, amerik. Schriftsteller)

    https://www.serviceteam-md.de

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „LaMa5“ ()

    Hi

    hier kommt der Quelltext:

    Quellcode

    1. Private Sub DatensatzSichern(Landeskuerzel As String)
    2. On Error Resume Next
    3. Dim AnzRows As Integer
    4. Dim sqlStr As String
    5. sqlStr = "select * from Laender where Landeskuerzel = '" + Landeskuerzel + "'"
    6. Set RS = con.Execute(sqlStr)
    7. If Not RS.EOF Then
    8. sqlStr = "update Laender set Landesvorwahl='" + Me.txtVorwahl.Text + "',Land='" + Me.txtLand.Text + "',GeaendertAm='" + CStr(Now()) + "',GeaendertVon='" + DummyUser + "' where Landeskuerzel='" + Landeskuerzel + "'"
    9. Else
    10. sqlStr = "insert into Laender(Landeskuerzel, Landesvorwahl, Land," & _
    11. "GeaendertAm, GeaendertVon) " & _
    12. "values('" + Landeskuerzel + "','" + Me.txtVorwahl.Text + "','" + Me.txtLand.Text + "','" + CStr(Now()) + "','" + DummyUser + "')"
    13. End If
    14. con.Execute (sqlStr)
    15. Exit Sub
    16. FehlerMeldung:
    17. MsgBox "Es trat folgender Fehler auf:" + vbLf + vbLf + "Fehler-Nr.:" + Err.Number + "Fehlertext: " + Err.Description + vbLf + vbLf + "Der vorgang wird beendet!", vbCritical, "Fehlermeldung"
    18. ModulBeenden
    19. End Sub


    Und bei dem con.Execute knallt er raus mit der Fehlermeldung:

    Laufzeitfehler -xxxxxx(xxxx)'
    Die von Ihnen angenommen Änderung konnte nicht vorgenommen werden da der Index, Primärschlüssel bereits erhalten ist

    Das ist auch komplett richtig so. Nur diese Dummheit kann ja auch der Anwender machen und ich möchte diese Meldung mit dem Programm abfangen damit der Anwender weiter machen kann.

    Gruß
    BasicBeetle


    Edit by Mad Andy:
    Code-Tag eingefügt! Bitte immer [ vb]...[/vb] einfügen, wenn er mal funktioniert, ansonsten [ code]...[/code].

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Mad Andy“ ()

    Hi,

    und bei welchem Weg der If Anweisung tritt der Fehler auf??

    Deklariere das Recordset nicht Global sondern immer in der Routine, in der es gebraucht wird.


    bye ...

    LaMa5.

    Edit:

    Wie sieht die Tabelle aus???
    Die Wissenschaft wird nie ein besseres Kommunikationssystem in den Büros erfinden können als die Kaffeepause.
    (Autor: Earl Wilson, amerik. Schriftsteller)

    https://www.serviceteam-md.de

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „LaMa5“ ()

    Hi,

    bei dem insert. Aber das eigentliche Problem ist mir ja bekannt. Mir geht es ja darum ob ich im Formular alle eventuellen Fehlermöglichkeiten abgreifen muß oder ob ich es der Fehlermeldung überlasse. Aber ich lande ja bei einem insert auf einen doppelten Index nicht mehr in der VB Anwendung sondern offensichtlich irgendwo ausserhalb der Anwendung nämlich entweder bei Access oder bei Windows.

    Ich möchte ja nur verhindern das sich Access oder Windows bei einem Fehler melden sondern das eigentliche Programm.

    Gruß
    BasicBeetle
    Das ist komisch.. "Runtime Errors" sollten eigentlich nur vom Programmier-Modell geworfen werden. Der einzige Fall wo dann trotz Fehlerbehandlung eine Meldung kommt ist, wenn der gleiche Fehler öfters auftritt. Da müsstest du dann bei (je)der Fehlerbehandlung Err.Clear reinpacken. Du kannst mal debuggen und schaun ob vor der Fehlermeldung schon was im Err-Objekt drinen steht.

    Die Fehlermeldung schaut mir aber irgendwie mehr nach ner Datenbank aus, weils in VB6 noch keine so genauen Fehlerbeschreibungen für Datenbank-Zugriffe gab?!
    Die sind erst mit .net gekommen.

    Der einfachste Weg, der mir jetzt einfallen würde ohne im dunklen zu tappen ist einfach ein Select davor zu werfen :)


    so long..
    Andy
    Hi,

    der Fehler ist definitiv abfangbar. Ich habe eben mal schnell in meinem DB Programm absichtlich einen doppelten Index erzeugt und konnte den Fehler (@MadAndy: übrigens mit Beschreibung ;) (VB6 und ADO)) abfangen.

    Das Problem scheint in der Tabelle zu liegen. Keins der obigen Felder sieht für mich nach nem Primary Key aus. Deshalb wollte ich ja mal die Tabellenbeschreibung haben.


    bye ...

    LaMa5.
    Die Wissenschaft wird nie ein besseres Kommunikationssystem in den Büros erfinden können als die Kaffeepause.
    (Autor: Earl Wilson, amerik. Schriftsteller)

    https://www.serviceteam-md.de