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

 
Eugeniy Lugovoy:

Hola James,

Estoy trabajando en Upwork sólo en un gran proyecto en la actualidad. Por lo tanto, no tengo mucho tiempo libre hoy en día. ¿Cuál es el problema que tienes con libs? ¿Cómo puedo ayudarte?

Hola,

Lo resolví al final, pero gracias por la biblioteca de todos modos.... ¡Muy útil!

James
 

¿Por qué todo dejó de funcionar después de actualizar a construir 890 mt4?

El registro dice Violación de acceso leído a 0x00000000 en 'D:\MT4\MQL4\libraries\MQLMySQL.dll'.

[Eliminado]  
también interesado en ...
 
Itum:
también interesado en ...
Chicos, voy a tratar de comprobar en los próximos días.
 
Lo estoy deseando.
 
alhimik7:
¡Mirando hacia adelante a ella!

MT4 construir 890 x32 acaba de comprobar. Todo funciona.

Registro de ejecutar secuencias de comandos de prueba:

2015.12.05 12:20:09.984 Script MySQL-005 EURUSD,H1: removed
2015.12.05 12:20:09.984 MySQL-005 EURUSD,H1: uninit reason 0
2015.12.05 12:20:09.984 MySQL-005 EURUSD,H1: Disconnected. Script done!
2015.12.05 12:20:09.984 MySQL-005 EURUSD,H1: Passed!
2015.12.05 12:20:09.984 MySQL-005 EURUSD,H1: Closing cursors...
2015.12.05 12:20:09.984 MySQL-005 EURUSD,H1: Cursor 4 was opened.
2015.12.05 12:20:09.984 MySQL-005 EURUSD,H1: Cursor 3 was opened.
2015.12.05 12:20:09.984 MySQL-005 EURUSD,H1: Cursor 2 was opened.
2015.12.05 12:20:09.984 MySQL-005 EURUSD,H1: Cursor 1 was opened.
2015.12.05 12:20:09.984 MySQL-005 EURUSD,H1: Connected! DBID#0
2015.12.05 12:20:09.984 MySQL-005 EURUSD,H1: Connecting...
2015.12.05 12:20:09.984 MySQL-005 EURUSD,H1: Host: 127.0.0.1, User: mt4, Database: mt4
2015.12.05 12:20:09.984 MySQL-005 EURUSD,H1: MQLMySQL v2.2 x32 Copyright © 2014, FxCodex Laboratory
2015.12.05 12:20:09.984 MySQL-005 EURUSD,H1: initialized
2015.12.05 12:20:09.968 Script MySQL-005 EURUSD,H1: loaded successfully
2015.12.05 12:20:04.484 Script MySQL-004 EURUSD,H1: removed
2015.12.05 12:20:04.484 MySQL-004 EURUSD,H1: uninit reason 0
2015.12.05 12:20:04.484 MySQL-004 EURUSD,H1: Disconnected. Script done!
2015.12.05 12:20:04.484 MySQL-004 EURUSD,H1: ROW[3]: id = 4, code = USDJPY, start_time = 2014.01.03 03:00:00
2015.12.05 12:20:04.484 MySQL-004 EURUSD,H1: ROW[2]: id = 3, code = EURJPY, start_time = 2014.01.02 00:02:00
2015.12.05 12:20:04.484 MySQL-004 EURUSD,H1: ROW[1]: id = 1, code = EURUSD, start_time = 2014.01.01 00:00:01
2015.12.05 12:20:04.484 MySQL-004 EURUSD,H1: ROW[0]: id = 123279852, code = ACCOUNT, start_time = 2015.12.05 12:20:00
2015.12.05 12:20:04.484 MySQL-004 EURUSD,H1: Rows affected: 4
2015.12.05 12:20:04.484 MySQL-004 EURUSD,H1: 4 row(s) selected.
2015.12.05 12:20:04.484 MySQL-004 EURUSD,H1: SQL> SELECT id, code, start_date FROM `test_table`
2015.12.05 12:20:04.484 MySQL-004 EURUSD,H1: Connected! DBID#0
2015.12.05 12:20:04.484 MySQL-004 EURUSD,H1: Connecting...
2015.12.05 12:20:04.484 MySQL-004 EURUSD,H1: Host: 127.0.0.1, User: mt4, Database: mt4
2015.12.05 12:20:04.484 MySQL-004 EURUSD,H1: MQLMySQL v2.2 x32 Copyright © 2014, FxCodex Laboratory
2015.12.05 12:20:04.484 MySQL-004 EURUSD,H1: initialized
2015.12.05 12:20:04.484 Script MySQL-004 EURUSD,H1: loaded successfully
2015.12.05 12:20:00.093 Script MySQL-003 EURUSD,H1: removed
2015.12.05 12:20:00.093 MySQL-003 EURUSD,H1: uninit reason 0
2015.12.05 12:20:00.093 MySQL-003 EURUSD,H1: Disconnected. Script done!
2015.12.05 12:20:00.093 MySQL-003 EURUSD,H1: Rows affected: 2
2015.12.05 12:20:00.093 MySQL-003 EURUSD,H1: Succeeded! 2 rows has been updated.
2015.12.05 12:20:00.078 MySQL-003 EURUSD,H1: Rows affected: 1
2015.12.05 12:20:00.078 MySQL-003 EURUSD,H1: Succeeded! 3 rows has been inserted by one query.
2015.12.05 12:20:00.031 MySQL-003 EURUSD,H1: Rows affected: 1
2015.12.05 12:20:00.031 MySQL-003 EURUSD,H1: Succeeded: INSERT INTO `test_table` (id, code, start_date) VALUES (123279852,'ACCOUNT','2015.12.05 12:20:00')
2015.12.05 12:20:00.031 MySQL-003 EURUSD,H1: Table `test_table` created.
2015.12.05 12:19:59.968 MySQL-003 EURUSD,H1: Connected! DBID#0
2015.12.05 12:19:59.953 MySQL-003 EURUSD,H1: Connecting...
2015.12.05 12:19:59.953 MySQL-003 EURUSD,H1: Host: 127.0.0.1, User: mt4, Database: mt4
2015.12.05 12:19:59.953 MySQL-003 EURUSD,H1: MQLMySQL v2.2 x32 Copyright © 2014, FxCodex Laboratory
2015.12.05 12:19:59.953 MySQL-003 EURUSD,H1: initialized
2015.12.05 12:19:59.953 Script MySQL-003 EURUSD,H1: loaded successfully
2015.12.05 12:19:55.531 Script MySQL-002 EURUSD,H1: removed
2015.12.05 12:19:55.531 MySQL-002 EURUSD,H1: uninit reason 0
2015.12.05 12:19:55.531 MySQL-002 EURUSD,H1: Disconnected. Script done!
2015.12.05 12:19:55.531 MySQL-002 EURUSD,H1: Table `test_table` created.
2015.12.05 12:19:55.218 MySQL-002 EURUSD,H1: Connected! DBID#0
2015.12.05 12:19:55.218 MySQL-002 EURUSD,H1: Connecting...
2015.12.05 12:19:55.218 MySQL-002 EURUSD,H1: Host: 127.0.0.1, User: mt4, Database: mt4
2015.12.05 12:19:55.218 MySQL-002 EURUSD,H1: MQLMySQL v2.2 x32 Copyright © 2014, FxCodex Laboratory
2015.12.05 12:19:55.218 MySQL-002 EURUSD,H1: initialized
2015.12.05 12:19:55.218 Script MySQL-002 EURUSD,H1: loaded successfully
2015.12.05 12:19:49.625 Script MySQL-001 EURUSD,H1: removed
2015.12.05 12:19:49.625 MySQL-001 EURUSD,H1: uninit reason 0
2015.12.05 12:19:49.625 MySQL-001 EURUSD,H1: All connections closed. Script done!
2015.12.05 12:19:49.625 MySQL-001 EURUSD,H1: Connected! DBID#2
2015.12.05 12:19:49.625 MySQL-001 EURUSD,H1: Connected! DBID#1
2015.12.05 12:19:49.625 MySQL-001 EURUSD,H1: Connected! DBID#0
2015.12.05 12:19:49.609 MySQL-001 EURUSD,H1: Connecting...
2015.12.05 12:19:49.609 MySQL-001 EURUSD,H1: Host: 127.0.0.1, User: mt4, Database: mt4
2015.12.05 12:19:49.609 MySQL-001 EURUSD,H1: MQLMySQL v2.2 x32 Copyright © 2014, FxCodex Laboratory
2015.12.05 12:19:49.609 MySQL-001 EURUSD,H1: initialized
2015.12.05 12:19:49.546 Script MySQL-001 EURUSD,H1: loaded successfully

