MySQl starten nach FileOpenDialog nicht möglich

  • Hallo,


    ich erstelle gerade ein Tool, dass Hostnamen und IP-Adressen aus einem Excel-Sheet einliest und in eine MySQL-Datenbank importiert. Bevor ich das jedoch mache, will ich erstmal überprüfen, ob es diesen Hostnamen bereits in der Datenbank gibt.
    Problem: wenn ich alles so ausführe, wie es im Code steht, dann bricht das Skript in der Funktion determineHosts beim Befehl
    _MySQL_InitLibrary()
    ab. Die Library befindet sich im Skriptverzeichnis und wird immer mit FileInstall mitgeliefert. Schließe ich somit aus. Die Daten für die SQL-Verbindung werden per Global Const nach den #include's und globalen Variablen-Definitionen definiert.
    Gleich vorweg. Der Zugriff auf die Datenbank funktioniert an anderer Stelle im gleichen Skript mit gleichem Query ohne Probleme (im Code aktuell auskommentiert). Selbst in der gleichen Funktion, 2 Zeilen bevor ich das Excelsheet öffne und einlese, kann ich den gleichen Select absetzen. Lasse ich den Part des Excelsheet-Einlesens weg, funktioniert auch der SQL-Befehl. Hier mal ein Ausschnitt des Codes:



    Und damit alle wissen, was sich hinter der Funktion "determineHosts" verbirgt. Es ist eine kleine Funktion, die als Parameter den SQL-Befehl, einen String (für evtl. Log-Einträge) und ein 2D-Array für die Ergebnisse entgegen nimmt.



    Was mache ich verkehrt? Vielleicht bin ich inzwischen AutoIt-Blind. Ein kleiner Anstoß in die richtige Richtung reicht schon. Bloß keine kompletten Lösungen. Danke. ;-)


    Nachtrag:
    Bei weiteren Test's hat sich herausgestellt, dass der Excelprozess, der durch _ExcelBookOpen gestartet wird, nicht mit _ExcelBookClose geschlossen wird. Erst, wenn das Skript beendet wird, wird auch der Excel-Prozess beendet. Gibt es eine Möglichkeit den Prozess anders zu schließen (kein ProzessClose, da noch weitere Excel-Prozesse mit gleichem Titel laufen könnten). Vielleicht eine Option -f wie force? Ich weiß, diese Option gibt es nicht. 8) Hat aber eigentlich nichts mit dem eigentlichen Problem zu tun.


    Nachtrag 2:
    Damit die Funktion trotzdem ein "halbwegs" akzeptables Ergebnis liefert, habe ich den SQL-Befehl geändert und an eine andere Position verschoben. Die SQL-Abfrage sieht jetzt so aus:



    $query = "SELECT * FROM mt2db_neu.netzdaten;"
    determineHosts($query, "Netzdaten des Schranks ermitteln", $edtSchrankArray) ; Abfrage ausführen


    Zuerst (eigentlich aus Versehen) direkt nach dem FileOpenDialog. Da stellte sich jedoch heraus, dass die Abfrage trotzdem nicht funktioniert. Anschließend habe ich den FileOpenDialog unter die Ausführung der SQL-Abfrage gesetzt und siehe da... es funktioniert. Bleibt am Ende also die Frage, Was macht dieser FileOpenDialog so dass eine SQL-Session nicht gestartet werden kann? Und werde ich jemals eine Antwort auf meine Fragen bekommen? Ich weiß, dass viele in diesem Forum helle Köpfchen sind. Aber den Grund für dieses Verhalten kennt wahrscheinlich niemand. ;(


    Nachtrag 3:
    Dieser Nachtrag untermauert eigentlich schon das, was ich im Nachtrag 2 geschrieben habe. Ich habe zum Test den FileOpenDialog entfernt und die Variable, in die der Dateiname geschieben wird, hardcoded gesetzt. Die Excel-Funktionen laufen durch und das anschließende SQL-Statement gibt auch das erwartete Ergebnis zurück.


    Gibt es eine Möglichkeit die Entwickler von AutoIt zu kontaktieren?

  • Hi,


    an alle, die sich den Kopf zerbrochen haben:


    Problem war, FileOpenDialog verändert bei Erfolg das Makro @WorkingDir und setzt den Wert auf das Verzeichnis, in dem die geöffnete Datei liegt. Da die Funktion _MySQL_InitLibrary() standardmäßig die dll im Arbeitsverzeichnis sucht, konnte die dll nicht gefunden werden. Es hat somit gereicht die Funktion zum initialisieren der MySQL-dll wie folgt aufzurufen:_MySQL_InitLibrary(@ScriptDir & "\libmysql.dll")


    Und wieder etwas schlauer. Der Thread kann also geschlossen werden. Danke trotzdem. 8)

  • Hier werden grundsätzlich keine Threads geschlossen, es genügt, wenn du den Präfix des Threads auf "gelöst" setzt.
    Dazu einfach den 1. Beitrag bearbeiten.

    There's a joke that C has the speed and efficieny of assembly language combined with readability of....assembly language. In other words, it's just a glorified assembly language. - Teh Interwebz


    C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do, you blow off your whole leg. - Bjarne Stroustrup
    Genie zu sein, bedeutet für mich, alles zu tun, was ich will. - Klaus Kinski