DIAdem

cancel
Showing results for 
Search instead for 
Did you mean: 

Diadem Oracle 10g - Fehlerhandling

Hallo,
 
wir möchten mit Diadem auf eine Oracle 10g Datenbank zugreifen um Daten in Tabellen zu schreiben.
 
Wie kann man den Fehlerstatus (Daten erfolgreich in DB  geschrieben) der DB abfangen (abfragen) mit Diadem V9.1 SP2c und VBS?
Wir greifen momentan über ADO auf die DB zu!
 
Wäre auch dankbar für weitere Beispiele (habe schon ein paar in diesem Forum heruntergeladen)!
 
Danke!
 
 
0 Kudos
Message 1 of 3
(4,380 Views)
Hallo Gunter!
 
Für VB gibt es wirklich sehr viele ADO Beispiele. Wenn man mal die Unterschiede VB<->VBS intus hat kann man diese gut nutzen. Der größte Unterschied ist aber leider das Fehlerhandling, da VBS keine Labels und somit auch kein On Error Goto MyErrorHandling kennt. Dafür gibt es nur das ziemlich beschränkte (im doppelten Sinne Smiley Wink ) On Error Resume Next / On Error Goto 0 Konstrukt. Achtung: Es werden erstmal alle Fehler ignoriert und immer mit dem nächsten Befehl weitergemacht. Man muss immer das Err-Objekt mit Err.Number <> 0 abfragen ob was schiefgegangen ist.
 
Die ADO Objekte produzieren bei Laufzeitfehler die man abfangen sollte. Das kann dann so aussehen:
Option Explicit  
 
Dim oAdoConnection 
 
Set oAdoConnection = CreateObject("ADODB.Connection")
 
' Open connection
oAdoConnection.ConnectionString = "DBQ=My.MDB;DRIVER={Microsoft Access Driver (*.mdb)};DefaultDir=C:\MyDb;UID=;PWD=;"
 
On Error Resume Next
 
Call oAdoConnection.Open()
 
If Err.Number <> 0 then
  Call MsgBox("ADO Open failed!" & vbCRLF & vbCRLF & "Reason: " + Err.Description,vbCritical,"DIAdem ADO Example")
End If
 
On Error GoTo 0
Durch das On Error Resume Next / On Error Goto 0 Konstrukt muss man dies für jede potentiell 'gefährlichen' so machen. Das macht das ganze etwas unübersichtlich. Ich favorisiere es das ganze in Funktionen und dann am liebsten noch in Klassen zu kapseln. Eine Funktion könnte dann so aussehen:
Public Function AdoOpen(ByRef oConnetion )
  On Error Resume Next
    Call oAdoConnection.Open()
 
    If Err.Number = 0 then
      AdoOpen = true
    Else
      Call MsgBox("ADO Open failed!" & vbCRLF & vbCRLF & "Reason: " + Err.Description,vbCritical,"DIAdem ADO Example")
      AdoOpen = false
    End If
  On Error GoTo 0
End Function
Zusätzlich kann man sich von den ADO Objekten noch weitere Fehlerinformationen holen, z.B. so:
Public Function AdoOpen(ByRef oConnetion )
  Dim oError
 
  On Error Resume Next
    Call oAdoConnection.Open()
 
    If Err.Number = 0 then
      AdoOpen = true
    Else
      Call MsgBox("ADO Open failed!" & vbCRLF & vbCRLF & "Reason: " + Err.Description,vbCritical,"DIAdem ADO Example")
 
      ' detailed ADO Error Info
      For Each oError In oConnetion.Errors
        Call MsgBox("ADO Error: " & oError.Description,vbCritical,"DIAdem ADO Example")
      Next
 
      AdoOpen = false
    End If
  On Error GoTo 0
End Function
 
Noch ein Hinweis zum Err-Objekt: Dessen Inhalt ändert sich ggf. mit bestimmten Befehlen! Am besten wenn man einen Fehler festgestelt hat die wichtigen Daten daraus sichern.
 
Ich hoffe das hilft schon mal etwas weiter
 
Matthias
Matthias Alleweldt
Project Engineer / Projektingenieur
Twigeater?  
0 Kudos
Message 2 of 3
(4,366 Views)