Diskussion zum Artikel "Wie man auf die MySQL-Datenbank von MQL5 (MQL4) aus zugreift" - Seite 8

 
Eugeniy Lugovoy:

Hallo James,

ich arbeite bei Upwork derzeit nur an einem großen Projekt. Daher habe ich derzeit nicht viel freie Zeit. Was ist das Problem, das du mit Libs hast? Wie kann ich dir helfen?

Hallo,

Ich habe es am Ende herausgefunden, aber trotzdem danke für die Bibliothek.... Sehr hilfreich!!

James
 

Warum hat nach dem Upgrade auf Build 890 mt4 alles aufgehört zu funktionieren?

Das Protokoll sagt, dass eine Zugriffsverletzung auf 0x00000000 in 'D:\MT4\MQL4\libraries\MQLMySQL.dll' gelesen wurde.

[Gelöscht]  
auch interessiert an ...
 
Itum:
auch interessiert an ...
Leute, ich werde versuchen, in den nächsten Tagen zu überprüfen.
 
Ich freue mich darauf!
 
alhimik7:
Ich freue mich darauf!

MT4 build 890 x32 gerade überprüft. Alles funktioniert.

Log der laufenden Testskripte:

2015.12.05 12:20:09.984 Script MySQL-005 EURUSD,H1: removed
2015.12.05 12:20:09.984 MySQL-005 EURUSD,H1: uninit reason 0
2015.12.05 12:20:09.984 MySQL-005 EURUSD,H1: Disconnected. Script done!
2015.12.05 12:20:09.984 MySQL-005 EURUSD,H1: Passed!
2015.12.05 12:20:09.984 MySQL-005 EURUSD,H1: Closing cursors...
2015.12.05 12:20:09.984 MySQL-005 EURUSD,H1: Cursor 4 was opened.
2015.12.05 12:20:09.984 MySQL-005 EURUSD,H1: Cursor 3 was opened.
2015.12.05 12:20:09.984 MySQL-005 EURUSD,H1: Cursor 2 was opened.
2015.12.05 12:20:09.984 MySQL-005 EURUSD,H1: Cursor 1 was opened.
2015.12.05 12:20:09.984 MySQL-005 EURUSD,H1: Connected! DBID#0
2015.12.05 12:20:09.984 MySQL-005 EURUSD,H1: Connecting...
2015.12.05 12:20:09.984 MySQL-005 EURUSD,H1: Host: 127.0.0.1, User: mt4, Database: mt4
2015.12.05 12:20:09.984 MySQL-005 EURUSD,H1: MQLMySQL v2.2 x32 Copyright © 2014, FxCodex Laboratory
2015.12.05 12:20:09.984 MySQL-005 EURUSD,H1: initialized
2015.12.05 12:20:09.968 Script MySQL-005 EURUSD,H1: loaded successfully
2015.12.05 12:20:04.484 Script MySQL-004 EURUSD,H1: removed
2015.12.05 12:20:04.484 MySQL-004 EURUSD,H1: uninit reason 0
2015.12.05 12:20:04.484 MySQL-004 EURUSD,H1: Disconnected. Script done!
2015.12.05 12:20:04.484 MySQL-004 EURUSD,H1: ROW[3]: id = 4, code = USDJPY, start_time = 2014.01.03 03:00:00
2015.12.05 12:20:04.484 MySQL-004 EURUSD,H1: ROW[2]: id = 3, code = EURJPY, start_time = 2014.01.02 00:02:00
2015.12.05 12:20:04.484 MySQL-004 EURUSD,H1: ROW[1]: id = 1, code = EURUSD, start_time = 2014.01.01 00:00:01
2015.12.05 12:20:04.484 MySQL-004 EURUSD,H1: ROW[0]: id = 123279852, code = ACCOUNT, start_time = 2015.12.05 12:20:00
2015.12.05 12:20:04.484 MySQL-004 EURUSD,H1: Rows affected: 4
2015.12.05 12:20:04.484 MySQL-004 EURUSD,H1: 4 row(s) selected.
2015.12.05 12:20:04.484 MySQL-004 EURUSD,H1: SQL> SELECT id, code, start_date FROM `test_table`
2015.12.05 12:20:04.484 MySQL-004 EURUSD,H1: Connected! DBID#0
2015.12.05 12:20:04.484 MySQL-004 EURUSD,H1: Connecting...
2015.12.05 12:20:04.484 MySQL-004 EURUSD,H1: Host: 127.0.0.1, User: mt4, Database: mt4
2015.12.05 12:20:04.484 MySQL-004 EURUSD,H1: MQLMySQL v2.2 x32 Copyright © 2014, FxCodex Laboratory
2015.12.05 12:20:04.484 MySQL-004 EURUSD,H1: initialized
2015.12.05 12:20:04.484 Script MySQL-004 EURUSD,H1: loaded successfully
2015.12.05 12:20:00.093 Script MySQL-003 EURUSD,H1: removed
2015.12.05 12:20:00.093 MySQL-003 EURUSD,H1: uninit reason 0
2015.12.05 12:20:00.093 MySQL-003 EURUSD,H1: Disconnected. Script done!
2015.12.05 12:20:00.093 MySQL-003 EURUSD,H1: Rows affected: 2
2015.12.05 12:20:00.093 MySQL-003 EURUSD,H1: Succeeded! 2 rows has been updated.
2015.12.05 12:20:00.078 MySQL-003 EURUSD,H1: Rows affected: 1
2015.12.05 12:20:00.078 MySQL-003 EURUSD,H1: Succeeded! 3 rows has been inserted by one query.
2015.12.05 12:20:00.031 MySQL-003 EURUSD,H1: Rows affected: 1
2015.12.05 12:20:00.031 MySQL-003 EURUSD,H1: Succeeded: INSERT INTO `test_table` (id, code, start_date) VALUES (123279852,'ACCOUNT','2015.12.05 12:20:00')
2015.12.05 12:20:00.031 MySQL-003 EURUSD,H1: Table `test_table` created.
2015.12.05 12:19:59.968 MySQL-003 EURUSD,H1: Connected! DBID#0
2015.12.05 12:19:59.953 MySQL-003 EURUSD,H1: Connecting...
2015.12.05 12:19:59.953 MySQL-003 EURUSD,H1: Host: 127.0.0.1, User: mt4, Database: mt4
2015.12.05 12:19:59.953 MySQL-003 EURUSD,H1: MQLMySQL v2.2 x32 Copyright © 2014, FxCodex Laboratory
2015.12.05 12:19:59.953 MySQL-003 EURUSD,H1: initialized
2015.12.05 12:19:59.953 Script MySQL-003 EURUSD,H1: loaded successfully
2015.12.05 12:19:55.531 Script MySQL-002 EURUSD,H1: removed
2015.12.05 12:19:55.531 MySQL-002 EURUSD,H1: uninit reason 0
2015.12.05 12:19:55.531 MySQL-002 EURUSD,H1: Disconnected. Script done!
2015.12.05 12:19:55.531 MySQL-002 EURUSD,H1: Table `test_table` created.
2015.12.05 12:19:55.218 MySQL-002 EURUSD,H1: Connected! DBID#0
2015.12.05 12:19:55.218 MySQL-002 EURUSD,H1: Connecting...
2015.12.05 12:19:55.218 MySQL-002 EURUSD,H1: Host: 127.0.0.1, User: mt4, Database: mt4
2015.12.05 12:19:55.218 MySQL-002 EURUSD,H1: MQLMySQL v2.2 x32 Copyright © 2014, FxCodex Laboratory
2015.12.05 12:19:55.218 MySQL-002 EURUSD,H1: initialized
2015.12.05 12:19:55.218 Script MySQL-002 EURUSD,H1: loaded successfully
2015.12.05 12:19:49.625 Script MySQL-001 EURUSD,H1: removed
2015.12.05 12:19:49.625 MySQL-001 EURUSD,H1: uninit reason 0
2015.12.05 12:19:49.625 MySQL-001 EURUSD,H1: All connections closed. Script done!
2015.12.05 12:19:49.625 MySQL-001 EURUSD,H1: Connected! DBID#2
2015.12.05 12:19:49.625 MySQL-001 EURUSD,H1: Connected! DBID#1
2015.12.05 12:19:49.625 MySQL-001 EURUSD,H1: Connected! DBID#0
2015.12.05 12:19:49.609 MySQL-001 EURUSD,H1: Connecting...
2015.12.05 12:19:49.609 MySQL-001 EURUSD,H1: Host: 127.0.0.1, User: mt4, Database: mt4
2015.12.05 12:19:49.609 MySQL-001 EURUSD,H1: MQLMySQL v2.2 x32 Copyright © 2014, FxCodex Laboratory
2015.12.05 12:19:49.609 MySQL-001 EURUSD,H1: initialized
2015.12.05 12:19:49.546 Script MySQL-001 EURUSD,H1: loaded successfully

