Datenbank Exception abfangen



  • Hi,

    Ich hab ein wohl recht simples Problem:
    Ich hab eine Datenbank mit CRecordset geladen und arbeite damit per SQL Befehl.
    Die Datenbank ist befüllt und wenn ich einen Tupel hineinschreiben will wirft er mir eine Fehlermeldung das ich das nicht darf. Soweit so gut, nur will ich das er mir die Fehlermeldung nicht anzeigt sondern einfach nur nichts macht.

    Meine Frage nun: Wie kann ich diese Fehlermeldung abfangen?
    ich hab es mit einem 0815
    try{} catch(CException e){}
    versucht aber damit krieg ich die Exception nicht und ich weiss auch nicht welche ich genau abfangen muss.

    Hier nochmal der Text der Fehlermeldung:

    Die von Ihnen vorgenommenen Änderungen an der Tabelle konnten nicht vorgenommen 
    werden, da der Index, Primärschlüssel oder die Beziehung mehrfach vorkommende We
    rte enthalten würde. Ändern Sie die Daten in den Feldern, die gleiche Daten enth
    alten, entfernen Sie den Index, oder definieren Sie den Index neu, damit doppelt
    e Einträge möglich sind, und versuchen Sie es erneut.
    


  • catch (...)
    

    fängt ALLES. 🙂



  • 🤡

    thx



  • wenn catch(...) zu allgemein ist:
    mal einen Pointer auf CException verwenden: catch(CException *pEx) verwenden.

    tester2



  • Die CRecordset-Methoden werfen eine CDBException

    try
    	{
          bla
    	}
    	catch(CDBException* e)
    	{
    		AfxMessageBox("FEHLER:\n"+e->m_strStateNativeOrigin+"\n"+e->m_strError);
    		e->Delete();
    	}
    


  • nur zur Vollstädnigkeit, es kann auch das geworfen werden : CMemoryException



  • Bei CRecordSet werden aber auch nicht alle Exceptions auf diese Art abgefangen:

    Wenn man über das Ende eines Datensatzes mit MoveNext weiterfährt (z.B. bei einer Schleife mit Abfrage auf IsEOF), dann wird eine Exception geworfen, die sich nicht abfangen lässt, was man schön beim Debuggen feststellen kann.
    Es gab vor einigen Monaten hierzu auch mal einen längeren Thread hier, aber soweit ich mich erinnern kann, hat niemand eine Lösung oder Ursache hierfür gekannt.



  • Meinst du wirklich Execptions oder die Assertions?



  • Es ging schon um Exceptions.
    Hier mal eine Fehlermeldung aus einem ansonsten funktionierenden Programm:

    Nicht abgefangene Ausnahme in Bde.exe (KERNEL32.DLL): 0xE06D7363: Microsoft C++ Exception.
    

Anmelden zum Antworten