Chicos, aclarar:

1. En qué operación da"Violación de acceso leer" ?

2. Al ejecutar el script MySQL-001, ¿qué versión de MQLMySQL se muestra en la pestaña Expertos? debe ser: MQLMySQL v2.2 x32 Copyright © 2014, FxCodex Laboratorio

3. ¿Qué versión de base de datos MySQL?

4. ¿Se utiliza MySQL localmente o en un host remoto?

5. Bajo qué sistema operativo se ejecuta el terminal?

Por favor, compruébalo e infórmame, ya que no puedo reproducir el error.

Crearé un entorno similar y lo probaré.

 

Hola,

Estoy tratando de conectar Metatrader a Mysql a través de sus archivos.
Después de la descarga y la instalación he cambiado el archivo "MyConnection" mediante el establecimiento de la información de mi DB.

Aquí va el problema:

Al principio todo funcionaba bien, los scripts creaban tablas dentro de la BD. Luego hice un pequeño cambio en el código (sólo cambié el nombre de la tabla) y borré la tabla de la base de datos para que el script creara una nueva desde cero sin borrar la anterior. Y lo único que conseguí fue la creación de las columnas pero sin ningún dato.
Así que decidí volver a utilizar los antiguos scripts. Entonces no conseguí nada; ni siquiera se creó una tabla. Desde entonces tengo una BD que se queda vacía.

