Danke Funktioniert nun prima
MySQL UDF - mit libmySQL.dll (kein ODBC)
-
progandy -
7. August 2007 um 14:17
-
-
Hi...
Bin bei mir in der Firma eine Software am entwickeln, die aus mehreren MSSQL DBs daten ausließt und diese in eine MySQL DB schreibt... Jetzt habe ich das Problem das die Software 24h läuft und die Daten alle 5 min Aufbereitet...leider gibt es dabei ein Problem mit dem Arbeitsspeicher... denn nach ca. 1 Tag ist der auf satte 2 GB nur für für den Prozess meiner Software angewachsen... Woran kann das liegen? kann mir das echt nicht erklären... nach den Arrays habe ich schon geguckt das die auch alle wieder geleert werden... Ich habe leicht die vermutung das bei einem MYSQL Query immer der Speicher steigt? Ich habe mir mal versucht das ganze mit ProcessGetStats() rauszufiltern. Nur leider wird es extrem unübersichtlich durch sehr viele While...
Ich kann auch leider den ganzen Code nicht Posten, da er eh nur mit den DBs arbeitet... Kann aber mal Teile reinstellen...
Also wenn jemand weiß wo ich am besten mal nachguckeHier ist mal nen kleiner Auszug aus meiner Preformance Log
SQL
Alles anzeigen1 - 10.29296875 - 10.29296875 - nach Start 2 - 10.3359375 - 0.04296875 - 3 - 14.82421875 - 4.48828125 - 4 - 15.14453125 - 0.3203125 - 5 - 16.3828125 - 1.23828125 - nach _MainSecurity_check() 6 - 16.42578125 - 0.04296875 - nach _ReadSettingsFromDB() 7 - 16.44140625 - 0.015625 - nach erfolgreich gestartet 8 - 16.44140625 - 0 - 9 - 16.44140625 - 0 - vor _complete_OPT_refresh() 10 - 34.82421875 - 18.3828125 - _Update_OPT_Daten() - ENDE 11 - 34.82421875 - 0 - nach _complete_OPT_refresh()
Im Prinzip ist Schritt 1 - 7 der Startvorgang und Schritt 9 - 11 wiederholt sich alle 5 min .... und jedes mal kommen die ca. 18 MB im Arbeitsspeicher dazu...
das verstehe ich nicht... mal gucken ich kann wenn einer sie Braucht die _complete_OPT_refresh() Funktion + Unterfunktionen mal Posten...Danke schonmal
MFG chris
-
Also entweder könnte das an ungeschlossenen Ergebnissätzen der MySQL.au3 liegen oder eventuell auch an den MSSQL-Objekten. Ohne den Quellcode ist das aber ein reines Ratespiel.
-
Servus
hier mal das Script... Es kann halt nur keiner laufen lassen weil die ganzen DBs fehlen...
im Anhang...
MFG chris
-
Du hast vergessen, die Ergebnisemenge nach Benutzung wieder frei zu geben:
[autoit]_MySQL_Real_Query($MysqlConn, $MySQL)
[/autoit]
$res = _MySQL_Store_Result($MysqlConn)
$array = _MySQL_Fetch_Result_StringArray($res)
_MySQL_Free_Result($res) ; <==== DAS FEHLT
Außerdem musst du am Ende die Verbindung beenden (am besten in AutoItExitFunc):
_MySQL_Close($MysqlConn)
und die MySQL-Library beenden:
_MySQL_EndLibrary() -
super danke das werde ich mal testen...
Wenn ich nur nen Query habe und kein StoreResult muss ich dann auch leeren?
EDIT: DANKE das wars ..... Klasse echt !!!
SQL
Alles anzeigen1 - 10.30859375 - 10.30859375 - 2 - 10.3515625 - 0.04296875 - 3 - 14.83984375 - 4.48828125 - 4 - 15.15234375 - 0.3125 - 5 - 16.38671875 - 1.234375 - nach _MainSecurity_check() 6 - 16.38671875 - 0 - vor _ReadSettingsFromDB() 7 - 16.38671875 - 0 - nach _ReadSettingsFromDB() 8 - 16.390625 - 0.00390625 - nach erfolgreich gestartet 9 - 16.390625 - 0 - 10 - 16.390625 - 0 - 11 - 18.71875 - 2.328125 - _Update_OPT_Daten() - ENDE 12 - 18.71875 - 0 - nach _complete_OPT_refresh(1) 13 - 18.71875 - 0 - 14 - 18.71875 - 0 - 15 - 18.71875 - 0 - _Update_OPT_Daten() - ENDE 16 - 18.71875 - 0 - nach _complete_OPT_refresh(2) 17 - 18.71875 - 0 - 18 - 18.71875 - 0 - 19 - 18.71875 - 0 - _Update_OPT_Daten() - ENDE 20 - 18.71875 - 0 - nach _complete_OPT_refresh(3)
Jetzt sind nach dem 1 mal Update keine veränderungen am Arbeitsspeicher mehr zu sehen....
MFG chris
-
ein FreeResult musst du nur machen, wenn du ein Ergebnis hast.
-
Schöne Sache, aber zwei Fragen:
- Im Startpost steht was von einer x64 dll, ich kann diese aber im package nicht finden... wie funktioniert das mit 64bit systemen ?
- Ich will ein einzelnes Feld zurückgeben lassen. Das mache ich z.bsp. per query "SELECT rly FROM banlg WHERE hdwid = '998685592392330'". WIe benutze ich nun Fetch_Field, um das feld wiederzugeben ? Bisher gibt er mir nur Murks zurück... Etwaige Parameter fehlen mir ebenfalls...
-
Schöne Sache, aber zwei Fragen:
Im Startpost steht was von einer x64 dll, ich kann diese aber im package nicht finden... wie funktioniert das mit 64bit systemen ?Irgendwie hat der Upload nicht geklappt. Jetz sollte es stimmen. Vielen Dank für die Meldung
Ich will ein einzelnes Feld zurückgeben lassen. Das mache ich z.bsp. per query "SELECT rly FROM banlg WHERE hdwid = '998685592392330'". WIe benutze ich nun Fetch_Field, um das feld wiederzugeben ? Bisher gibt er mir nur Murks zurück... Etwaige Parameter fehlen mir ebenfalls...
Fetch_Field gibt nur die Informationen zu einem Feld zurück. Du musst schon fetch_row verwenden oder fetch_row_stringarray.
Was für Parameter fehlen dir denn? Ich habe die Funktionen 1:1 aus der DLL genommen und ein paar zusäzliche erstellt. -
Guten Tag,
Ich habe mit MySQL einen kleinen Chat gebastelt, mit dem ich mit meinen freunden auf der Arbeit kommunizieren kann.
nun haben jedoch einige probleme beim Verbinden.
Meine 1. Vermutung liegt darin, dass der MySQL-Port bei der Firewall gesperrt ist, denn ich habe so ein Microsoft Firewall Client, wenn ich den abschalte funktionierts bei mir auch nicht, ist es irgendwie möglich der Firewall etwas mitzugeben, dass ich da durch komme?
Meine 2. Vermutung liegt darin, dass ich die Proxy-Einstellungen beim Verbinden nicht mitgebe, ist es möglich, diese irgendwie mitzugeben?freundliche Grüsse
V3xX -
Hallo,
ich weiß nicht ob hier überhaupt noch jemand Support zu dem MySQL-Script anbietet aber ich frage einfach trotzdem mal nach!
und zwar hab ich ein sehr seltsames Problem mit dem Script.
Ich kann mich auf meinen MySQL-Server (gemieteter Root-Server) verbinden und auch Werte in die Datenbank einfügen.
Mache ich allerdings eine "SELECT"-Abfrage, so bekommt AutoIT keine Antwort vom Server (also kein ergebnis der Abfrage)
Dass Programm läuft allerdings auf meinem Home-PC mit lokalen datenbank. Da die Software allerdings für mehrere Leute gedacht ist, benötige ich einen Zugang übers Internet.kann mir wer helfen an was es evtl liegne könnte? (vllt ein Firewall-Problem?)
Danke und Gruß
4Soldier93 -
Hallo,
Ich kann dir keine Lösung für das Problem anbieten. Funktioniert die Verbindung über andere Tools wie z.B. MySQL Workbench? http://www.mysql.de/downloads/workbench/
-
Geht leider auch nicht!<br><br>Folgende Fehlermeldung bei außwahl einer tabelle:<br><br>Error: `F4R`.`Laender`: table data is not editable because there is no primary key defined for the table<br><br>Was ist hier das Problem??<br><br>habe beim Root-Server eig. nichts anders gemacht als lokal auf meinem PC (sind die gleichen SQL-Befehle)?? (Außer dass ich Windows und der Server linux hat)<br><br>## EDIT:<br>na Super. Bei der MySQL-Version benötigt man, warum auch immer, einen Primary key<img src="wcf/images/smilies/squint.png" wcf_src="wcf/images/smilies/squint.png" alt="^^"><br><br>Jetzt läuft alles <img src="http://www.autoit.de/wcf/images/smilies/smile.png" wcf_src="http://www.autoit.de/wcf/images/smilies/smile.png" alt=":)"><br><br>## EDIT2:<br>Naja, geht mit AutoIt doch nicht :/<br>
-
JEDE Tabelle sollte einen Primärschlüssel haben, vor allem bei Löschoperationen und beim Bearbeiten ist das von Vorteil, da der Eintrag nur 1x gesucht werden muss: Eintrag suchen, Eintrag bearbeiten -> Eintrag anhand von ID ohne suchen speichern
-
Sry, das mein letzter Edit die Formatierung verhackt hat. Keine Ahnung was mein Browser da schon wieder gemacht hat -.-
Auf jedenfall tut es doch noch nicht. Mein Script erhält immer noch keine Ergebnise
Edit1:
Bin noch Datenbanken anfänger^^
Entschuldige meine UnwissenheitEdit2:
Was ich vergessen habe zu erwähnen!
Workbench kann nun Ergbnisse auslesen und zeigt mir alle Werte an. Aber auch NUR Workbench. AutoIt leider nicht -
Jetzt hab ich den Fehler gefunden
Au man, was für ein gesuche
Bei der MySQL-Datenbank auf Linux wird Groß- Kleinschreibung beachtet.
danke für die Hilfe Progandy
-
Hallo,
die DLL-Variante ist 'ne prima Alternative zur ODBC-Variante.
[autoit]
Jedoch bringt mir_MySQL_Real_Connect()
[/autoit]immer eine MsgBox mit dem Titel "Error" und dem Inhalt "0".
[autoit]
In der Funktion aus der MySQL.au3 wird dieser Wert offenbar durchDLLCall()
[/autoit]generiert.
Habt ihr eine Idee, woran das liegen könnte ?
Beim Provider habe ich den externen Zugriff auf die MySQL-Datenbank zugelassen.Viele Grüße, und DANKE im Vorraus !!!
sgfan -
Du musst schon den entsprechenden Codeausschnitt einstellen, so hab ich keine Anhaltspunkte.
-
Hallo progandy,
hier der Quelltext:
[autoit]
[/autoit][autoit][/autoit][autoit]
;MySQL-Verbindung
Local $db_connection_data[5] ;Array für MySQL-Verbindungsdaten
$db_connection_data[0] = "<MySQL-Server>" ;MySQL-Server
$db_connection_data[1] = "<MySQL-Benutzer>" ;MySQL-User
$db_connection_data[2] = "<MySQL-Passwort>" ;MySQL-Passwort
$db_connection_data[3] = "<MySQL-Datenbank>" ;MySQL-Datenbank
$db_connection_data[4] = "3306" ;Datenbank-PortGlobal $mysql = _MySQL_InitLibrary() ;MySQL starten
[/autoit]
Global $db_connection = _MySQL_Init() ;MySQL initialisieren
$connected = _MySQL_Real_Connect($db_connection, $db_connection_data[0], $db_connection_data[1], $db_connection_data[2], $db_connection_data[3], $db_connection_data[4]) ;MySQL-Verbindung herstellen
If $connected = 0 Then ;prüfen, ob Verbindung erfolgreich hergestellt wurde
$errno = _MySQL_errno($db_connection)
MsgBox(0,"Error", $errno & @LF & _MySQL_error($db_connection)) ;Ausgabe einer Fehlermeldung
If $errno = $CR_UNKNOWN_HOST Then
MsgBox(0,"Error", "$CR_UNKNOWN_HOST" & @LF & $CR_UNKNOWN_HOST) ;Ausgabe einer Fehlermeldung
_exit() ;Programm beenden
EndifViele Grüße
sgfan -
Verwendest du AutoIt im 64bit-Modus? Füge mal noch eine @error-Abfrage nach jedem _MySQL-Aufruf ein. Wo kommt der erste Fehler?
Und eventuell reicht dir auch EzMysql, das hat eine etwas vereinfachte API
-