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

 

Merci pour l'article ! Combien de solutions n'avez-vous pas essayé partout la même chose, si vous ne vous donnez pas la peine de regarder le log, je n'y comprends rien....

Serveur MySQL :

  • Serveur : localhost via TCP/IP
  • Version du serveur : 5.6.10
  • Version du protocole : 10
  • Utilisateur : root@localhost
  • Encodage MySQL : UTF-8 Unicode (utf8 )
  • Base de données InnoDB, UTF8-General-Ci

MT5 build 1035

OS : Win8.1 x64

Dossiers :
log_.txt  19 kb
 

Salutations.

Vous avez un système d'exploitation x64, êtes-vous sûr d'utiliser les DLL pour la version 64 bits ?

Elles sont jointes à l'un des messages de discussion(mqlmysql_for_mql5_x64.zip1264 kb).

Dans l'article, il y avait des bibliothèques pour les systèmes d'exploitation x86 seulement.

Au fait, les exemples de test de l'archive fonctionnent-ils ?

<<un peu plus tard>>.

La ligne suivante me perturbe : Fichier de test ajouté : libraries\MQLMySQL.dll. 89626 octets chargés

La taille originale du fichier x64 MQLMySQL.dll = 89600 octets, et non 89626.

Quel est votre antivirus ?

 

Bonjour.

J'aime le concept. Il devrait être d'une grande aide

Mais je rencontre un problème. J'utilise 64 bit et je les ai téléchargés et j'ai commencé un script de test pour voir comment cela fonctionne.

mais se plante dans MySQLGetFieldAsxxxxx

2015.01.09 21:32:09.535 testsql(AUDNZD,H1) 000000013F81347A 488BF2 mov rsi, rdx
2015.01.09 21:32:09.535 testsql (AUDNZD,H1) 000000013F813476 4883EC20 sub rsp, 0x20
2015.01.09 21:32:09.535 testsql (AUDNZD,H1) 000000013F813475 57 push rdi
2015.01.09 21:32:09.535 testsql (AUDNZD,H1) 000000013F813470 4889742418 mov [rsp+0x18], rsi
2015.01.09 21:32:09.535 testsql (AUDNZD,H1) Access violation at 0x000000013F8134B3 read to 0x0000000000000001
2015.01.09 21:32:09.535 testsql (AUDNZD,H1) +++++++++++++0
2015.01.09 21:32:09.535 testsql (AUDNZD,H1) 2 ligne(s) sélectionnée(s).
2015.01.09 21:32:09.425 testsql (AUDNZD,H1) Connecté
2015.01.09 21:31:18.135 testsql (AUDNZD,H1) x 0 y


Sorce :

#include <FXCM\PairsInfo.mqh>
#include <FXCM\MQLMySQL.mqh>

//--- paramètres d'entrée
input string   MySQLURL="yyyyyyyyyyyyyy";
input string   MySQLDB = "forex";
input string   MySQLParms = "tradeparms";
input string   MySQLUser="Ingvar";
input string   MySQLPW="xxxxxxxxxxxx";
input int      MySQLPort=3306;
input string   GroupID= "Groupxxx";

PairsInfo prms;

//+------------------------------------------------------------------+
//| Fonction de démarrage du programme de script|
//+------------------------------------------------------------------+
void OnStart()
  {
//---
  string SQLString = "";
  string Q;
  string C = ",";
  StringSetCharacter(Q,0,34);
  
  string query;
  int Cursor;
  int DB;
  int rows;
  
  DB = MySqlConnect(MySQLURL, MySQLUser, MySQLPW, MySQLDB, MySQLPort, "0", 0);
  if (DB == -1) 
    {
      Print ("Connection failed! Error: "+MySqlErrorDescription); 
      return;
    }

    Print ("Connected");
    
  // query = "Select * From tradeparms" ;
    
  // query = "Select * FROM tradeparms WHERE TradeType = 2" ;
    
    query = "SELECT Pair, TradeType, SetupID FROM tradeparms WHERE TradeType = 2 AND Pair = 'USDJPY'";
     
     
   Cursor = MySqlCursorOpen(DB,query);
   if(Cursor <  0)
    {
      Print("Cursor error");
      return;
    }


   string pair= "x";
   int tradetype = 0;
   string setupid = "y";
   
   rows = MySqlCursorRows(Cursor);
   Print (rows, " row(s) selected.");
   
   for(int i=0;i<rows;i++)
    {
     if (MySqlCursorFetchRow(Cursor))  
       {
        Print("+++++++++++++" + i);
    pair = MySqlGetFieldAsString(Cursor, 0) ;                    << crashes here.   
   // tradetype = MySqlGetFieldAsInt(Cursor,1) ;
   // setupid = MySqlGetFieldAsString(Cursor,2) ;
       }
     }  
      
   Print(pair + "  " + DoubleToString(tradetype,0) + "  " + setupid);
   
   MySqlCursorClose(Cursor);
 
  
 } 
 

J'ai ressorti mon vieil ordinateur portable avec win32 et j'ai installé la version 32 bits dessus et j'ai compilé la même source avec la bibliothèque et les inclusions 32 bits.

Cela fonctionne bien. Le problème est avec la version 64 bits

 
ingvar_e:

