Fehlermeldunge abfangen bei Datenbank eintragungen



  • Hallo,

    ich möchte in eine Datenbank mit Insert Into Daten eintragen. Dieses läuft auch Blasenfrei. Wenn ich versehentlich eine Eintrag hinzufüge der schon vorhanden ist kommt logischerweise eine Fehlermeldung zurück da Datensätze mit gleichem Index nicht sein dürfen.

    Wie kann ich diese Fehlermeldung abfangen damit mir mein Programm nicht abbricht 😕

    Quelltext sieht so aus :
    ADOQuery1->Close();
    ADOQuery1->SQL->Clear();
    ADOQuery1->SQL->Add("INSERT INTO Test (X,No) VALUES (1234,4711");
    ADOQuery1->ExecSQL();

    Gruß Ralf



  • Hallo Ralf Kruppa,

    ich würde es mal mit try und __except oder catch versuchen. Weitere Infos findest du in der BCB-Hilfe.

    Evi48



  • try{
      ADOQuery1->Close();
      ADOQuery1->SQL->Clear();
      ADOQuery1->SQL->Add("INSERT INTO Test (X,No) VALUES (1234,4711");
      ADOQuery1->ExecSQL();
    }
    catch(EDatabaseError &MyError){
      //Fehler handeln/abbrechen/etc...
      ...
    }
    

    Und nicht in der IDE laufen lassen, sonst wirds nichts mit dem catchen!



  • catch funktioniert auch in der IDE. Es wird lediglich zusätzlich eine messagebox mit der aufgetretenen Exception angezeigt. Das kannst du über die Einstellungen des Builders aber auch abschalten.

    Ciao



  • Wenn man das so macht meckert er &MyError an.
    Dies ist do ein Verweis auf eine Tabelle mit Fehlern, wie kann ich diese Aktivieren bzw. Bekantmachen das er diese auch kennt ?

    In der BCB Hilfe habe ich noch nicht das Richtige gefunden. 😞

    Gruß Ralf



  • Kann es sein das EDatabaseError nicht bekannt ist (das ist übrigens eine Klasse und kein Wert in einer Tabelle)? Welche Exception wird denn normalerweise geworfen?
    Wenn du alle Exceptions abfangen willst und keinen Wert auf die genaue Fehlermeldung legst kannst du in catch auch die Ellipse, also catch(...) verwenden.



  • Braunstein schrieb:

    Kann es sein das EDatabaseError nicht bekannt ist

    Also eigentlich sollte das sehr wohl bekannt sein. Kriegst du das nich compiliert? Aber in diesem Fall wäre catch(...) wohl wirklich besser.

    catch geht nicht in der IDE. Der Debugger stoppt mit der typischen Fehlermeldung



  • Hallo ,

    auch mit catch(...) geht es nicht. Er bricht dann mit folgender Fehlermeldung ab :

    Im Projekt GEB.exe ist eine Exception der Klasse EOleException aufgetreten. Meldung: '[Microsoft][ODBC SQL Server Driver][SQL Server]Violation of PRIMARY KEY constraint 'PK_TestGEB'. Cannot insert duplicate key in object 'TestGeb'. Prozeß wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzen.

    Mir ist bekannt das ich versuche einen Datensatz einzufügen den es schon gibt. Dieses ist auch beabsichtig und soll abgefangen werden. Entsprechend sonn dann eine Ausgabe erfolgen aber die "Benachrichtigung über Debugger-Excepton" soll nicht kommen.

    Gruß Ralf



  • ??? Darauf hat Braunstein doch schon hingewiesen:

    Braunstein schrieb:

    catch funktioniert auch in der IDE. Es wird lediglich zusätzlich eine messagebox mit der aufgetretenen Exception angezeigt. Das kannst du über die Einstellungen des Builders aber auch abschalten.

    Das betrifft nur die Debug-Version, in der endgültig kompilierten Fassung wird nur Deine Fehlermeldung ausgegeben.



  • Hallo,

    so jetzt läuft es.
    Mit catch(...) und dann die Exe.

    Vielen Dank für die tolle Unterstützung ist ein super Forum.


Anmelden zum Antworten