Kann man eine MySQL Exceptionmeldung unterdrücken?
-
Hallo,
ich habe eine Frage zu Exceptions bei MySQL.
ich arbeite mit dem Builder2009. Über ADO-Komponenten habe ich eine MySQL-Datenbank angeschlossen. Ich bearbeite dann eine MySQL-Tabelle über ein Datenbankgrid.
Diese Tabelle hat 2 Spalten (Unique), die keine doppelten Datensätze zulassen.Wird dennoch ein doppelter Eintrag über den Editor des DBGrids gepostet, erhalte ich eine berechtigte Exception der MySQL-Datenbank.
Ich möchte die Fehlerbehandlung der Exceptions aber in eigener Regie im Event OnPostError meines DataSets durchführen, z.B.void __fastcall TDataModule3::ADOTable_meineMySQLTabellePostError(TDataSet *DataSet, EDatabaseError *E, TDataAction &Action){ ShowMessage("keine doppelten Eintrage zulässig - " + UnicodeString(E->Message)); //Action = daAbort; }
Das hat aber zur Konsequenz, dass ich bei einer Exception nun 2 Meldungen erhalte. Einmal von MySQL und einmal über mein OnPostError.
Frage: Gibt es eine Möglichkeit die von MySQL angezeigte Exception zu unterdrücken?
-
MySQL zeigt ganz sicher keine Meldung an. Der läuft nämlich in seinem eigenen Prozess, der möglicherweise auf ner ganz anderen Maschine läuft, wo dann keiner da ist der "OK" drücken könnte.
Also: finde erstmal raus wer wirklich die Meldung anzeigt, und dann guck ob du sie abfangen/unterdrücken/"wegkonfigurieren" kannst.
-
Vorallem ist es einem RDBMS egal was in der DB steht solange man nicht die Tabellen so aufbaut das sie z.B.. UNIQUE sind oder ähnliches.
Du solltest entweder die Tabelle so aufbauen das dies bei Daten schon nicht passiert oder den SELECT so anpassen.in einem RDBMS MUSS jeder ROW eindeutig sein sonst gibt es ein Problem.
-
Hallo,
danke schon 'mal für Eure Antworten.@hustbaer: "MySQL zeigt ganz sicher keine Meldung an"
Okay wer dann? Der ODBC-Treiber? Im Übrigen kann ich mir nicht vorstellen, dass die DB so ganz und gar nichts zurückgibt. Woran sollte dann das Programm bzw. der Treiber erkennen, dass ein Problem vorliegt? Irgendeinen Schnittpunkt muss es geben.
Ich erhalte folgende Exceptionmeldung aus dem Event OnPostError meines Programms:
"keine doppelten Eintrage zulässig - [MySQl][ODBC3.51 Driver][mysql-5.0.41-community-n] Duplicate entry '37-168' for key 1" (der Eintrag mit der Kombination 37 und 168 ist in der Tabelle bereits vorhanden)
Wenn nur diese Meldung käme, wäre alles super.Nach dem Schließen der Messagbox, kommt dann aber sofort im Anschluß die 2. Meldung mit gleichem Inhalt
"[MySQl][ODBC3.51 Driver][mysql-5.0.41-community-n] Duplicate entry '37-168' for key 1"Wie kann ich diese 2 Messagebox unterdrücken? Wenn die nicht von MySQL kommt, wie @hustbaer sagt, kann sie wohl nur noch durch den ODBC Treiber entstanden sein, oder sehe ich das falsch? Was anderes kann ich in meinem Miniprogrämmchen nicht finden.
@Unix-Tom
Leider habe ich bisher noch zu wenig Erfahrung mit Datenbanken. Aber soll es wirklich guter Programmstil sein vor jedem Post eines Eintrags erst über eine SELECT-Abfrage vorzuprüfen ob dadurch ein Fehler in der DB entsteht? (bzw.hier: doppelter Eintrag vorhanden ist?)