AutoIT MySQL

  • Hallo,

    ich habe heute mal versucht mein AutoIT Script mit einem MySQL-Server zu verbinden (mein PC).
    Das hat auch geklappt. Jedoch klappt das Auslesen der Datenbank noch nicht so ganz.
    Ich bekomme folgenden Fehler:
    [Blockierte Grafik: http://www11.pic-upload.de/14.02.15/ggbmt1s779g1.png]

    Gemacht habe ich alles nach diesem Tutorial: [Link entfernt]

    (Verbindung klappt da: $oSQL = 0 ist.)

    Kann mir da bitte jemand helfen?

    Edit Oscar: Keine Links zu Botforen! Link entfernt!

    Einmal editiert, zuletzt von Oscar (14. Februar 2015 um 19:28)

    • Offizieller Beitrag

    Zeig mal dein Script.

  • Am Anfang habe ich das stehen:

    Code
    HotKeySet("{F3}", "_OnF3")

    Danach kommt das:

    Code
    #include <MySQL.au3>

    Direkt darunter:

    Code
    $oSQL = _MySQLConnect("keybinder","musterwort","autoit","localhost")

    Jetzt die Funktion:

    Und schließlich kommt die Hotkeyfunktion (erstmal nur zum testen uns verstehen des ganzen):

    Code
    Func _OnF3()
    
    
    $sTable1 = _SQL($oSQL,'SELECT * FROM autoit')
    MsgBox(0,"Text",$sTable1)
    
    
    EndFunc

    Die MySQL.au3 sieht so aus:

    Spoiler anzeigen

    Vielleicht sollte ich noch dazusagen das ich Autoit noch nicht lange mache und noch einiges zu lernen habe...

  • Rynow verwechselt wahrscheinlich MySQL mit SqLite.
    Dennoch wäre die Frage ob du den MySQL ODBC-Treiber installiert hast.
    Genauer die Version 3.51. Den nutzt die mysql.au3 um die Verbindung aufzubauen.

    Ansonsten sehe ich kein Error-Handling bei dir.
    Du führst die Funktion _Query aus ohne danach zu überprüfen ob der Aufruf überhaupt geklappt hat.
    Einfach mal hinter die _MySQLConnect und die _Query() ein If @error then Msgbox(48, "Fehler", "@error: " & @error & @CRLF & "@extended: " & @extended) könnte schon viel Licht ins Dunkel bringen wo der Fehler denn begründet liegt.

  • Wenn der ODBC-Treiber nicht gefunden wird, wird @error auf 2 gesetzt.
    @error=1 wird dann gesetzt, wenn keine Verbindung mit der Datenbank aufgebaut werden kann.

    Man kann einen COM-Error-Handler registrieren, welcher im Fehlerfall detailliertere Informationen ausspuckt.
    Ruf einfach mal folgendes auf und versuche anhand der Fehlermeldung herauszufinden was da konkret schief läuft:

    Spoiler anzeigen
    [autoit]

    #include <MySQL.au3>

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

    Global $oMySQLError = ObjEvent("AutoIt.Error", MyErrFunc)

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

    $oSQL = _MySQLConnect("keybinder", "musterwort", "autoit", "localhost")

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

    Func MyErrFunc()
    MsgBox(48, "COM-Fehler", StringFormat("description: %s\nwindescription: %s\nnumber: %s\nlastdllerror: %s\nscriptline: %s\nsource: %s\nhelpfile: %s\nhelpcontext: %s\nretcode: %s", _
    $oMySQLError.description, $oMySQLError.windescription, Hex($oMySQLError.number, 8), $oMySQLError.lastdllerror, $oMySQLError.scriptline, $oMySQLError.source, $oMySQLError.helpfile, $oMySQLError.helpcontext, $oMySQLError.retcode))
    EndFunc ;==>MyErrFunc

    [/autoit]


    Ist der Server vielleicht nur indirekt per SSL-Verbindung zu erreichen? sind Name und Passwort korrekt? Port korrekt?

  • @AspirinJunkie
    Ich betreue Zufällig einige MySQL / MS SQL Server in meiner täglichen Arbeit :) und da laufen auch einige Autoit MySQL Scripte aktiv. Aus Erfahrung sage ich, dass die ODBC Variante in bestimmten konstellationen Probleme macht und zum zweiten ist für die ODBC Variante immer eine Install des entsprechenden Treibers nötig.

    Zum Beispiel haben wir ein Auswertungstool für alle User (ca. 300) im Einsatz, welches entsprechende Daten in eine MySQL DB schreibt. Praktisch heißt das bei Nutzung über ODBC, ich müsste auf alle PC's den ODBC Treiber ausrollen, auch wenn das per Rollout geschiet ist das jede Menge arbeit!

    Diese kann man sich sparen, wenn man einfach die andere UDF nimmt.

    @Heavy
    poste doch mal dein komplettes script mit aktuellem Stand und benutze die Autoit Tags

    Gruß gmmg :)

  • Ich habe keine Wertung abgegeben welche UDF besser sei oder benutzt werden sollte.
    Darum ging es hier auch überhaupt nicht.

    Dein Post griff die Aussage aus dem Thread auf, dass der Fehler durch eine fehlende dll ensteht.
    Ich habe, um den User nicht in die falsche Richtung suchen zu lassen, darauf hingewiesen dass dies nicht der Grund sein kann, da er eine andere UDF verwendet.

    Ich betreue Zufällig einige MySQL / MS SQL Server in meiner täglichen Arbeit

    Ich zufällig auch ;) (wenn man MSSQL durch PostgreSQL ersetzt)

  • @AspirinJunkie
    das wurde von mir auch nicht so aufgefasst! Ich denke wir verstehen uns da blind :)
    Ich wollte dem Thread Ersteller aber auch aufzeigen, was er für Möglichkeiten hat. Wir kennen ja nicht seinen Einsatzbereich.

    Gruß gmmg ;)