¿Alguna idea de qué puede haber fallado?

Gracias de antemano.

 
peg:

Hola,

Estoy tratando de conectar Metatrader a Mysql a través de sus archivos.
Después de la descarga y la instalación he cambiado el archivo "MyConnection" mediante el establecimiento de la información de mi DB.

Aquí va el problema:

Al principio todo funcionaba bien, los scripts creaban tablas dentro de la BD. Luego hice un pequeño cambio en el código (sólo cambié el nombre de la tabla) y borré la tabla de la base de datos para que el script creara una nueva desde cero sin borrar la anterior. Y lo único que conseguí fue la creación de las columnas pero sin ningún dato.
Así que decidí volver a utilizar los antiguos scripts. Entonces no conseguí nada; ni siquiera se creó una tabla. Desde entonces tengo una BD que se queda vacía.

¿Alguna idea de qué puede haber fallado?

Gracias de antemano.

Hola Peg,

Para crear una tabla utiliza el comando SQL CREATE TABLE http://dev.mysql.com/doc/refman/5.7/en/create-table.html

Para insertar datos utiliza el comando SQL INSERT INTO https://dev.mysql.com/doc/refman/5.6/en/insert.html

Para ejecutar estos comandos utiliza la función MySqlExecute.

También puedes proporcionarme tu código y podré resolver el problema.

MySQL :: MySQL 5.7 Reference Manual :: 13.1.14 CREATE TABLE Syntax
  • dev.mysql.com
creates a table with the given name. You must have the privilege for the table. Rules for permissible table names are given in Section 9.2, “Schema Object Names”. By default, the table is created in the default database, using the storage engine. An error occurs if the table exists, if there is no default database, or if the database does not...
 
Eugeniy Lugovoy:

Hola Peg,

Para crear una tabla utiliza el comando SQL CREATE TABLE http://dev.mysql.com/doc/refman/5.7/en/create-table.html

Para insertar datos utiliza el comando SQL INSERT INTO https://dev.mysql.com/doc/refman/5.6/en/insert.html

Para ejecutar estos comandos utiliza la función MySqlExecute.

También puedes proporcionarme tu código y podré resolver el problema.

Hola Eugeniy,

Gracias por los enlaces.

Al principio usé tu código para conectarme a mi base de datos (estaba usando mySql Server por si es útil). Y pude ver la tabla. Luego cambié el nombre de la tabla en tu Script MySQL-002 (como puedes ver abajo) y aunque parecía funcionar no creaba mi tabla. Ahora estoy usando WampServer y obtengo:

0 11:09:37.579 Script MySQL-002 EURUSD,H1: cargado correctamente

0 11:09:37.730 MySQL-002 EURUSD,H1: inicializado

0 11:09:37.730 MySQL-002 EURUSD,H1: MQLMySQL v2.0 Demo Copyright © 2014, Laboratorio FxCodex

0 11:09:37.730 MySQL-002 EURUSD,H1: Host: , Usuario: , Base de datos:

0 11:09:37.730 MySQL-002 EURUSD,H1: Conectando...

0 11:09:37.741 MySQL-002 EURUSD,H1: ¡Conectado! DBID#0

0 11:09:37.742 MySQL-002 EURUSD,H1: No se puede crear la tabla `table`. Error: Aucune base n'a ?t? s?lectionn?e

0 11:09:37.742 MySQL-002 EURUSD,H1: Desconectado. ¡Script realizado!

0 11:09:37.742 MySQL-002 EURUSD,H1: uninit reason 0

0 11:09:37.743 Script MySQL-002 EURUSD,H1: eliminado

