Discusión sobre el artículo "Trabajo con el SGBD MySQL desde MQL5 (MQL4)" - página 6

 
elugovoy:

Hola, ¿qué versión de MT5 terminal que está utilizando?

¿Qué versión de MT5 terminal que está utilizando?

Por favor, pruebe la última actualización de las bibliotecas MQLMySQL, adjunto aquí.

He utilizado la última versión de MT4, cuando sólo se utiliza una llamada, está bien, pero cuando se utiliza el remitente enviar datos y utilizar los datos reccive receptor en el mismo MT4 en el mismo tiempo, el MT4 imprime el error "Access violation read to 0x65D6954".
 
elugovoy:

Hola, ¿qué versión de MT5 terminal que está utilizando?

¿Qué versión de MT5 terminal que está utilizando?

Por favor, pruebe la última actualización de las bibliotecas MQLMySQL, que se adjunta aquí.

I s la mqlmysql.dll es
llamada singleton, el mismo mt4 no puede multicall este dll
 

Tal vez usted tiene libmysql.dll en diferentes ubicaciones de su sistema operativo.

Si usted tiene libmysql.dll en %WINDOWS%\SYSTEM32 carpeta, usted tiene que eliminar de MT4\MQL4\Experts\Libraries

por lo que el único dll tiene que ser utilizado.

El terminal de uno adjunta la biblioteca una vez, incluso si el asesor experto utilizado para diferentes gráficos. así, la razón es diferente.

El MQLMySQL.dll utiliza mutexes para acceder a los datos compartidos internos, por lo que también no puede ser una razón.

Si puede, por favor proveame con el codigo MQL que esta usando para levantar tal situacion y el numero de build de MT4, tratare de probarlo y entregarle la solucion.

Voy a tratar de probarlo y entregar la solución.

 
elugovoy:

Tal vez usted tiene libmysql.dll en diferentes ubicaciones de su sistema operativo.

Si usted tiene libmysql.dll en %WINDOWS%\SYSTEM32 carpeta, usted tiene que eliminar de MT4\MQL4\Experts\Libraries

por lo que el único dll tiene que ser utilizado.

El terminal de uno adjunta la biblioteca una vez, incluso si el asesor experto utilizado para diferentes gráficos. así, la razón es diferente.

El MQLMySQL.dll utiliza mutexes para acceder a los datos compartidos internos, por lo que también no puede ser una razón.

Si puede, por favor proveame con el codigo MQL que esta usando para levantar tal situacion y el numero de build de MT4, tratare de probarlo y entregarle la solucion.

Voy a tratar de probarlo y entregar la solución.

El codigo MQL esta recolectando datos de mt4 a la tabla mysql, cuando se usa en un mt4 en solo uno, esta bien, cuando se usan cuatro o mas en dos mt4, imprime Access violation read a 0x00000002 en ... \MQLMySQL.dll'


Archivos adjuntos:
sendData.mq4  11 kb
 
elugovoy:

Tal vez usted tiene libmysql.dll en diferentes ubicaciones de su sistema operativo.

Si usted tiene libmysql.dll en %WINDOWS%\SYSTEM32 carpeta, usted tiene que eliminar de MT4\MQL4\Experts\Libraries

por lo que el único dll tiene que ser utilizado.

El terminal de uno adjunta la biblioteca una vez, incluso si el asesor experto utilizado para diferentes gráficos. así, la razón es diferente.

El MQLMySQL.dll utiliza mutexes para acceder a los datos compartidos internos, por lo que también no puede ser una razón.

Si puede, por favor proveame con el codigo MQL que esta usando para levantar tal situacion y el numero de build de MT4, tratare de probarlo y entregarle la solucion.

Voy a tratar de probarlo y entregar la solución.

He utilizado mysql tabla de memoria, ¿es el problema? ENGINE=MEMORY
 
yukaixie:
He utilizado mysql tabla de memoria, ¿es el problema? ENGINE=MEMORY
He cambiado el motor de tipo de tabla de memoria a Innodb, el problema sigue existiendo. 2015.04.08 15:31:59.296 Violación de acceso de lectura a 0x00000004 en '. .MQLMySQL.dll'

 
yukaixie:

CÓDIGO MQL es recoger datos mt4 a la tabla mysql, cuando se utiliza en un mt4 en una sola, que está bien, cuando el uso de cuatro o más en dos mt4, se imprime violación de acceso leer a 0x00000002 en ... \MQLMySQL.dll'


MySqlDisconnect(DB);

la desconexión de base de datos necesaria, pero todavía no es resolver el problema.

 
¿Puede proporcionar el código fuente de su EA/Script?
 
