Discussione sull’articolo "Come accedere al database MySQL da MQL5 (MQL4)" - pagina 3

 

Grazie per l'articolo! Quante soluzioni non hanno provato dappertutto la stessa cosa, se non si disturba si prega di guardare il log, non riesco a capire nulla....

Server MySQL:

  • Server: localhost via TCP/IP
  • Versione del server: 5.6.10
  • Versione del protocollo: 10
  • Utente: root@localhost
  • Codifica MySQL: UTF-8 Unicode (utf8 )
  • Database InnoDB, UTF8-General-Ci

MT5 build 1035

Sistema operativo: Win8.1 x64

File:
log_.txt  19 kb
 

Saluti.

Hai un sistema operativo x64, sei sicuro di utilizzare le DLL per la versione a 64 bit?

Sono allegate in uno dei post di discussione(mqlmysql_for_mql5_x64.zip1264 kb).

Nell'articolo c'erano librerie solo per i sistemi operativi x86.

A proposito, gli esempi di prova dell'archivio funzionano?

<<poco dopo>>.

Questa riga crea confusione: File di prova aggiunto: librerie\MQLMySQL.dll. 89626 byte caricati

La dimensione originale del file x64 MQLMySQL.dll = 89600 byte, non 89626.

Che antivirus avete?

 

Ciao.

Mi piace il concetto. Dovrebbe essere di grande aiuto

Ma ho incontrato qualche problema. Sto usando 64 bit nd Ho scaricato e iniziato su uno script di prova per vedere come funziona.

ma si blocca in MySQLGetFieldAsxxxxx

2015.01.09 21:32:09.535 testql(AUDNZD,H1) 000000013F81347A 488BF2 mov rsi, rdx
2015.01.09 21:32:09.535 testql (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) Violazione dell'accesso a 0x000000013F8134B3 letto a 0x000000000001
2015.01.09 21:32:09.535 testsql (AUDNZD,H1) +++++++++++++0
2015.01.09 21:32:09.535 testsql (AUDNZD,H1) 2 righe selezionate.
2015.01.09 21:32:09.425 testsql (AUDNZD,H1) Connesso
2015.01.09 21:31:18.135 testsql (AUDNZD,H1) x 0 y


Sorce:

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

//--- parametri di ingresso
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;

//+------------------------------------------------------------------+
//| Funzione di avvio del programma di 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(Cursore, 0);                    << crashes here.   
   // tradetype = MySqlGetFieldAsInt(Cursore,1);
   // setupid = MySqlGetFieldAsString(Cursore,2);
       }
     }  
      
   Print(pair + "  " + DoubleToString(tradetype,0) + "  " + setupid);
   
   MySqlCursorClose(Cursor);
 
  
 } 
 

Ho tirato fuori il mio vecchio portatile con win32, ho installato la versione a 32 bit e ho compilato lo stesso sorgente con libreria e include a 32 bit.

Funziona bene. Il problema è con la versione a 64 bit

 
ingvar_e:

Ho tirato fuori il mio vecchio portatile con win32, ho installato la versione a 32 bit e ho compilato lo stesso sorgente con libreria e include a 32 bit.

Funziona bene. Il problema è con la versione a 64 bit

Ok, controllerò questo.

Qual è la versione del terminale? MT4/MT5? e il numero di build?

 
elugovoy:

Ok, controllerò questo.

Qual è la versione del terminale? MT4/MT5? e il numero di build?

Terminale MT5 Build 1035. In esecuzione su W7 64 crash

Terminale MT5 Build 1035 in esecuzione su XP 32 OK

Lo apprezzo molto. Sto lavorando ad un EA multi curreny, muli method (sorta di) che attualmente utilizza un file di input. Per la flessibilità di testare diversi file di input, sto convertendo in MySQL.

 
ingvar_e:

Terminale MT5 Build 1035. In esecuzione su W7 64 crash

