Discussion de l'article "Comment accéder à la base de données MySQL à partir de MQL5 (MQL4)" - page 9
Vous manquez des opportunités de trading :
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Inscription
Se connecter
Vous acceptez la politique du site Web et les conditions d'utilisation
Si vous n'avez pas de compte, veuillez vous inscrire
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.
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.
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
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
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é
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
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 ?