PDA

View Full Version : Mehr als SQLGetDiagRec ?



StG
14-03-06, 17:02
Beim Zugriff auf DB2 V5R3 über ODBC haben wir momentan ein Problem mit einer unique constraint/key Verletzung.
Mein eigentliches Problem ist jedoch das ich gerne mehr Informationen über den betroffenen unique constraint/key hätte.

Provoziere ich einen entsprechenden Insert über den iSeries Navigator bekomme ich eine angenehm umfangreiche Fehlermeldung mit SQL-Status, Vendorencode, Nachricht: [SQL0803] Doppelter Schlüsselwert angegeben, sowie eine umfangreichen "Ursachen" String der unter anderem betroffene Tabelle und Name der Integritätsbedingung beinhaltet.
Über ODBC scheine ich über SQLGetDiagRec und SQLGetDiagField (auch nach mehrfachem Loop Zugriff um alle Fehler abzuholen) lediglich Zugriff auf die Nachricht d.h. "[SQL0803] Doppelter Schlüsselwert angegeben" nicht jedoch den gewünschten "Ursachen" String zu bekommen.
Ist dieser nicht über ODBC verfügbar oder wenn doch wie wäre dieser abzufragen?

Danke im Voraus

Fuerchau
15-03-06, 09:12
Nach SQL ist über den ODBC-Treiber auch nicht mehr herauszubekommen.
Um detailierte Meldungen zu empfangen muss man auf ODBC verzichten und die kompletten CA-API's für DB-Zugriff verwenden (OpsNav verwendet nämlich kein ODBC).

Das habe ich vor längerem schon mal versucht, klappte auch soweit ganz gut, allerdings sind sämtliche Vorteile des ADO/DAO/RDO-Zugriffes weg. Man muss wirklich alles und jedes selber programmieren.

Wenn man solche Constraint's hat, muss die Anwendung diese auch besser kennen !

holly
15-03-06, 10:45
Beim Zugriff auf DB2 V5R3 über ODBC haben wir momentan ein Problem mit einer unique constraint/key Verletzung.
Mein eigentliches Problem ist jedoch das ich gerne mehr Informationen über den betroffenen unique constraint/key hätte.

Provoziere ich einen entsprechenden Insert über den iSeries Navigator bekomme ich eine angenehm umfangreiche Fehlermeldung mit SQL-Status, Vendorencode, Nachricht: [SQL0803] Doppelter Schlüsselwert angegeben, sowie eine umfangreichen "Ursachen" String der unter anderem betroffene Tabelle und Name der Integritätsbedingung beinhaltet.
Über ODBC scheine ich über SQLGetDiagRec und SQLGetDiagField (auch nach mehrfachem Loop Zugriff um alle Fehler abzuholen) lediglich Zugriff auf die Nachricht d.h. "[SQL0803] Doppelter Schlüsselwert angegeben" nicht jedoch den gewünschten "Ursachen" String zu bekommen.
Ist dieser nicht über ODBC verfügbar oder wenn doch wie wäre dieser abzufragen?

Danke im Voraus

Den gewünschten Ursachenstring solltest Du eigentlich über den ODBC-Trace bekommen. Funktioniert bei mir bestens.
Gruß Holger

Fuerchau
15-03-06, 10:52
Holger, das ist keine Lösung zur Laufzeit des Programmes, da dieses selber den Text wohl haben will sondern nur zur Fehlersuche während der Entwicklung.

StG
15-03-06, 13:08
Danke für die schnelle Antwort auch wenn die erhoften Informationen damit wohl ausser Reichweite rücken :)
CA-API und ODBC Trace sind vermutlich keine Alternativen so das ich mir irgend wie anders werde behelfen müssen.