J'ai ressorti mon vieil ordinateur portable avec win32 et j'ai installé la version 32 bits dessus et j'ai compilé la même source avec la bibliothèque et les inclusions 32 bits.

Cela fonctionne bien. Le problème vient de la version 64 bits

Ok, je vais vérifier cela.

Quelle est la version du terminal ? MT4/MT5 ? et le numéro de build?

 
elugovoy:

Ok, je vais vérifier cela.

Quelle est la version du terminal ? MT4/MT5 ? et le numéro de build?

Terminal MT5 Build 1035 fonctionnant sur W7 64 crash

Terminal MT5 Build 1035 fonctionnant sur XP 32 OK

Merci beaucoup. Je travaille sur un EA multi-courant, multi-méthode (en quelque sorte) qui utilise actuellement un fichier d'entrée. Pour plus de flexibilité dans le test de différents fichiers d'entrée, je suis en train de convertir en MySQL.

 
ingvar_e:

Terminal MT5 Build 1035 fonctionnant sur W7 64 crash

Terminal MT5 Build 1035 fonctionnant sur XP 32 OK

J'apprécie. Je travaille sur un EA multi-courant, multi-méthode (en quelque sorte) qui utilise actuellement un fichier d'entrée. Pour plus de flexibilité dans le test de différents fichiers d'entrée, je suis en train de convertir en MySQL.

Je l'ai testé sur x64 OS, MT5 build 1035. Vous avez tout à fait raison.

J'ai fait quelques vérifications et j'ai trouvé que les données qui arrivent à la DLL fonctionnent bien. Le problème se situe au niveau de la réception du type de données STRING par les fonctions de la DLL.

J'ai également testé mes propres scripts qui ont été compilés avec la version précédente de MT5 x64.

Mais après recompilation avec la build 1035, le même script avec la même DLL génère de telles erreurs.

Finalement, je suppose que le problème ne vient pas de la DLL ou du projet MQLMySQL, mais du compilateur MT5 x64. J'ai ouvert un dossier dans le service desk pour ce problème.

Je vous remercie,

Eugène

 
ingvar_e:

Terminal MT5 Build 1035 fonctionnant sur W7 64 crash

Terminal MT5 Build 1035 fonctionnant sur XP 32 OK

J'apprécie. Je travaille sur un EA multi-courant, multi-méthode (en quelque sorte) qui utilise actuellement un fichier d'entrée. Pour plus de flexibilité dans le test de différents fichiers d'entrée, je suis en train de convertir en MySQL.

Juste pour tester, vous pouvez utiliser mes scripts inclus dans le package de distribution.

Modifiez les identifiants de la base de données dans le fichier INI, puis exécutez les scripts.

Essayez de les recompiler et exécutez-les à nouveau.

Vous verrez que lors de la première exécution, ils fonctionnent correctement, mais qu'après recompilation, ils génèrent les mêmes erreurs que les vôtres.

Le problème est dans MT5 x64 b1035 terminal/compiler

 
elugovoy:

Juste pour tester, vous pouvez utiliser mes scripts inclus dans le paquet de distribution.

Modifiez les informations d'identification de la base de données dans le fichier INI, puis exécutez les scripts.

Essayez de les recompiler et de les exécuter à nouveau.

Vous verrez que lors de la première exécution, ils fonctionnent correctement, mais qu'après recompilation, ils génèrent les mêmes erreurs que les vôtres.

Le problème est dans MT5 x64 b1035 terminal/compilateur

>Le problème vient de MT5 x64 b1035

Nous sommes donc coincés ?

Mon vieil ordinateur portable 32bit a rendu l'âme aujourd'hui. Il est complètement mort.

Je me demande si je peux installer un Windows 32 bits sur une machine 64 bits et si cela peut vraiment aider. Ou installer un MT5/MQL5 32 bits sur une machine Windows 7 64 bits.

Plus tard :

J'ai trouvé ceci Essayez-le.

 
ingvar_e:

>Le problème est dans MT5 x64 b1035

Nous sommes donc coincés ?

Mon vieil ordinateur portable 32bit a rendu l'âme aujourd'hui. Il est complètement mort.

Je me demande si je peux installer un Windows 32 bits sur une machine 64 bits et si cela peut vraiment aider. Ou installer un MT5/MQL5 32 bits sur une machine Windows 7 64 bits.

Plus tard :

J'ai trouvé ceci Essayez-le.

  • Pour installer la version 32 bits sur un système d'exploitation 64 bits, vous devez lancer le programme d'installation avec la clé /32. Par exemple, c:\Nmt5setup.exe /32.
  • ,SYMBOL_TRADE_TICK_VALUE)

    renvoie 0 ;

    Peut-être n'est-ce pas une bonne idée d'utiliser un MT5 32 bits sur une machine Windows 64 bits. J'ai aussi d'autres indications de dysfonctionnement. Le prochain essai sera d'installer un windows 32 sur mon ordinateur 64 bit.

    Je ne sais pas si c'est le cas, mais j'ai l'impression qu'il y a un problème.

    Il semble que je doive abandonner cet outil et revenir à l'essentiel avec MySQL. Trop de tracas pour installer un nouveau windows XP et je n'ai pas de clé W7.