mssql.au3 verloren ?

  • Habe ein kleines Problem, ich hatte mal eine recht komplexe mssql.au3 UDF gefunden, nicht nur der Connect da stand noch mehr drin...
    Nu ist die Datei weg, falls jemand die auch schon mal gefunden hat wäre schön wenn er die anhängen kann.

    Ich weiß nun gar nicht ob es mit der komplexeren klappt, der Auslöser zu Suchen war der, das ich einen Port mit angeben können muss.

    [autoit]

    ;SQL UDF
    #cs
    # # # # # # # # # # # # # # #
    # #
    # Microsoft SQL Function #
    # Written by Aiden #
    # Version 0.1 Beta #
    # #
    # # # # # # # # # # # # # # #
    #ce

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

    #cs
    Name der Funktion: _SQLCon
    Beschreibung: Stellt eine Verbindung zu einem Microsoft SQL Server her.
    Beispiel: $sql = _SQLCon(127.0.0.1, user, pass, MyDB)
    #ce

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

    Func _SQLCon($scIP, $scUser, $scPass, $scDB)
    $sqlCon = ObjCreate("ADODB.Connection")
    $sqlCon.Open("Provider=SQLOLEDB; Data Source=" & $scIP & "; User ID=" & $scUser & "; Password=" & $scPass & "; database=" & $scDB & ";")
    Return $sqlCon
    EndFunc

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

    #cs
    Name der Funktion: _SQLQuery
    Beschreibung: Setzt eine Abfrage an eine Datenbank des Microsoft SQL Servers ab.
    Beispiel: _SQLQuery($sql, "INSERT INTO (id, name, age) VALUES (1, admin, 55)")
    #ce

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

    Func _SQLQuery($iSQLCon, $iQuery)
    If IsObj($iSQLCon) Then
    Return $iSQLCon.execute($iQuery)
    EndIf
    EndFunc

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

    #cs
    Name der Funktion: _SQLEnd
    Beschreibung: Beendet die Verbindung zum Microsoft SQL Server
    Beispiel: _SQLEnd()
    #ce

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

    Func _SQLEnd($sqlCon)
    If IsObj($sqlCon) Then
    $sqlCon.close
    EndIf
    EndFunc

    [/autoit]

    Wie fummel ich den hier rein, einfach mit : oder ohne hinter IP? 192.168.123.55:1742 // 192.168.123.55 1742

    [autoit]


    $sql = _SQLCon($DB_Server & ":" & $DB_Server_Port, $DB_User, $DB_Pass, "master");$DB_Name)
    $var = _SQLQuery($sql, "select name from sysdatabases where sid <> 0x01")

    $sql = _SQLCon($DB_Server & "" & $DB_Server_Port, $DB_User, $DB_Pass, "master");$DB_Name)
    $var = _SQLQuery($sql, "select name from sysdatabases where sid <> 0x01")

    [/autoit][autoit]

    ]C:\Autoit\UDF\Mssql.au3 (20) : ==> 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
    ->14:23:29 AutoIT3.exe ended.rc:1
    +>14:23:30 AutoIt3Wrapper Finished

    [/autoit]

    Warum mault er da, es ist doch ein String hinterher, oder IP:Port Oder wie geben ich den sonst mit
    Mit OSQL würde es gehen aber dann muss ich die exe auch mit versteilen :(


    Gruß Dietmar

    EDIT:
    Naja im Prinzip ist mir schon klar waruim er gemault hat, aber irgendwie muss man ja versuchen die Infos mitzuugeben.
    Ich lasse es trotzdem stehen auch wenn es totaler Blödsinn ist.
    Mann kann es ohne den Port beim Connect nutzen wenn man die Registry vorher passend vorbereitet... :)
    Siehe dazu den nächsten Beitrag.

    Achtung Anfänger! :whistling:

    Betrachten des Quellcodes auf eigene Gefahr, bei Übelkeit,Erbrechen,Kopfschmerzen übernehme ich keine Haftung. 8o

    5 Mal editiert, zuletzt von Dietmar (4. Juli 2009 um 11:37)

  • [autoit]

    If $DB_Server_Port <> 1433 Then
    If RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Client\ConnectTo", $DB_Server) <> "DBMSSOCN," & $DB_Server & "," & $DB_Server_Port Then
    RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Client\ConnectTo", $DB_Server, "REG_SZ", "DBMSSOCN," & $DB_Server & "," & $DB_Server_Port)
    EndIf
    EndIf

    [/autoit]

    Ok so habe ich es nun gelöst.....

    in der IniDatei stehen die Server...incl. dem benötigten Port

    [Datenbankserver]
    Server1=1433
    Server2=1433
    Server3=1433
    Server4=9933
    Server5=1844
    Server6=1433

    Da hatte ich den Port wohlwissentlich direkt mit berücksichtigt, wusste aber nicht wie ich ihn hinterher übergebe.
    Wenn man im ODBC Administrator bei ClientConfig einen anderen Port auswählt, merkt er sich den ja auch für den Server. ;)

    Wenn also der Server vom Standard (1433) abweicht und einen anderen Port benötigt lese ich den Port aus der Inin aus und setze den dazugehörigen Regkey.
    Btw. es geht hier um SQL Authentifizierung.

    Hauptproblem also gelöst, wenn noch jemand eine komplexere mssql.au3 hat mehme ich sie gerne entgegen.

    OMG wo ich es gerade auf gelöst setzten wollte sehe ich das ich hier komplett falsch bin kann das jemand umparken ->
    Hilfe & Unterstützung

    Achtung Anfänger! :whistling:

    Betrachten des Quellcodes auf eigene Gefahr, bei Übelkeit,Erbrechen,Kopfschmerzen übernehme ich keine Haftung. 8o

    3 Mal editiert, zuletzt von Dietmar (4. Juli 2009 um 11:42)

  • Du kannst den Port auch im ConnectionString angeben, einfach mit einem Komma von der IP getrennt:

    Zitat von http://www.codeproject.com/KB/database/connectionstrings.aspx
    Code
    strConnect = _T("Provider=sqloledb;Network Library=DBMSSOCN;"
            "Data Source=130.120.110.001,1433;"
            "Initial Catalog=MyDatabaseName;User ID=MyUsername;"
            "Password=MyPassword;");
  • sowas in der Art habe ich ja versucht,
    bin es halt gewohnt das Socket mit IP:Port oder IP Port anzugeben.
    Bis mir ein Kollege dann sagte das es mit Komma getrennt wird, da aber die einzelnen Parameter schon mit Komma getrennt werden,
    habe ich dann nach einer anderen Lösung gesucht.
    Aber werde ich auch mal testen, schlimmer finde ich den Timeoutfeghler bei nicht erfolgreicher Anmeldung
    User nicht existent, IP/Port falsch ...
    Ich ping die jetzt schon vorher an um einigermassen sicherzustellen ob die Server abzufragen sind.

    Hintergrund es soll ein ODBC Pflege Tool werden und ich arbeite hier in einer Firma umgeben von VB Programmierern,
    da soll es doch recht fehlerrfrei laufen, erstmal ist es ein kleines Admin Tool, wenn es fertig ist sollen es aber auch alle anderen nutzen können..

    Achtung Anfänger! :whistling:

    Betrachten des Quellcodes auf eigene Gefahr, bei Übelkeit,Erbrechen,Kopfschmerzen übernehme ich keine Haftung. 8o

  • Die einzelnen Parameter werden im Connection-String mit Semikola getrennt, nicht Kommas. In der Registry ist das wohl anders :rolleyes:
    Und die COM-Fehlermeldungen kannst mit einem COM-Errorhandler abfangen. Ein Beispiel gibt es bei ObjEvent

  • Zitat

    Die einzelnen Parameter werden im Connection-String mit Semikola getrennt, nicht Kommas.


    Wo Du es sagst, bin es anders gewohnt habe von daher gar nicht so genau hingeschaut. :(

    Zitat

    In der Registry ist das wohl anders :rolleyes:


    Ist egal da wir das Socket ja auf den Host gemappt :), so fällt schon mal ein Komma wieder weg

    Zitat

    Und die COM-Fehlermeldungen kannst mit einem COM-Errorhandler abfangen. Ein Beispiel gibt es bei ObjEvent


    Das wiederum klingt interressant :D

    Achtung Anfänger! :whistling:

    Betrachten des Quellcodes auf eigene Gefahr, bei Übelkeit,Erbrechen,Kopfschmerzen übernehme ich keine Haftung. 8o