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

 
Eugeniy Lugovoy:

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

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

Les gars, s'il vous plaît, 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 ? Elle 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.

J'utilise MT4 (950). J'ai pris les fichiers dans l'archive jointe à l'article. Ai-je bien compris qu'il ne s'agit pas de la dernière version : MySQL-001 EURUSD,M1 : MQLMySQL v2.0 Demo Copyright © 2014, FxCodex Laboratory.

Il ne lit pas les données du fichier de configuration.

 
Sergey Deynego:

J'utilise MT4 (950). J'ai pris les fichiers dans l'archive jointe à l'article. Ai-je bien compris qu'il ne s'agit pas de la dernière version : MySQL-001 EURUSD,M1 : MQLMySQL v2.0 Demo Copyright © 2014, FxCodex Laboratory

Il ne lit pas les données du fichier de configuration.

Oui, la version 2.0 est ancienne. J'ai déjà posté des versions plus récentes dans la discussion de l'article.

Je la joins maintenant.

MQLMySQL v2.2 - Sources du projet DLL pour x64 et x86

Essayez quelque chose à partir de ceci. Il semble que ce soit la dernière version.

Dossiers :
MQLMySQL_v2.2.zip  4801 kb
MQL4_x32.zip  1073 kb
MQL5_x32.zip  1073 kb
MQL5_x64.zip  1076 kb
 
Eugeniy Lugovoy:

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") ;

J'ai suivi vos suggestions pour le nom des tables et la commande MySqlExecute(DB, "USE mt4"), mais j'obtiens toujours le message d'erreur :

0 12:51:40.534 Script MySQL-002new EURUSD,M1 : chargé avec succès

0 12:51:40.549 MySQL-002new EURUSD,M1 : initialisé

0 12:51:40.549 MySQL-002new EURUSD,M1 : MQLMySQL v2.0 Demo Copyright © 2014, FxCodex Laboratory

0 12:51:40.549 MySQL-002new EURUSD,M1 : Host : , User : , Database :

0 12:51:40.549 MySQL-002new EURUSD,M1 : Connexion...

0 12:51:40.565 MySQL-002new EURUSD,M1 : Connecté ! DBID#0

0 12:51:40.565 MySQL-002new EURUSD,M1 : La table `test_table` ne peut pas être créée. Erreur : Aucune base n'a ?t ? s?lectionn?e

0 12:51:40.565 MySQL-002new EURUSD,M1 : Déconnecté. Script terminé !

0 12:51:40.565 MySQL-002new EURUSD,M1 : raison de désinstallation 0

0 12:51:40.565 Script MySQL-002new EURUSD,M1 : supprimé

 

Bonjour Eugeniy Lugovoy,

Merci beaucoup pour votre projet utile.

J'essaie de lire un champ de type chaîne de caractères à partir d'une table d'environ 3 000 caractères, j'ai utilisé "MySqlGetFieldAsString" comme ceci :


if (Cursor >= 0)

{

Rows = MySqlCursorRows(Cursor) ;

for (int i=0 ; i<Rows ; i++)

if (MySqlCursorFetchRow(Cursor))

{

Get_Setting = MySqlGetFieldAsString(Cursor, 4) ;

}

.....

Mais le problème est que Get_String ne me renvoie que 1025 caractères,

J'ai besoin de lire ce champ complètement.

Pouvez-vous m'aider à résoudre ce problème ?

Cordialement

 
FX. MDA7:

Bonjour Eugeniy Lugovoy,

Merci beaucoup pour votre projet utile.

J'essaie de lire un champ de type chaîne de caractères à partir d'une table d'environ 3 000 caractères, j'ai utilisé "MySqlGetFieldAsString" comme ceci :


if (Cursor >= 0)

{

Rows = MySqlCursorRows(Cursor) ;

for (int i=0 ; i<Rows ; i++)

if (MySqlCursorFetchRow(Cursor))

{

Get_Setting = MySqlGetFieldAsString(Cursor, 4) ;

}

.....

Mais le problème est que Get_String ne me renvoie que 1025 caractères,

J'ai besoin de lire ce champ complètement.

Pouvez-vous m'aider à résoudre ce problème ?

Remarques

Oui, j'ai fixé la longueur maximale des données à 1024 caractères. Je peux modifier cette limite et reconstruire la DLL. Au fait, quel type de données utilisez-vous pour cette colonne du côté de la base de données ?
 
peg:

J'ai suivi vos suggestions pour le nom des tables et la commande MySqlExecute(DB, "USE mt4") mais j'obtiens toujours le message d'erreur :

0 12:51:40.534 Script MySQL-002new EURUSD,M1 : chargé avec succès

0 12:51:40.549 MySQL-002new EURUSD,M1 : initialisé

0 12:51:40.549 MySQL-002new EURUSD,M1 : MQLMySQL v2.0 Demo Copyright © 2014, FxCodex Laboratory

0 12:51:40.549 MySQL-002new EURUSD,M1 : Host : , User : , Database :

0 12:51:40.549 MySQL-002new EURUSD,M1 : Connexion...

0 12:51:40.565 MySQL-002new EURUSD,M1 : Connecté ! DBID#0

0 12:51:40.565 MySQL-002new EURUSD,M1 : La table `test_table` ne peut pas être créée. Erreur : Aucune base n'a ?t ? s?lectionn?e

0 12:51:40.565 MySQL-002new EURUSD,M1 : Déconnecté. Script terminé !

0 12:51:40.565 MySQL-002new EURUSD,M1 : raison de désinstallation 0

0 12:51:40.565 Script MySQL-002new EURUSD,M1 : supprimé

pourquoi la version"MQLMySQL v2.0" ? elle devrait être 2.2
 

Excellent !

J'utilise MQL5 pour générer des données pour MQL4.

Tout a fonctionné à merveille sauf que j'ai dû supprimer les guillemets simples autour de tablename dans la commande de requête

Query ="SELECT Symbol,Composite,Pattern FROM summarytable" ;

fonctionne correctement

 
Ingvar Engelbrecht:

Excellent !

J'utilise MQL5 pour générer des données pour MQL4.

Tout a fonctionné à merveille sauf que j'ai dû supprimer les guillemets simples autour de tablename dans la commande de requête

Query ="SELECT Symbol,Composite,Pattern FROM summarytable" ;

fonctionne correctement

Oui, il est possible d'utiliser des noms sans guillemets si vous n'avez pas l'intention de nommer les tables avec des majuscules/minuscules (mysql est sensible à la casse) et des symboles spéciaux. BTW, ce n'est pas le symbole de guillemet simple "'", mais c'est "`"

Votre requête pourrait donc être la suivante Query ="SELECT `Symbol`,`Composite`,`Pattern` FROM `summarytable`" ;

si vous voulez nommer les colonnes Symbole, mais pas symbole ou SYMBOL

 

Bonjour Eugeniy,

Merci pour votre module, très utile. Pourriez-vous m'aider à ajouter une fonction pour obtenir le nom du champ ? ou comment puis-je l'ajouter dans VC++ ?

 

Comment allez-vous ?

système win10 64x, Impossible de se connecter à la base de données, pouvez-vous m'aider ?