Leute, klärt auf:

1. Bei welcher Operation gibt es"Access violation read" ?

2. Wenn das Skript MySQL-001 ausgeführt wird, welche Version von MQLMySQL wird auf der Registerkarte Experten angezeigt? sollte sein: MQLMySQL v2.2 x32 Copyright © 2014, FxCodex Laboratory

3. Welche Version der MySQL-Datenbank?

4. wird MySQL lokal oder auf einem entfernten Host verwendet?

5. Unter welchem Betriebssystem führen Sie das Terminal aus?

Bitte überprüfen Sie das und melden Sie sich, da ich den Fehler nicht reproduzieren kann.

Ich werde eine ähnliche Umgebung erstellen und testen.

 

Hallo,

Ich versuche, Metatrader mit Mysql über Ihre Dateien zu verbinden.
Nach dem Download und der Installation habe ich die Datei "MyConnection" geändert, indem ich die Info meiner DB gesetzt habe.

Jetzt kommt das Problem:

Zuerst hat alles gut funktioniert, die Skripte haben Tabellen in der DB erstellt. Dann nahm ich eine kleine Änderung im Code vor (ich änderte nur den Namen der Tabelle) und löschte die Tabelle aus der Datenbank, so dass das Skript eine neue Tabelle von Grund auf erstellen konnte, ohne die vorherige zu löschen. Und alles, was ich bekam, war die Erstellung der Spalten, aber ohne irgendwelche Daten.
Also beschloss ich, die alten Skripte erneut zu verwenden. Dann bekam ich nichts; nicht einmal eine Tabelle wurde erstellt. Seitdem habe ich eine DB, die leer bleibt.

