Discussion de l'article "Comment accéder à la base de données MySQL à partir de MQL5 (MQL4)" - page 8

 
Eugeniy Lugovoy:

Bonjour, James,

Je travaille sur Upwork uniquement sur un gros projet en ce moment. Je n'ai donc pas beaucoup de temps libre en ce moment. Quel est votre problème avec les librairies ? Comment puis-je vous aider ?

Bonjour,

J'ai fini par trouver, mais merci quand même pour la bibliothèque.... Très utile !

James
 

Pourquoi tout a cessé de fonctionner après la mise à jour vers la build 890 mt4 ?

Le journal indique une violation d'accès en lecture à 0x00000000 dans 'D:\MT4\MQL4\libraries\MQLMySQL.dll'.

[Supprimé]  
également intéressés par ...
 
Itum:
également intéressé par ...
J'essaierai de vérifier dans les prochains jours.
 
J'ai hâte d'y être !
 
alhimik7:
J'ai hâte d'y être !

MT4 build 890 x32 vient d'être vérifié. Tout fonctionne.

Journal de l'exécution des scripts de test :

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

Les gars, clarifiez :

1. Sur quelle opération le message"Access violation read" apparaît-il? ?

2. Lors de l'exécution du script MySQL-001, quelle version de MQLMySQL est affichée dans l'onglet Experts ? devrait être : MQLMySQL v2.2 x32 Copyright © 2014, FxCodex Laboratory

3. Quelle est la version de la base de données MySQL ?

4) MySQL est-il utilisé localement ou sur un hôte distant ?

5. Sous quel système d'exploitation exécutez-vous le terminal?

Veuillez vérifier et faire un rapport, car je ne peux pas reproduire l'erreur.

Je vais créer un environnement similaire et tester.

 

Bonjour,

J'essaie de connecter Metatrader à Mysql via vos fichiers.
Après le téléchargement et l'installation, j'ai modifié le fichier "MyConnection" en mettant les informations de ma base de données.

Voici le problème :

