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

 
elugovoy:

Ciao, quale versione del terminale MT5 stai utilizzando?

Quale versione del terminale MT5 stai utilizzando?

Prova l'ultimo aggiornamento delle librerie MQLMySQL, allegato qui.

Ho usato l'ultima versione di MT4, quando si usa solo una chiamata, è OK, ma quando si usa il mittente per inviare dati e il ricevitore per ricevere dati allo stesso MT4 allo stesso tempo, l'MT4 stampa l'errore "Access Access". stesso tempo, l'MT4 stampa l'errore "Access violation read to 0x65D6954".
 
elugovoy:

Ciao, quale versione del terminale MT5 stai utilizzando?

Quale versione del terminale MT5 stai utilizzando?

prova l'ultimo aggiornamento delle librerie MQLMySQL, allegato qui.

La mqlmysql.dll è una
chiamata singleton, lo stesso mt4 non può multicallare questa dll
 

Forse libmysql.dll si trova in posizioni diverse del sistema operativo.

Se libmysql.dll si trova nella cartella %WINDOWS%\SYSTEM32, è necessario eliminarla da MT4\MQL4\Experts\Libraries

in modo da utilizzare un'unica dll.

L'unico terminale collega la libreria una sola volta, anche se l'expert advisor viene utilizzato per grafici diversi.

MQLMySQL.dll utilizza i mutex per l'accesso ai dati interni condivisi, quindi non può essere un motivo.

Se potete, fornitemi il codice MQL che utilizzate per creare questa situazione e il numero di build di MT4, cercherò di testarlo e di fornire la soluzione.

Proverò a testarlo e a fornire la soluzione.

 
elugovoy:

Forse libmysql.dll si trova in posizioni diverse del sistema operativo.

Se libmysql.dll si trova nella cartella %WINDOWS%\SYSTEM32, è necessario eliminarla da MT4\MQL4\Experts\Libraries

in modo da utilizzare un'unica dll.

L'unico terminale collega la libreria una sola volta, anche se l'expert advisor viene utilizzato per grafici diversi.

MQLMySQL.dll utilizza i mutex per l'accesso ai dati interni condivisi, quindi non può essere un motivo.

Se potete, fornitemi il codice MQL che utilizzate per creare questa situazione e il numero di build di MT4, cercherò di testarlo e di fornire la soluzione.

Proverò a testarlo e a fornire la soluzione.

Il codice MQL raccoglie i dati della MT4 nella tabella mysql, quando si usa in una sola MT4, è tutto ok, quando se ne usano quattro o più in due MT4, viene stampata la violazione di accesso letta a 0x00000002 in ... \MQLMySQL.dll'


File:
sendData.mq4  11 kb
 
elugovoy:

Forse libmysql.dll si trova in posizioni diverse del sistema operativo.

Se libmysql.dll si trova nella cartella %WINDOWS%\SYSTEM32, è necessario eliminarla da MT4\MQL4\Experts\Libraries

in modo da utilizzare un'unica dll.

L'unico terminale collega la libreria una sola volta, anche se l'expert advisor viene utilizzato per grafici diversi.

MQLMySQL.dll utilizza i mutex per l'accesso ai dati interni condivisi, quindi non può essere un motivo.

Se potete, fornitemi il codice MQL che utilizzate per creare questa situazione e il numero di build di MT4, cercherò di testarlo e di fornire la soluzione.

Proverò a testarlo e a fornire la soluzione.

Ho utilizzato la tabella di memoria mysql, è questo il problema? ENGINE=MEMORY
 
yukaixie:
Ho usato una tabella di memoria mysql, è questo il problema? ENGINE=MEMORY
Ho cambiato il motore del tipo di tabella da memoria a Innodb, il problema esiste ancora. 2015.04.08 15:31:59.296 Violazione dell'accesso letto a 0x00000004 in '. .MQLMySQL.dll'".

 
yukaixie:

MQL CODE sta raccogliendo i dati mt4 nella tabella mysql, quando si usa un mt4 in un solo mt4, va bene, quando si usano quattro o più mt4 in due, si stampa la violazione di accesso letto a 0x00000002 in ... \MQLMySQL.dll'


MySqlDisconnect(DB);

la disconnessione del database necessaria, ma ancora non risolve il problema.

 
Puoi fornire il codice sorgente del tuo EA/Script?
 
elugovoy:
Puoi fornire il codice sorgente del tuo EA/Script?

MQL CODE è raccogliere i dati mt4 alla tabella mysql, quando si utilizza in un mt4 in uno solo, è ok, quando si utilizzano quattro o più in due mt4, si stampa la violazione di accesso leggere a 0x00000002 in ... \MQLMySQL.dll'


File aggiuntivi:

senddata.mq4 11 kb