Hat jemand eine Idee, was schief gelaufen sein könnte?

Vielen Dank im Voraus!

 
peg:

Hallo,

Ich versuche, Metatrader mit Mysql über Ihre Dateien zu verbinden.
Nach dem Download und der Installation habe ich die Datei "MyConnection" geändert, indem ich die Info meiner DB gesetzt habe.

Jetzt kommt das Problem:

Zuerst hat alles gut funktioniert, die Skripte haben Tabellen in der DB erstellt. Dann nahm ich eine kleine Änderung im Code vor (ich änderte nur den Namen der Tabelle) und löschte die Tabelle aus der Datenbank, so dass das Skript eine neue Tabelle von Grund auf erstellen konnte, ohne die vorherige zu löschen. Und alles, was ich bekam, war die Erstellung der Spalten, aber ohne irgendwelche Daten.
Also beschloss ich, die alten Skripte erneut zu verwenden. Dann bekam ich nichts; nicht einmal eine Tabelle wurde erstellt. Seitdem habe ich eine DB, die leer bleibt.

Hat jemand eine Idee, was schief gelaufen sein könnte?

Vielen Dank im Voraus!

Hallo Peg,

Um eine Tabelle zu erstellen, verwenden Sie den SQL-Befehl CREATE TABLE http://dev.mysql.com/doc/refman/5.7/en/create-table.html

