wie verwende ich SQL Datenbank und ODBC mit autoit ?

  • Ich bräuchte eine kleine Anleitung wie ich eine SQL Datnebnak über ODBC verwenden kann.
    Ich habe schon im Forum gesucht aber nicht gefunden.

    Konkret wie mache ich eine Abfrage meine SQL Datenbank über Autoit.
    (Datenbank ist auf meinem Rechner)
    Daten die ich habe z.B.
    - User
    - Password
    - DSN
    - Server
    -Tabellennamen

    Jetzt würde ich gerne aus einer Tabelle einen Wert auslesen.

    Einmal editiert, zuletzt von TEKBUY (9. März 2012 um 18:31)

    • Offizieller Beitrag

    Hast du den ODBC-Treiber bereits installiert?
    Ich hänge mal eine Anleitung für Firebird-ODBC an, ist bei anderen Datenbanken analog.
    Wie du die Daten mit dem ODBC-Treiber ansprichst, findest du in der Hilfe zum Treiber
    Hier mal ein Bsp.

    Spoiler anzeigen
    [autoit]

    #include<array.au3>

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

    #region - Allgemeine Deklaration
    Global $oMyError = ObjEvent("AutoIt.Error","MyErrFunc") ; Initialisieren COM error handler
    #endregion

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

    #region - Database Deklaration (im Bsp. Firebird)
    ; Datenbank:
    Global $data_source = "C:/GDILine/Daten/GDI.GDB"

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

    ; Verbindungsstring:
    Global $strConnection = "DRIVER=Firebird/InterBase(r) driver; UID=SYSDBA; PWD=masterkey; DBNAME=" & $data_source & ";"

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

    ; SQL-String zum Auslesen Feld NAME1 für einen Kunden aus Tabelle Kunden
    Global $sql_str = "Select NAME1 from Kunden where KUNDENNR = 10008;"
    Global $array
    #endregion - Database

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

    #region - Beispielsprogramm
    ; DB-Verbindungsobjekt wird erstellt:
    $oConn = _oSQLDB_Connect($strConnection)
    If @error Then Exit MsgBox(0, 'Datenbank', 'keine Verbindung')

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

    ; Ausführung eines SQL-Statements mit Methode Execute ==> liefert Recordset zurück:
    $oRecSet = _oSQLDB_Execute($oConn, $sql_str)
    If @error Then
    MsgBox(0, 'Execute', 'Fehler Beim Ausführen des SQL-Statements')
    _close()
    EndIf

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

    ; Recordset in Array wandeln:
    $array = $oRecSet.GetRows
    If Not IsArray($array) Then
    MsgBox(0, 'Array', 'kein Ergebnis')
    _close()
    EndIf
    _ArrayDisplay($array)

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

    _close()

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

    Func _close()
    If IsObj($oRecSet) Then _oRecSet_Close($oRecSet)
    If IsObj($oConn) Then _oSQLDB_Close($oConn)
    Exit
    EndFunc
    #endregion - Beispielsprogramm

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

    #region - Functions
    ;===============================================================================
    ; Function Name: _oSQLDB_Connect($connStr)
    ; Description:: erstellt eine Objektreferenz auf die im $connStr angegebene Datenbank
    ; Parameter(s): $connStr Connection-String enthält die Verbindungsparameter
    ; Return Value(s): Erfolg Referenz des ADODB-Objektes
    ; Fehler 1, @error 1
    ;===============================================================================
    Func _oSQLDB_Connect($connStr)
    Local $objConnection = ObjCreate("ADODB.Connection")
    If Not IsObj($objConnection) Then Return SetError(1,0,1)
    $objConnection.Open($connStr)
    Return $objConnection
    EndFunc ;==>_oSQLDB_Connect

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

    ;===============================================================================
    ; Function Name: _oSQLDB_Execute($oConn, $strCommand, $Options=-1)
    ; Description:: führt Kommandostring (SQL-Sequenz) aus
    ; Parameter(s): $oConn Referenz des Connection-Objektes
    ; $strCommand Kommandostring
    ; optional $Options CommandTypeEnum (http://msdn.microsoft.com/en-us/library/ms675946(VS.85).aspx) oder
    ; ExecuteOptionEnum (http://msdn.microsoft.com/en-us/library/ms676517(VS.85).aspx)
    ; Return Value(s): Eine Recordset Objekt-Referenz, ein Stream oder Nichts
    ;===============================================================================
    Func _oSQLDB_Execute($oConn, $strCommand, $Options=-1)
    Local $recAffected
    Return $oConn.Execute($strCommand, $recAffected, $Options)
    EndFunc ;==>_oSQLDB_Execute

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

    ;===============================================================================
    ; Function Name: _oRecSet_Close($oRecSet)
    ; Description:: Beendet ein RecordsetObjekt
    ; Parameter(s): $oRecSet Referenz des Objektes
    ;===============================================================================
    Func _oRecSet_Close($oRecSet)
    $oRecSet.Close
    EndFunc ;==>_oRecSet_Close

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

    ;===============================================================================
    ; Function Name: _oSQLDB_Close($oConn)
    ; Description:: Beendet die Verbindung
    ; Parameter(s): $oConn Referenz des Connection-Objektes
    ;===============================================================================
    Func _oSQLDB_Close($oConn)
    $oConn.Close
    EndFunc ;==>_oSQLDB_Close

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

    Func MyErrFunc()
    Msgbox(0,"AutoItCOM Test","Ein COM-Fehler ist aufgetreten !" & @CRLF & @CRLF & _
    "err.description is: " & @TAB & $oMyError.description & @CRLF & _
    "err.windescription:" & @TAB & $oMyError.windescription & @CRLF & _
    "err.number is: " & @TAB & hex($oMyError.number,8) & @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 )
    Local $err = $oMyError.number
    If $err = 0 Then $err = -1
    Local $g_eventerror = $err
    Endfunc
    #endregion - Functions

    [/autoit]
  • Ja, einen ODBC Treiber habe ich schon Installiert aber einen SQL Server.
    Meine Datenbank ist von MS SQL Server 2005.

    Ist das egal?

  • Für alle die sich auch die Frage stellen.
    Hier der Connectionstring der bei mir geht.

    [autoit]


    Global $strConnection "Driver={SQL Server};Server=IP,Port;Database=Datenbankname;Uid=Benutzer;Pwd=Kennwort;"

    [/autoit]

    Nicht mehr gebraucht habe ich dann.

    [autoit]

    Global $data_source = "C:/GDILine/Daten/GDI.GDB"

    [/autoit]

    Einmal editiert, zuletzt von TEKBUY (29. Februar 2012 um 17:03)

  • Jetzt habe ich noch eine Lösung bei der die Abfrage dann auch weiter verwendet werden kann.
    Alles mit ? muss angepasst werden.

    [autoit]


    #include<array.au3>
    #include <string.au3>

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

    $adCN = ObjCreate("ADODB.Connection")
    $sql_server="?"
    $sql_db="?"
    $sql_user="?"
    $sql_pass="?"
    $adCN.Open("DRIVER={SQL Server};SERVER=" & $sql_server & ";DATABASE=" & $sql_db & ";uid=" & $sql_user & ";pwd=" & $sql_pass & ";")
    ;SQL Abfrage
    $query = $adCN.Execute("Select * from ? where ? = '?';")
    $ergebnis = ($query.Fields("?" ).Value)
    ConsoleWrite($ergebnis)

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

    3 Mal editiert, zuletzt von TEKBUY (2. März 2012 um 16:26)