Verbindung zum Oracle Server

  • Hallo zusammen,

    ich versuche bei uns in der Arbeit eine Verbindung zum Oracle Server herzustellen, jedoch scheitere ich daran.
    Das Problem liegt daran, dass ich keine odbc Treiber oder Oracle auf unseren Arbeits PC installieren kann und somit eine Verbindung mit Standard Funktionen herstellen muss.
    Mit Google usw. kam ich leider nicht weiter :(

    Hat evtl hier jemand eine Idee?

    • Offizieller Beitrag

    Wenn man nichts installieren kann, hat das ja bestimmt seinen Grund! ?(

  • ich versuche bei uns in der Arbeit eine Verbindung zum Oracle Server herzustellen, jedoch scheitere ich daran.

    Script?


    Oracle stellt dafür Tools zur Verfügung.
    Ruf an der Kundenhotline an oder schreib eine Mail an den Support, oder finde die Tools auf der Oracle-Site selbst.

    Mit Google usw. kam ich leider nicht weiter

    Ohne "usw.", nur mit der Eingabe von "connect to oracle server without odbc" in Google habe ich auf den ersten beiden Seiten 10 (IN WORTEN ZEHN ! ) Treffer zum Thema gefunden!

    Über die Möglichkeiten per Excel/Access will ich garnicht reden, OpenOffice wickelt das übrigens genauso problemlos ab....

  • Da gabs glaube ich mal ne spezielle UDF, hatte mal was gebaut damit, ist allerdings schon über 2 Jahre her :)

    Kleiner Auszug:

    [autoit]

    _MySQL_InitLibrary()
    If @error Then Exit MsgBox(0, '', "")
    $MysqlConn = _MySQL_Init()
    $connected = _MySQL_Real_Connect($MysqlConn, $sqlserv, $sqluser, $sqlpass, $sqldb)
    If $connected = 0 Then Exit MsgBox(16, 'Connection Error', _MySQL_Error($MysqlConn))
    $query = "SELECT * FROM stunden where id = " & $userid
    _MySQL_Real_Query($MysqlConn, $query)
    $res = _MySQL_Store_Result($MysqlConn)
    $fields = _MySQL_Num_Fields($res)
    $rows = _MySQL_Num_Rows($res)
    _MySQL_Data_Seek($res, 0)
    Do
    $row1 = _MySQL_Fetch_Row_StringArray($res)
    If @error Then ExitLoop
    GUICtrlSetData($stunden, $row1[1])
    Until @error
    _MySQL_Free_Result($res)
    _MySQL_Close($MysqlConn)
    _MySQL_EndLibrary()

    [/autoit]

    Ob du jetzt damit was anfangen kannst oder damit was bestimmtest "findest", ist dir überlassen ;)

    €dit:
    Achja, hier: http://www.autoitscript.com/forum/topic/85…ut-odbc/?page=1

    Simon nörgelt, Simon nervt - aber Simon verbessert die Welt. Glaubt er.

    3 Mal editiert, zuletzt von x0r (8. Mai 2015 um 10:16)

  • Oracle stellt dafür Tools zur Verfügung.

    Ruf an der Kundenhotline an oder schreib eine Mail an den Support, oder finde die Tools auf der Oracle-Site selbst.

    Ja das ist mir bekannt, jedoch suche ich zuerst nach eine Möglichkeit mit Windows eigenen Funktionen eine Verbindung aufzubauen.

    Ohne "usw.", nur mit der Eingabe von "connect to oracle server without odbc" in Google habe ich auf den ersten beiden Seiten 10 (IN WORTEN ZEHN ! ) Treffer zum Thema gefunden!


    Über die Möglichkeiten per Excel/Access will ich garnicht reden, OpenOffice wickelt das übrigens genauso problemlos ab....

    Evtl. habe ich mich falsch ausgedrückt? Ich suche nach einer Möglichkeit ohne ODBC... Bei diesem Suchbegriff bekomme ich nur Möglichkeiten aufgelistet über eine ODBC Verbindung.

    Von Bugfix habe ich den Tipp bekommen die Verbindung über ADO oder OLE herzustellen. Hier ein BSP. von BugFix für eine ADO Verbindung.

    [autoit]


    Local $hConn, $hRS, $sSQL
    $hConn = ObjCreate("ADODB.Connection")
    With $hConn
    .ConnectionString = "Provider=MSDAORA;" & _
    "Data Source=ORCL10G;" & _
    "User ID=System;Password=oracle;"
    .Open
    EndWith
    $hRS = ObjCreate("ADODB.Recordset")
    $sSQL = "select * from Daten.emp"
    $hRS.Open($sSQL, $hConn, 3, 3)

    [/autoit][autoit][/autoit][autoit]

    ; Zugriff auf Felder mit $hRS("FELDNAME"), z.B.
    $name = $hRS("Name")

    [/autoit][autoit][/autoit][autoit]

    $hRS.Close
    $hConn.Close

    [/autoit]

    Jedoch verstehe ich nicht wo ich im Connection String die IP und Port eingeben muss. Ich habe es damit bereits versucht und bekomme immer ein Ausnahme Fehler :(

    Da gabs glaube ich mal ne spezielle UDF, hatte mal was gebaut damit, ist allerdings schon über 2 Jahre her

    Mit dieser UDF arbeite ich bereits erfolgreich. Jedoch dachte ich funktioniert dies nur mit MySql? Oder muss ich in der UDF etwas bestimmtes anpassen, damit das funktioniert?

    Wenn man nichts installieren kann, hat das ja bestimmt seinen Grund!

    @bernd670 Tschuldige meine pampige Antwort. Es hat einfach den folgenden Grund, dass dies auf mehreren PC's (>= 2000) installiert werden muss, die Installation an sich ist zwar rein technisch kein Problem, jedoch sind das zusätzliche Budget-kosten, Papierkram und eine lange Bearbeitungszeit... Deswegen möchte ich dies am besten ohne Installationen lösen.

    Vielen Dank für eure Hilfe.

    • Offizieller Beitrag

    Ich selber habe kein Oracle zur Verfügung und hatte dir deshalb nur ein Bsp. aus dem Web portiert.
    Du hattest noch gefragt, was MSDAORA bedeutet, nun das ist der Microsoft OLE DB-Provider für Oracle, ich vermute das ist abgeleitet aus MicroSoftDataAccessORAcle.
    Google mal speziell nach MSDAORA, da sollten einige Problemlösungen zu finden sein.

  • @BugFix vielen Dank für den Tip!!!

    Ich habe nun unter Windows Vista 32 Bit mit folgendem Code eine Verbindung aufbauen können.

    Spoiler anzeigen
    [autoit]


    #include <array.au3>

    [/autoit] [autoit][/autoit] [autoit]

    $oMyError = ObjEvent("AutoIt.Error","MyErrFunc")
    $sqlCon = ObjCreate("ADODB.Connection")

    [/autoit] [autoit][/autoit] [autoit]

    ;----------------------------------------------------------------------------------------------/
    ; DB Connection
    ;----------------------------------------------------------------------------------------------/
    Local $aResult, $iRows, $iColumns, $vQuery
    Local $s_server = '111.111.111.11'
    Local $s_port = '1337'
    Local $s_dbName = 'dbname'
    Local $s_user = 'user'
    Local $s_pw = 'password'

    [/autoit] [autoit][/autoit] [autoit]

    $sqlCon.Mode = 16
    $sqlCon.CursorLocation = 3
    $sqlCon.Open ( _
    "Provider = MSDAORA;" & _
    "Data Source =" & _
    "(DESCRIPTION =" & _
    "(ADDRESS_LIST =" & _
    "(ADDRESS =" & _
    "(PROTOCOL= TCP)" & _
    "(Host="&$s_server&")" & _
    "(Port= "&$s_port&")" & _
    ")" & _
    ")" & _
    "(CONNECT_DATA =" & _
    "(SERVICE_NAME = "&$s_dbName&")" & _
    ")" & _
    ");" & _
    "User Id="&$s_user&";" & _
    "Password="&$s_pw&";")

    [/autoit] [autoit][/autoit] [autoit]

    If @error Then
    MsgBox(0, "ERROR", "Failed to connect to the database")
    Exit
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    $vQuery = "SELECT * FROM Tablename"

    [/autoit] [autoit][/autoit] [autoit]

    _SQL_GetTable2D($sqlCon, $vQuery, $aResult, $iRows, $iColumns)
    _ArrayDisplay($aResult)

    [/autoit] [autoit][/autoit] [autoit]

    Exit

    [/autoit] [autoit][/autoit] [autoit]

    Func _SQL_GetTable2D($hConHandle, $vQuery, ByRef $aResult, ByRef $iRows, ByRef $iColumns)

    [/autoit] [autoit][/autoit] [autoit]

    $SQLErr = ""
    Local $i, $x, $y, $objquery

    [/autoit] [autoit][/autoit] [autoit]

    $iRows = 0
    $iColumns = 0
    ;sp mod removed handle check here use function.
    $objquery = _SQL_Execute($hConHandle, $vQuery)
    ;end mod
    If @error Then
    $SQLErr = "Query Error"
    Return SetError($SQL_ERROR, 0, $SQL_ERROR)
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    If $objquery.eof Then
    $SQLErr = "Query has no data"
    $objquery = 0 ;sp mod
    Return SetError($SQL_ERROR, 0, $SQL_ERROR)
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    With $objquery

    [/autoit] [autoit][/autoit] [autoit]

    $aResult = .GetRows()

    [/autoit] [autoit][/autoit] [autoit]

    If IsArray($aResult) Then
    $iColumns = UBound($aResult, 2)
    $iRows = UBound($aResult)

    [/autoit] [autoit][/autoit] [autoit]

    ReDim $aResult[$iRows + 1][$iColumns];Adjust the array to fit the column names and move all data down 1 row

    [/autoit] [autoit][/autoit] [autoit]

    For $x = $iRows To 1 Step -1
    For $y = 0 To $iColumns - 1
    $aResult[$x][$y] = $aResult[$x - 1][$y]
    Next
    Next
    ;Add the coloumn names
    For $i = 0 To $iColumns - 1 ;get the column names and put into 0 array element
    $aResult[0][$i] = .Fields($i).Name
    Next

    [/autoit] [autoit][/autoit] [autoit]

    Else
    $SQLErr = "Unable to retreive data"
    $objquery = 0 ;sp mod
    Return SetError($SQL_ERROR, 0, $SQL_ERROR)
    EndIf;IsArray()

    [/autoit] [autoit][/autoit] [autoit]

    EndWith
    $objquery = 0
    Return SetError($SQL_OK, 0, $SQL_OK)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func MyErrFunc()
    $HexNumber=hex($oMyError.number,8)
    Msgbox(0,"COM Test","We intercepted a COM Error !" & @CRLF & @CRLF & _
    "err.description is: " & @TAB & $oMyError.description & @CRLF & _
    "err.windescription:" & @TAB & $oMyError.windescription & @CRLF & _
    "err.number is: " & @TAB & $HexNumber & @CRLF & _
    "err.lastdllerror is: " & @TAB & $oMyError.lastdllerror & @CRLF & _
    "err.scriptline is: " & @TAB & $oMyError.scriptline & @CRLF & _
    "err.source is: " & @TAB & $oMyError.source & @CRLF & _
    "err.helpfile is: " & @TAB & $oMyError.helpfile & @CRLF & _
    "err.helpcontext is: " & @TAB & $oMyError.helpcontext _
    )
    SetError(1) ; to check for after this function returns
    Endfunc

    [/autoit] [autoit][/autoit] [autoit][/autoit]


    Jedoch hab ich nun das Problem mit Windows8.1 64 Bit. Hierbei bekomme ich die Fehlermeldung:


    Unter "C:\Program Files\Common Files\System" ist der Ordner Ole DB vorhanden?

    Vielen Dank für eure Hilfe.

  • Genau das ist der springende Punkt: MSDAORA ist eine 32bit-Dll und es gibt keine 64bit-Version. Der Support dafür wurde von M$ auch eingestellt, die verweisen nur noch auf den Oracle-Treiber.

    Genau auf dieses Ergebnis bin ich gestern auch gestoßen. Nun versuche ich herauszufinden, ob ich davon nur einpaar dll Dateien brauche um eine Verbindung herzustellen oder eine komplette Installation zwingend notwendig ist.

    Eine andere Frage, kann man MSDAORA dennoch benutzen wenn man das Script als x86 durchführt und die alle notwendigen dll Dateien mitgibt?