Zum Einfügen von Daten verwenden Sie den SQL-Befehl INSERT INTO https://dev.mysql.com/doc/refman/5.6/en/insert.html

Um solche Befehle auszuführen, verwenden Sie die Funktion MySqlExecute.

Sie können auch Ihren Code zur Verfügung stellen, dann kann ich das Problem herausfinden.

MySQL :: MySQL 5.7 Reference Manual :: 13.1.14 CREATE TABLE Syntax
  • dev.mysql.com
creates a table with the given name. You must have the privilege for the table. Rules for permissible table names are given in Section 9.2, “Schema Object Names”. By default, the table is created in the default database, using the storage engine. An error occurs if the table exists, if there is no default database, or if the database does not...
 
Eugeniy Lugovoy:

Hallo Peg,

Um eine Tabelle zu erstellen, verwenden Sie den SQL-Befehl CREATE TABLE http://dev.mysql.com/doc/refman/5.7/en/create-table.html

Zum Einfügen von Daten verwenden Sie den SQL-Befehl INSERT INTO https://dev.mysql.com/doc/refman/5.6/en/insert.html

Um solche Befehle auszuführen, verwenden Sie die Funktion MySqlExecute.

Sie können auch Ihren Code zur Verfügung stellen, dann kann ich das Problem herausfinden.

Hallo Eugeniy,

Vielen Dank für die Links.

Zuerst habe ich deinen Code benutzt, um mich mit meiner Datenbank zu verbinden (ich habe mySql Server benutzt, falls es nützlich ist). Und ich konnte die Tabelle sehen. Dann änderte ich den Tabellennamen in Ihrem MySQL-002-Skript (wie Sie unten sehen können), und obwohl es zu funktionieren schien, wurde meine Tabelle nicht erstellt. Jetzt benutze ich WampServer und bekomme:

0 11:09:37.579 Script MySQL-002 EURUSD,H1: erfolgreich geladen

0 11:09:37.730 MySQL-002 EURUSD,H1: initialisiert

0 11:09:37.730 MySQL-002 EURUSD,H1: MQLMySQL v2.0 Demo Copyright © 2014, FxCodex Laboratory

0 11:09:37.730 MySQL-002 EURUSD,H1: Host: , Benutzer: , Datenbank:

0 11:09:37.730 MySQL-002 EURUSD,H1: Verbinden...

0 11:09:37.741 MySQL-002 EURUSD,H1: Verbunden! DBID#0

0 11:09:37.742 MySQL-002 EURUSD,H1: Tabelle `table` kann nicht erstellt werden. Fehler: Aucune base n'a ?t? s?lectionn?e

0 11:09:37.742 MySQL-002 EURUSD,H1: Verbindung abgebrochen. Skript fertig!

0 11:09:37.742 MySQL-002 EURUSD,H1: uninit Grund 0

0 11:09:37.743 Skript MySQL-002 EURUSD,H1: entfernt

//+------------------------------------------------------------------+
//|MySQL-002.mq4 |
//|Copyright 2014, Eugene Lugovoy |
//|http://www.fxcodexlab.com |
//| Tabellenerstellung (DEMO)|
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, Eugene Lugovoy."
#property link      "http://www.fxcodexlab.com"
#property version   "1.00"
#property strict

#include <MQLMySQL.mqh>

