Hallo zusammen,
ich möchte mit AutoIT auf eine Oracle 11 Datenbank lesend zu greifen. Kann mir jemand einen Tipp geben?? Wenn möglich würde ich auch gerne auf TNSNAMES.ORA Einträge verzichten.
Bin für jede Idee dankbar.
Grüße
CrazyER
Hallo zusammen,
ich möchte mit AutoIT auf eine Oracle 11 Datenbank lesend zu greifen. Kann mir jemand einen Tipp geben?? Wenn möglich würde ich auch gerne auf TNSNAMES.ORA Einträge verzichten.
Bin für jede Idee dankbar.
Grüße
CrazyER
Durchsuch das Forum mal nach "Oracle". Da kriegst Du eine ganze Liste an Ergebnissen z.B. das hier .
danke erstmal,
natürlich habe ich das Forum durchsucht und Google gefragt. Aber überall bekomme ich nur Fragmente ;o) Die dann immer zu dieser Fehlermeldung führt:
==> The requested action with this object has failed.
Wäre halt interessant zu wissen was als Source verlangt wird ?? FQDN ?? IP ?? Listener ?? ODBC Verbindung ??
So wie ich das verstehe muss die angegebene "Data Source" mit "odbcad32" definiert werden.
Als Benutzer- oder System DSN ?? ;o)) Also man findet nicht wirklich etwas dazu.
Ich hab bislang auch noch nie den Microsoft Treiber verwendet, sondern immer den Oracle Instant Client installiert. Aber das hilft mir hier erstmal auch nicht weiter.
Als Benutzer- oder System DSN ?? ;o))
Egal.
bekomme ich dennoch die gleiche fehlermeldung
Dann poste doch mal Deinen Code.
$conn = ObjCreate( "ADODB.Connection" )
$DSN = "Provider=OraOLEDB.Oracle;Data Source=d3aa;User Id=Master;Password=XXX";
;MsgBox(0,"ConnectString",$DSN)
$conn.Open($DSN)
$rs = ObjCreate( "ADODB.RecordSet" )
$rs.Open( "select BANNER from v$version where banner like 'Oracle%'", $conn )
MsgBox(0, "AutoIT-SQL Result", "Value = " & $rs.Fields( "BANNER" ).Value )
$conn.close
Was Du auf jeden Fall brauchst ist: Mehr Fehlerprüfungen!
Was zusätzlich hilft ist ein COM error handler!
Details folgen später.
wirklich schlauer bin ich nun auch nicht. Noch immer der selbe Fehler in der Selben Zeile ($conn.Open($DSN) Error Number 80020009) ;o)
[autoit]Global $oMyError = ObjEvent("AutoIt.Error","MyErrFunc")
[/autoit][autoit][/autoit][autoit];----------------------------------------------------------------------------------------------------------
; Com Error Handler
;----------------------------------------------------------------------------------------------------------
Func MyErrFunc($oMyError)
Local $HexNumber
Local $strMsg
$HexNumber = Hex($oMyError.Number,
$strMsg = "Error Number: " & $HexNumber & @CRLF
$strMsg &= "WinDescription: " & $oMyError.WinDescription & @CRLF
$strMsg &= "Script Line: " & $oMyError.ScriptLine & @CRLF
MsgBox(0, "ERROR", $strMsg)
SetError(1)
Endfunc
$conn = ObjCreate( "ADODB.Connection" )
$DSN = "Provider=OraOLEDB.Oracle;Data Source=XXX;User Id=XXX;Password=XXX";
;MsgBox(0,"ConnectString",$DSN)
$conn.Open($DSN)
$rs = ObjCreate( "ADODB.RecordSet" )
$rs.Open( "select BANNER from v$version where banner like 'Oracle%'", $conn )
MsgBox(0, "AutoIT-SQL Result", "Value = " & $rs.Fields( "BANNER" ).Value )
$conn.close
Ersetz die Funktion _MyErrFunc mal mit dieser:
[autoit]Func _ErrFunc($oError)
MsgBox(16, "COM Error handler", "err.number is: " & @TAB & $oError.number & @CRLF & _
"err.windescription:" & @TAB & $oError.windescription & @CRLF & _
"err.description is: " & @TAB & $oError.description & @CRLF & _
"err.source is: " & @TAB & $oError.source & @CRLF & _
"err.helpfile is: " & @TAB & $oError.helpfile & @CRLF & _
"err.helpcontext is: " & @TAB & $oError.helpcontext & @CRLF & _
"err.lastdllerror is: " & @TAB & $oError.lastdllerror & @CRLF & _
"err.scriptline is: " & @TAB & $oError.scriptline & @CRLF & _
"err.retcode is: " & @TAB & $oError.retcode & @CRLF & @CRLF)
EndFunc ;==>_ErrFunc
da bringt der Error Handler garkein Fehler.
Richtig: Muss auch "Func MyErrFunc(($oError)" statt "Func _ErrFunc($oError)" heissen.
sooo, nun funtkioniert es. Hab mich mal einbisschen in die VBA Welt eingelesen und somit die entsprechende Hinweise gefunden.
Hier mein funktionierender Code:
[autoit]$conn = ObjCreate( "ADODB.Connection" )
$DSN = "Driver={Microsoft ODBC for Oracle};" & _
"CONNECTSTRING=(DESCRIPTION=" & _
"(ADDRESS=(PROTOCOL=TCP)" & _
"(HOST=XXX)(PORT=1521))" & _
"(CONNECT_DATA=(SERVICE_NAME=XXX))); Uid=XXX;Pwd=XXX;"
$conn.Open($DSN)
$rs = ObjCreate( "ADODB.RecordSet" )
$rs.Open( "select BANNER from v$version where banner like 'Oracle%'", $conn )
MsgBox(0, "AutoIT-SQL Result", "Value = " & $rs.Fields( "BANNER" ).Value )
$conn.close
Vorteil, die Einstellungen von der TNSNAMES.ORA wird gleich mit gegeben und somit ist die TNSNAMES.ORA für die Verbindung nicht nötig.