elugovoy:
¿Puede proporcionar el código fuente de su EA / Script?

CÓDIGO MQL es recoger datos mt4 a la tabla mysql, cuando se utiliza en un mt4 en una sola, que está bien, cuando el uso de cuatro o más en dos mt4, se imprime violación de acceso leer a 0x00000002 en ... \MQLMySQL.dll'


Archivos adicionales:

senddata.mq4 11 kb

El sendata.mq4 es el código fuente de mi EA.

 
elugovoy:
¿Puede proporcionar el código fuente de su EA/Script?
//+------------------------------------------------------------------+
//|& nbsp; Operaciones de Base de Datos.mq4 |
//| Derechos de autor 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


input string Host = "localhost"; //Servidor IP, por ejemplo 192.168.1.210, localhost
input string Usuario = "root"; //nombre de usuario de la base de datos mysql
input string Contraseña = "root"; //Contraseña de la base de datos MySQL
input string Database = "test"; /Nombre de la base de datos Mysql
input string Socket = "0"; // credenciales de la base de datos
input int Puerto = 3306; // número de puerto de la base de datos mysql
input int ClientFlag = 0; // credenciales de la base de datos

int DB = 0; // identificador de la base de datos//---
int timeSeconds = 1; // temporizador
#include <MQLMySQL.mqh

string Consulta; int i,Cursor,Rector

int i,Cursor,Rows; //Include <MQLMySQL.mqh> string Query.
//+------------------------------------------------------------------+
//| Función de inicialización experta & nbsp; |
//+------------------------------------------------------------------+
int OnInit()
OnInit()
return(INIT_SUCCEED);
}
//+------------------------------------------------------------------+
//| Función experta de desinicialización |
//+------------------------------------------------------------------+
void OnDeinit(const int razón)
{

}
//+------------------------------------------------------------------+
//| Función tick experto & nbsp; |
//+------------------------------------------------------------------+
void OnTick()
{
if( IsExpertEnabled() && IsConnected() && AccountNumber() > 0 )
{
int cuenta = NúmeroDeCuenta();
string símbolo = Símbolo();
//int syDB = 0; // identificador de la base de datos//---
DB = cMySqlConnect(Host, User, Password, Database, Port, Socket, ClientFlag); //inst syDB = 0; // identificador de la base de datos//---
//Alerta(DB);
double spread = (Ask - Bid);
//Alerta(símbolo).
Query = "SELECT * FROM " + símbolo + " where NúmeroDeCuenta = " + (cadena)NúmeroDeCuenta();
//Imprimir(Consulta);
Cursor = MySqlCursorOpen(DB, Query);
if (Cursor >= 0)
{
Rows = MySqlCursorRows(Cursor); if (Cursor >= 0) { Rows = MySqlCursorRows(Cursor)
int dataRows = Filas;
//Alert(dataRows);
if( dataRows > 0 )
{
Query = "update " + symbol + " set Oferta = " + (cadena)Oferta + ", Demanda = " + ( cadena)Ask
+ ", Spread = " + DoubleToStr(spread, Digits)
+ ", Hora = '" + TimeToString(TimeLocal(), TIME_DATE|TIME_SECONDS ) + "' where NúmeroDeCuenta = "
+ (cadena)cuenta; // + "' y Símbolo = '" + símbolo + "'".
MySqlExecute(DB, Consulta);
}
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, Consulta);
Query = "INSERT INTO " + symbol + "(AccountNumber, Symbol, Bid, Ask, Spread. Memo, Time) VALUES ("
+ (cadena)cuenta + ", '" + símbolo + "', "+(cadena)Oferta+", "+ (cadena)Demanda + ", "
+ DoubleToStr(spread, Dígitos)
+ ", '" + (cadena)CuentaEmpresa()
+ "', \'"+TimeToString(TimeLocal(), TIME_DATE|TIME_SECONDS)+"\')"";
¡if(MySqlExecute(DB, Query) ! = true )
{
//Query = "DROP TABLE IF EXISTS `tabla_datos`";
//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 doble," + "Memo char(50)
+ "Memo char(50), "
+ "Time datetime) ENGINE=MEMORY DEFAULT CHARSET= utf8 ";
MySqlExecute(DB, Consulta);
}
}
¡¡¡¡MySqlCursorClose(Cursor); // NUNCA OLVIDE CERRAR CURSOR !!!!
}
}
}
//+------------------------------------------------------------------+

He utilizado tres DB conectar, pero he utilizado el mismo DB, ¿es necesario crear una nueva DB para cualquier nueva base de datos CRUD?


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