Microsoft SQL UDF

  • Hallo!

    Wir setzen bei uns in der Firma auf MS SQL (Microsoft SQL Server)
    da liegt es nach Datenbank gestützte Scripte auch über diese Server laufen zu lassen.

    Dazu habe ich mir eine MSSQL UDF gebastelt die von den MySQL UDF's aus dem Englischen Forum abgekupfert habe.

    Diese Funktionen sind sicher noch erweiterbar aber fürs erste sollte es reichen.

    - MSSQL.au3


    - Beispiel

    [autoit]

    #include "mssql.au3"

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

    $sql = _SQLCon("127.0.0.1", "user", "pass", "database")
    $var = _SQLQuery($sql, "Select * From GR_SELEKTION WHERE VORNAME='Klaus'")

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

    With $var
    While Not .EOF
    MsgBox(0, 'Output', .Fields("Nachname").value)
    .MoveNext
    WEnd
    EndWith
    _SQLEnd($sql)

    [/autoit]

    Ich werde sicher diese UDF's noch weiter verfeinern sprich Updates folgen.

    Mfg Aiden

  • Hallo Aiden,

    gibt es mittlerweile schon Updates zu Deiner mssql.au3?

    Nutzt Du AutoIt noch zur Abfrage vom 2000er SQL-Server oder machst Du das mittlerweile anders?

    Wäre toll, wenn Du uns mal ein paar Tipps posten könntest.

    Danke.

  • Hallo...
    Ja es müsste schon eine aktuellere version geben.
    Nutze diese aber nicht weil sich der Syntax geändert hat und sich so ein haufen von Scripten abändern müsste.


    Aber ich nutze dieses Script noch für MSSQL 2000.
    Hast du denn probleme mit dem Script?

  • Hallo,

    nein keine Probleme.

    Ich dachte nur, Du hättest mittlerweile ein paar Erweiterungen oder tolle Funktionen die man gleich einsetzen könnte.

    Hast Du denn eine aktuellere Version?

  • Nein habe ich leider so nicht da... müsste es aber im englischen forum geben...

    Ich denke nicht das ich es weiter entwickeln werde... da ich nicht mehr all zu viel mit AutoIt zu tun habe.

    Aber jeder ist herzlich dazu eingeladen meine Scripte weiter zu entwickeln.

    Bei dringendem Bedarf nach Hilfe oder zu Fragen stehe ich jedoch zu verfügung.

  • beim Verbindungsversuch kommt bei mir immer:

    Zitat

    C:\Dokumente und Einstellungen\fpr\Desktop\autoit\barcode\barcode.au3 (180) : ==> The requested action with this object has failed.:
    $sqlCon.Open("Provider=SQLOLEDB; Data Source=" & $scIP & "; User ID=" & $scUser & "; Password=" & $scPass & "; database=" & $scDB & ";")
    $sqlCon.Open("Provider=SQLOLEDB; Data Source=" & $scIP & "; User ID=" & $scUser & "; Password=" & $scPass & "; database=" & $scDB & ";")^ ERROR

    ich nutze das UDF oben und habe ein SQL ODBC Verbindung. Muß ich da irgendwas bestimmtes beachten?

    [autoit]


    Global $scIP = "192.168.1.1"
    Global $scUser = "fpr"
    Global $scPass = "***************"
    Global $scDB = "IPTEST"

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

    $sql = _SQLCon($scIP, $scUser, $scPass, $scDB)
    MsgBox(262144,'Debug line ~' & @ScriptLineNumber,'Selection:' & @lf & '$sql = _SQLCon($scIP, $scUser, $scPass, $scDB)' & @lf & @lf & 'Return:' & @lf & $sql = _SQLCon($scIP, $scUser, $scPass, $scDB)) ;### Debug MSGBOX

    for $i = 0 to $status
    $test = _GUICtrlEdit_GetLine($inp_barcode, $i)
    MsgBox (64, "", $test)
    ;_SQLQuery($sql, " kommt noch....

    Next

    _SQLEnd($sql)

    [/autoit]

    funktioniert die Verbindung nur auf localhost ? 127.0.0.1 ?? Oder hat da jemand einen Tipp für mich?

    Danke
    Franz

    P.S. ist nur ein Ausschnitt des Script.. Aber hier entsteht der Fehler..

    ---
    In "Independence Day" konnten die Windows-Erdcomputer problemlos mit denen der Außerirdischen kommunizieren. Was sagt uns das über unseren lieben Bill Gates? :D
    ---

    • Offizieller Beitrag

    Füge mal das Error-Handling ein, das hilft dir weiter:

    [autoit]

    Global $oMyError = ObjEvent("AutoIt.Error","MyErrFunc") ; Initialize a COM error handler

    [/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 )
    EndIf
    Local $err = $oMyError.number
    If $err = 0 Then $err = -1
    Local $g_eventerror = $err
    Endfunc

    [/autoit]
  • Danke für die schnelle antwort. Habe es selber gelöst, indem ich diese UDF benutze.

    Es sind dort mehr Funktionen integriert.. Ich wollte das gerade berichten, aber Du warst schneller.
    ich nutze davon bisher nur das _SQLexecute und das funktioniert sehr gut.

    aber vielen Dank trotzdem

    Franz

    ---
    In "Independence Day" konnten die Windows-Erdcomputer problemlos mit denen der Außerirdischen kommunizieren. Was sagt uns das über unseren lieben Bill Gates? :D
    ---

  • Hallo Aiden, Hallo Alle
    ich benutze deine mssql.au3...
    Klappt auch wunderbar, nur bei dieser SQL_Abfrage sendet die mssql.au3 einen Fehler.
    Vielleicht hast du eine Idee wo hier der Hase im Pfeffer liegt!

    Ich hab das Gefühl es hat was mit dem AND zu tun..., weil ohne dem bekomme ich auch Werte zurück.

    SQL
    $var1 = _SQLQuery($sql, "select Adresse.ADR_Nummer,AdresseStatus.ADS_Bezeichnung," & _ 
    "Adresse.ADR_Name1,Adresse.ADR_Name2,Adresse.ADR_Strasse," & _ 
    "Adresse.ADR_PLZ,ORT_Bezeichnung,Nation.NAT_Bezeichnung" & _ 
    "From Adresse,AdresseStatus,Ort,Nation" & _ 
    "WHERE Adresse.ADR_AdresseID=AdresseStatus.ADS_AdresseStatusID" & _ 
    "AND Adresse.ADR_OrtID = Ort.ORT_OrtID" & _ 
    "AND Ort.ORT_NationID = Nation.NAT_NationID")

    Die Fehlermeldung:
    Line 32 ...mssql.au3
    Return $iSQLCon.execute($iQuery) ^ERROR
    Error: The requested action with this objekt has failed
    ########################

  • vergiss die Leerzeichen beim Umbruch der Strings nicht. Am besten jede Zeile mit einem Leerzeichen beginnen lassen, dann bist du auf der sicheren Seite ;).

  • Moin! Ich habe auch dieses seltsame problem.

    Die Fehlermeldung:
    Line 32 ...mssql.au3
    Return $iSQLCon.execute($iQuery) ^ERROR
    Error: The requested action with this objekt has failed
    ########################

    und dabei habe ich mir um die Funktionen überhaupt erst mal zu begreifen an einem Originalsript orientiert und dieses auf meine Datenbank angepasst.

    Also wenn ich das Script jetzt richtig verstanden habe, sollte er sich jedt in die Datenbank einloggen,

    Code
    $sql = _SQLCon("DJBeatstar-PC\SQLEXPRESS", "sa", "********", "ACCOUNT")

    und das Row mit dem wert "djbeatstar" im feld "StrUserID" aus der tabelle "dbo.TB_Users" suchen und in ein array in der variable "$var" ablegen

    Code
    $var = _SQLQuery($sql, "Select * From dbo.TB_Users WHERE StrUserID='djbeatstar'")

    danach sollte er dann den wert "JID" aus der row suchen und ausgeben.

    Code
    With $var 
    While Not .EOF 
    MsgBox(0, 'Output', .Fields("JID").value) 
    .MoveNext 
    WEnd 
    EndWith

    habe ich das jetzt richtig verstanden? wo ist mein fehler? habe das Script aus dem ersten post 1 zu 1 übernommen und nur die Werte auf meine Datenbank angepasst. Wo ist mein Fehler? bin am verzweifeln. ich kann einfach keinen fehler finden. bin auch noch nicht al zu erfahren in AutoIt und noch weniger in SQL. währe also für einen tipp oder einen Hinweis sehr dankbar. ;)


    OK. Hat sich erledigt Hab mich viel zu sehr in syntaxen verrannt, und dabei einen einfach Tippfehler übersehen. die Tabelle ist nicht "dbo.TB_Users" sonder "dbo.TB_User" :rofl:

    Einmal editiert, zuletzt von djbeatstar (28. November 2011 um 22:56)