Au début, tout fonctionnait parfaitement ; les scripts créaient des tables à l'intérieur de la base de données. Puis j'ai fait une petite modification dans le code (j'ai juste changé le nom de la table) et j'ai supprimé la table de la base de données pour que le script en crée une nouvelle à partir de zéro sans supprimer la précédente. Tout ce que j'ai obtenu, c'est la création des colonnes, mais sans aucune donnée.
J'ai donc décidé d'utiliser à nouveau les anciens scripts. Je n'ai alors rien obtenu ; aucune table n'a été créée. Depuis, j'ai une base de données qui reste vide.

Avez-vous une idée de ce qui a pu se passer ?

Merci d'avance !

 
peg:

Bonjour,

J'essaie de connecter Metatrader à Mysql via vos fichiers.
Après le téléchargement et l'installation, j'ai modifié le fichier "MyConnection" en mettant les informations de ma base de données.

Voici le problème :

Au début, tout fonctionnait parfaitement ; les scripts créaient des tables à l'intérieur de la base de données. Puis j'ai fait une petite modification dans le code (j'ai juste changé le nom de la table) et j'ai supprimé la table de la base de données pour que le script en crée une nouvelle à partir de zéro sans supprimer la précédente. Tout ce que j'ai obtenu, c'est la création des colonnes, mais sans aucune donnée.
J'ai donc décidé d'utiliser à nouveau les anciens scripts. Je n'ai alors rien obtenu ; aucune table n'a été créée. Depuis, j'ai une base de données qui reste vide.

Avez-vous une idée de ce qui a pu se passer ?

Merci d'avance !

Bonjour Peg,

Pour créer une table, utilisez la commande SQL CREATE TABLE http://dev.mysql.com/doc/refman/5.7/en/create-table.html.

Pour insérer des données, utilisez la commande SQL INSERT INTO https://dev.mysql.com/doc/refman/5.6/en/insert.html

Pour exécuter ces commandes, utilisez la fonction MySqlExecute.

Vous pouvez également fournir votre code et je serai en mesure de résoudre le problème.

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:

Bonjour Peg,

Pour créer une table, utilisez la commande SQL CREATE TABLE http://dev.mysql.com/doc/refman/5.7/en/create-table.html

Pour insérer des données, utilisez la commande SQL INSERT INTO https://dev.mysql.com/doc/refman/5.6/en/insert.html.

Pour exécuter ces commandes, utilisez la fonction MySqlExecute.

Vous pouvez également fournir votre code et je serai en mesure de résoudre le problème.

Bonjour Eugeniy,

Merci pour les liens.

J'ai d'abord utilisé votre code pour me connecter à ma base de données (j'utilisais mySql Server au cas où cela serait utile). Et j'ai pu voir la table. Ensuite, j'ai changé le nom de la table dans votre script MySQL-002 (comme vous pouvez le voir ci-dessous) et même si cela semblait fonctionner, je n'ai pas pu créer ma table. Maintenant j'utilise WampServer et j'obtiens :

0 11:09:37.579 Script MySQL-002 EURUSD,H1 : chargé avec succès

0 11:09:37.730 MySQL-002 EURUSD,H1 : initialisé

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 : , User : , Database :

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

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

0 11:09:37.742 MySQL-002 EURUSD,H1 : La table `table` ne peut pas être créée. Erreur : Aucune base n'a ?t ? s?lectionn?e

0 11:09:37.742 MySQL-002 EURUSD,H1 : Déconnecté. Script done !

0 11:09:37.742 MySQL-002 EURUSD,H1 : raison de désinstallation 0

0 11:09:37.743 Script MySQL-002 EURUSD,H1 : supprimé

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

#include <MQLMySQL.mqh>

string INI;
//+------------------------------------------------------------------+
//| Fonction de démarrage du programme de script|
//+------------------------------------------------------------------+
void OnStart()
{
 string Host, User, Password, Database, Socket; // informations d'identification de la base de données
 int Port,ClientFlag;
 int DB; // identifiant de la base de données
 
 Print (MySqlVersion());

 INI = TerminalPath()+"\\MQL4\\Scripts\\MyConnection.ini";
 
 // lecture des informations d'identification de la base de données à partir du fichier INI
 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);
 
 // ouvrir la connexion à la base de données
 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:

Bonjour Eugeniy,

Merci pour les liens.

J'ai d'abord utilisé votre code pour me connecter à ma base de données (j'utilisais mySql Server au cas où cela serait utile). Et j'ai pu voir la table. Ensuite, j'ai changé le nom de la table dans votre script MySQL-002 (comme vous pouvez le voir ci-dessous) et même si cela semblait fonctionner, je n'ai pas pu créer ma table. Maintenant j'utilise WampServer et j'obtiens :

0 11:09:37.579 Script MySQL-002 EURUSD,H1 : chargé avec succès

0 11:09:37.730 MySQL-002 EURUSD,H1 : initialisé

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 : , User : , Database :

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

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

0 11:09:37.742 MySQL-002 EURUSD,H1 : La table `table` ne peut pas être créée. Erreur : Aucune base n'a ?t ? s?lectionn?e

0 11:09:37.742 MySQL-002 EURUSD,H1 : Déconnecté. Script done !

0 11:09:37.742 MySQL-002 EURUSD,H1 : raison de désinstallation 0

0 11:09:37.743 Script MySQL-002 EURUSD,H1 : supprimé

D'après l'erreur que je vois dans votre journal : 0 11:09:37.742 MySQL-002 EURUSD,H1 : Table `table` cannot be created.

Vous utilisez le nom "table" qui est un mot clé de la base de données mysql et ne peut pas être utilisé comme nom de table, essayez de changer par exemple pour "table1" juste pour vérifier si cela fonctionne.

Il est possible que la base de données n'ait pas été sélectionnée ou qu'elle n'ait pas été définie. Vous pouvez exécuter la commande "USE database_name" juste après la connexion, où database_name est le nom de votre base de données.

Par exemple, si ma base de données est "mysql" :

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

if (DB ==-1) { Print ("Connection failed ! Error : "+MySqlErrorDescription) ; } else { Print ("Connected ! DBID#",DB);}

MySqlExecute(DB, "USE mysql") ;