Terminale MT5 Build 1035 in esecuzione su XP 32 OK

Lo apprezzo. Sto lavorando ad un EA multi curreny, muli method (sorta di) che attualmente utilizza un file di input. Per la flessibilità di testare diversi file di input, sto convertendo in MySQL.

L'ho testato su un sistema operativo x64, MT5 build 1035. Hai assolutamente ragione.

Ho fatto alcuni controlli e ho scoperto che i dati che arrivano alla DLL funzionano bene. Il problema è nella ricezione del tipo di dati STRING dalle funzioni della DLL.

Inoltre, ho testato i miei script compilati con la precedente build di MT5 x64 - funziona bene.

Ma dopo la ricompilazione con la build 1035, lo stesso script con la stessa DLL presenta tali errori.

Infine, ritengo che il problema non sia nella DLL o nel progetto MQLMySQL, ma nel compilatore di MT5 x64. Ho aperto un caso nel service desk per questo problema.

Grazie,

Eugene

 
ingvar_e:

Terminale MT5 Build 1035. In esecuzione su W7 64 crash

Terminale MT5 Build 1035 in esecuzione su XP 32 OK

Lo apprezzo. Sto lavorando ad un EA multi curreny, muli method (sorta di) che attualmente utilizza un file di input. Per avere la flessibilità di testare diversi file di input sto convertendo in MySQL

Solo per i test, è possibile utilizzare i miei script inclusi nel pacchetto di distribuzione.

Modificate le credenziali del database nel file INI, quindi eseguite gli script.

Provate a ricompilarli e a eseguirli di nuovo.

Vedrete che alla prima esecuzione funzionano bene, ma dopo la ricompilazione danno gli stessi errori che avete voi.

Il problema è in MT5 x64 b1035 terminale/compilatore

 
elugovoy:

Solo per fare delle prove, è possibile utilizzare i miei script inclusi nel pacchetto di distribuzione.

Modificare le credenziali del database nel file INI, quindi eseguire gli script.

Provate a ricompilarli e a eseguirli di nuovo.

Vedrete che alla prima esecuzione funzionano bene, ma dopo la ricompilazione danno gli stessi errori che avete voi.

Il problema è nel terminale/compilatore di MT5 x64 b1035

>Il problema è in MT5 x64 b1035

Quindi siamo bloccati?

Il mio vecchio portatile a 32 bit si è arreso oggi. Completamente morto.

Mi chiedo se posso installare un Windows a 32 bit su una macchina a 64 bit e se questo aiuta davvero. Oppure installare MT5/MQL5 a 32 bit su una macchina Windows 7 a 64 bit.

Più tardi:

Ho trovato questo Provando.

 
ingvar_e:

>Il problema è in MT5 x64 b1035

Quindi siamo bloccati?

Il mio vecchio portatile a 32 bit si è arreso oggi. Completamente morto.

Mi chiedo se sia possibile installare un Windows a 32 bit su una macchina a 64 bit e se questo possa davvero aiutare. Oppure installare MT5/MQL5 a 32 bit su una macchina Windows 7 a 64 bit.

Più tardi:

Ho trovato questo Provando.

  • Per installare la versione a 32 bit in un sistema operativo a 64 bit, si deve avviare il programma di installazione con la chiave /32. Ad esempio c:\>mt5setup.exe /32.
  • ,SYMBOL_TRADE_TICK_VALUE)

    restituisce 0;

    Forse non è una buona idea eseguire una MT5 a 32 bit su una macchina Windows a 64 bit. Ci sono anche altre indicazioni di malfunzionamento. Il prossimo tentativo è quello di installare un Windows 32 sul mio computer a 64 bit.

    Sempre queste lunghe deviazioni ti portano lontano dal tuo percorso principale :-(

    Sembra che debba rinunciare a questo strumento e passare alle basi con MySQL. Troppo fastidioso installare un nuovo Windows XP e non ho una chiave per W7.