string INI;
//+------------------------------------------------------------------+
//| Skript-Programmstartfunktion|
//+------------------------------------------------------------------+
void OnStart()
{
 string Host, User, Password, Database, Socket; // Datenbank-Anmeldeinformationen
 int Port,ClientFlag;
 int DB; // Datenbankbezeichner
 
 Print (MySqlVersion());

 INI = TerminalPath()+"\\MQL4\\Scripts\\MyConnection.ini";
 
 // Lesen der Datenbankanmeldedaten aus der INI-Datei
 Host = ReadIni(INI, "MYSQL", "Host");
 User = ReadIni(INI, "MYSQL", "User");
 Password = ReadIni(INI, "MYSQL", "Password");
 Database = ReadIni(INI, "MYSQL", "Database");
 Port     = StrToInteger(ReadIni(INI, "MYSQL", "Port"));
 Socket   = ReadIni(INI, "MYSQL", "Socket");
 ClientFlag = StrToInteger(ReadIni(INI, "MYSQL", "ClientFlag"));  

 Print ("Host: ",Host, ", User: ", User, ", Database: ",Database);
 
 // Datenbankverbindung öffnen
 Print ("Connecting...");
 
 DB = MySqlConnect(Host, User, Password, Database, Port, Socket, ClientFlag);
 
 if (DB == -1) { Print ("Connection failed! Error: "+MySqlErrorDescription); } else { Print ("Connected! DBID#",DB);}
 
 string Query;
 Query = "DROP TABLE IF EXISTS `test`";
 MySqlExecute(DB, Query);
 
 Query = "CREATE TABLE `test` (id int, code varchar(50), start_date datetime)";
 if (MySqlExecute(DB, Query))
    {
     Print ("Table `test` created.");
    }
 else
    {
     Print ("Table `test` cannot be created. Error: ", MySqlErrorDescription);
    }
 
 MySqlDisconnect(DB);
 Print ("Disconnected. Script done!");
}
//+------------------------------------------------------------------+
 
peg:

Hallo Eugeniy,

vielen Dank für die Links.

Zuerst habe ich deinen Code verwendet, um mich mit meiner Datenbank zu verbinden (ich habe mySql Server verwendet, falls es nützlich ist). Und ich konnte die Tabelle sehen. Dann änderte ich den Tabellennamen in Ihrem MySQL-002-Skript (wie Sie unten sehen können), und obwohl es zu funktionieren schien, wurde meine Tabelle nicht erstellt. Jetzt benutze ich WampServer und bekomme:

0 11:09:37.579 Script MySQL-002 EURUSD,H1: erfolgreich geladen

0 11:09:37.730 MySQL-002 EURUSD,H1: initialisiert

0 11:09:37.730 MySQL-002 EURUSD,H1: MQLMySQL v2.0 Demo Copyright © 2014, FxCodex Laboratory

0 11:09:37.730 MySQL-002 EURUSD,H1: Host: , Benutzer: , Datenbank:

0 11:09:37.730 MySQL-002 EURUSD,H1: Verbinden...

0 11:09:37.741 MySQL-002 EURUSD,H1: Verbunden! DBID#0

0 11:09:37.742 MySQL-002 EURUSD,H1: Tabelle `table` kann nicht erstellt werden. Fehler: Aucune base n'a ?t? s?lectionn?e

0 11:09:37.742 MySQL-002 EURUSD,H1: Verbindung abgebrochen. Skript fertig!

0 11:09:37.742 MySQL-002 EURUSD,H1: uninit Grund 0

0 11:09:37.743 Skript MySQL-002 EURUSD,H1: entfernt

Basierend auf dem Fehler, den ich in Ihrem Log sehe: 0 11:09:37.742 MySQL-002 EURUSD,H1: Table `table` cannot be created.

Sie verwenden den Namen "table", der ein Schlüsselwort der Mysql-Datenbank ist und nicht als Tabellenname verwendet werden kann. Versuchen Sie, ihn z.B. in "table1" zu ändern, um zu prüfen, ob es funktioniert.

Sie können den Befehl "USE database_name" direkt nach der Verbindung ausführen, wobei "database_name" der Name Ihrer Datenbank ist.

zum Beispiel, wenn meine Datenbank "mysql" ist:

DB = MySqlConnect(Host, User, Password, Database, Port, Socket, ClientFlag);

if (DB ==-1) { Print ("Verbindung fehlgeschlagen! Fehler: "+MySqlErrorDescription); } else { Print ("Verbunden! DBID#",DB);}

MySqlExecute(DB, "USE mysql");