Il file sendata.mq4 è il mio codice sorgente EA caricato.

 
elugovoy:
Puoi fornire il codice sorgente del tuo EA/Script?
//+------------------------------------------------------------------+
//|& nbsp; Database Operations.mq4
//| Copyright 2015, MetaQuotes Software Corp.
//| & nbsp nbsp; https://www.mql5.com
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.00"
#property strict


stringa di input Host = "localhost"; /Ip del server, ad esempio 192.168.1.210, localhost
input string User = "root"; //nome utente di accesso al database MySQL
stringa di input Password = "root"; //Password del database MySQL
stringa di input Database = "test"; //nome database MySQL
stringa di input Socket = "0"; // credenziali del database
input int Port = 3306; // numero di porta del database MySQL
input int ClientFlag = 0; // credenziali del database

int DB = 0; // identificativo del database//---
int timeSeconds = 1; // timer
#include <MQLMySQL.mqh

string Query; int i,Cursore,Rettore

int i,Cursore,Righe; //Include <MQLMySQL.mqh> string Query.
//+------------------------------------------------------------------+
//| Funzione di inizializzazione esperta & nbsp; |
//+------------------------------------------------------------------+
int OnInit()
OnInit()
return(INIT_SUCCEED);
}
//+------------------------------------------------------------------+
//| Funzione di deinizializzazione esperta |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{

}
//+------------------------------------------------------------------+
//| Funzione di spunta esperta & nbsp; |
//+------------------------------------------------------------------+
void OnTick()
{
if( IsExpertEnabled() && IsConnected() && AccountNumber() > 0 )
{
int account = AccountNumber();
string symbol = Symbol();
//int syDB = 0; // identificatore del database//---
DB = cMySqlConnect(Host, User, Password, Database, Port, Socket, ClientFlag); //inst syDB = 0; // identificativo del database//---
//Alert(DB);
double spread = (Ask - Bid);
//Alert(simbolo).
Query = "SELECT * FROM " + symbol + " where AccountNumber = " + (string)AccountNumber();
//Stampa(Query);
Cursore = MySqlCursorOpen(DB, Query);
if (Cursore >= 0)
{
Rows = MySqlCursorRows(Cursore); if (Cursore >= 0) { Rows = MySqlCursorRows(Cursore)
int dataRows = Rows;
//Alert(dataRows);
if( dataRows > 0 )
{
Query = "update " + symbol + " set Bid = " + (string)Bid + ", Ask = " + ( stringa)Ask
+ ", Spread = " + DoubleToStr(spread, Digits)
+ ", Time = '" + TimeToString(TimeLocal(), TIME_DATE|TIME_SECONDS ) + " 'dove AccountNumber = "
+ (stringa)conto; // + "' e Simbolo = '" + simbolo + "'".
MySqlExecute(DB, Query);
}
else if( dataRows == 0 )
{
Query = "CREATE TABLE IF NOT EXISTS " + symbol + " (id int NOT NULL AUTO_ INCREMENT PRIMARY KEY, AccountNumber int, "
+ "Symbol char(20), Bid double, Ask double, Spread double,"
+ "Memo char(50), "
+ "Time datetime) ENGINE=MEMORY DEFAULT CHARSET=utf8 ";
MySqlExecute(DB, Query);
Query = "INSERT INTO " + symbol + "(AccountNumber, Symbol, Bid, Ask, Spread. Memo, Time) VALUES ("
+ (stringa)account + ", '" + simbolo + "', "+ (stringa)Bid+", "+ (stringa)Ask + ", "
+ DoubleToStr(spread, cifre)
+ ", '" + (stringa)AccountCompany()
+ ", \'"+TimeToString(TimeLocal(), TIME_DATE|TIME_SECONDS)+"\')"";
if(MySqlExecute(DB, Query) ! = true )
{
//Query = "DROP TABLE IF EXISTS `data_table`";
//MySqlExecute(DB, Query);
Query = "CREATE TABLE IF NOT EXISTS " + symbol + "(id int NOT NULL AUTO_INCREMENT PRIMARY KEY, AccountNumber int, "
+ "Symbol char(20), Bid double, Ask double, Spread doppio,"
+ "Memo char(50), "
+ "Time datetime) ENGINE=MEMORY DEFAULT CHARSET= utf8 ";
MySqlExecute(DB, Query);
}
}
MySqlCursorClose(Cursor); // NON DIMENTICA MAI DI CHIUDERE IL CURSORE !!!!
}
}
}
//+------------------------------------------------------------------+

Ho usato tre DB connect, ma ho usato lo stesso DB, è necessario creare un nuovo DB per ogni nuovo database CRUD?


自动交易和策略测试
自动交易和策略测试
  • www.mql5.com
MQL5:MetaTrader 5客户端内置的交易策略语言。语言允许编写您自己的自动交易系统,技术指标,脚本和函数程序库