//+------------------------------------------------------------------+
//|MySQL-002.mq4
//|Copyright 2014, Eugene Lugovoy |
//|http://www.fxcodexlab.com ||
//| Creación de tablas (DEMO)|
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, Eugene Lugovoy."
#property link      "http://www.fxcodexlab.com"
#property version   "1.00"
#property strict

#include <MQLMySQL.mqh>

string INI;
//+------------------------------------------------------------------+
//| Función de inicio del programa de script|
//+------------------------------------------------------------------+
void OnStart()
{
 string Host, User, Password, Database, Socket; // credenciales de la base de datos
 int Port,ClientFlag;
 int DB; // identificador de la base de datos
 
 Print (MySqlVersion());

 INI = TerminalPath()+"\\MQL4\\Scripts\\MyConnection.ini";
 
 // lectura de las credenciales de la base de datos desde el archivo INI
 Host = ReadIni(INI, "MYSQL", "Host");
 User = ReadIni(INI, "MYSQL", "User");
 Password = ReadIni(INI, "MYSQL", "Password");
 Database = ReadIni(INI, "MYSQL", "Database");
 Port     = StrToInteger(ReadIni(INI, "MYSQL", "Port"));
 Socket   = ReadIni(INI, "MYSQL", "Socket");
 ClientFlag = StrToInteger(ReadIni(INI, "MYSQL", "ClientFlag"));  

 Print ("Host: ",Host, ", User: ", User, ", Database: ",Database);
 
 // abrir la conexión a la base de datos
 Print ("Connecting...");
 
 DB = MySqlConnect(Host, User, Password, Database, Port, Socket, ClientFlag);
 
 if (DB == -1) { Print ("Connection failed! Error: "+MySqlErrorDescription); } else { Print ("Connected! DBID#",DB);}
 
 string Query;
 Query = "DROP TABLE IF EXISTS `test`";
 MySqlExecute(DB, Query);
 
 Query = "CREATE TABLE `test` (id int, code varchar(50), start_date datetime)";
 if (MySqlExecute(DB, Query))
    {
     Print ("Table `test` created.");
    }
 else
    {
     Print ("Table `test` cannot be created. Error: ", MySqlErrorDescription);
    }
 
 MySqlDisconnect(DB);
 Print ("Disconnected. Script done!");
}
//+------------------------------------------------------------------+
 
peg:

Hola Eugeniy,

Gracias por los enlaces.

Al principio usé tu código para conectarme a mi base de datos (estaba usando mySql Server por si es útil). Y pude ver la tabla. Luego cambié el nombre de la tabla en tu Script MySQL-002 (como puedes ver abajo) y aunque parecía funcionar no creaba mi tabla. Ahora estoy usando WampServer y obtengo:

0 11:09:37.579 Script MySQL-002 EURUSD,H1: cargado correctamente

0 11:09:37.730 MySQL-002 EURUSD,H1: inicializado

0 11:09:37.730 MySQL-002 EURUSD,H1: MQLMySQL v2.0 Demo Copyright © 2014, Laboratorio FxCodex

0 11:09:37.730 MySQL-002 EURUSD,H1: Host: , Usuario: , Base de datos:

0 11:09:37.730 MySQL-002 EURUSD,H1: Conectando...

0 11:09:37.741 MySQL-002 EURUSD,H1: ¡Conectado! DBID#0

0 11:09:37.742 MySQL-002 EURUSD,H1: No se puede crear la tabla `table`. Error: Aucune base n'a ?t? s?lectionn?e

0 11:09:37.742 MySQL-002 EURUSD,H1: Desconectado. ¡Script realizado!

0 11:09:37.742 MySQL-002 EURUSD,H1: uninit reason 0

0 11:09:37.743 Script MySQL-002 EURUSD,H1: eliminado

Basado en el error que veo en su registro: 0 11:09:37.742 MySQL-002 EURUSD,H1: Table `table` cannot be created.

está utilizando el nombre "tabla" que es la palabra clave de la base de datos mysql y no se puede utilizar como nombre de tabla, intente cambiar por ejemplo a "tabla1" sólo para comprobar si funciona.

Puede ejecutar el comando "USE database_name" justo después de la conexión, donde database_name es el nombre de su base de datos.

por ejemplo si mi base de datos es "mysql":

DB = MySqlConnect(Host, Usuario, Contraseña, Base de datos, Puerto, Socket, ClientFlag);

if (DB ==-1) { Print ("¡Fallo de conexión! Error: "+MySqlErrorDescription); } else { Print ("¡Conectada! DBID#",DB);}

MySqlExecute(DB, "USE mysql");