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

 
¿ Qué pasa con el soporte de caching_sha2_password ? Hay alguna forma de solucionarlo o debería instalar mysql_native_password?
 
Dmitri Custurov:
¿ Qué pasa con el soporte de caching_sha2_password ? ¿ Hay alguna forma de solucionarlo o simplemente instalar mysql_native_password ?

Hy hasta ahora nativo sólo se admite. ¿alguien realmente necesita soporte sha2 en esta solución?

¿Así que su servidor de base de datos no se encuentra localmente o incluso bajo vpn?

 

Hola @EugeniyLugovoy y ¡gracias por tu duro trabajo!

En la versión actual de tu implementación, ¿hay alguna forma de recuperar el "LAST_INSERT_ID" después de una operación INSERT (en una tabla con una columna AUTO_INCREMENT)?

Gracias de antemano y que tenga un buen día :)
 
arsenico42:

Hola @EugeniyLugovoy y ¡gracias por tu duro trabajo!

En la versión actual de tu implementación, ¿hay alguna forma de recuperar el "LAST_INSERT_ID" después de una operación INSERT (en una tabla con una columna AUTO_INCREMENT)?

Gracias de antemano y que tengas un buen día :)


Hola arsenico42, puedes intentar hacer la inserción en una consulta y luego seleccionar LAST_INSERT_ID en otra, pero no puedo recomendar esta forma, pero no puedo recomendar esta forma porque LAST_INSERT_ID es una función que devuelve una variable global de la base de datos, y otra inserción (de otro usuario, ejecutándose concurrentemente) entre tu inserción original y la selección de LAST_INSERT_ID puede afectar el valor de LAST_INSERT_ID.

Esto no depende de la librería, es como funciona mysql/mariadb.

Pero, puedo aconsejarle para crear una función en el lado de base de datos para insertar los valores requeridos, seleccione LAST_INSERT_ID y devolver este ID como valor de la función. podría parecer:

CREATE FUNCTION `import_funds_add`(
        `p_file_name` varchar(64),
        `p_full_path` varchar(2000),
        `p_status` VARCHAR(10),
        `p_error` VARCHAR(2000)
)
RETURNS bigint(20)
LANGUAGE SQL
NOT DETERMINISTIC
MODIFIES SQL DATA
BEGIN
     declare id bigint;
     INSERT INTO import_funds(`file_name`, `full_path`, `status`, `error`, `creation_date`) 
     VALUES (p_file_name, p_full_path, p_status, p_error, now());
     SELECT LAST_INSERT_ID() INTO id;
     RETURN(id);
END;;

Y en MQL tienes que abrir el cursor para la consulta:

qry="SELECT import_funds_add('bonuses.csv','c:\\broker imports\\XXX-FX','NEW','No errors') as last_id";

a continuación, obtener el valor como de cursor habitual y cerrar el cursor.

Así, en lugar de utilizar los comandos por separado en MQL sólo puede combinarlos en el lado DB en la función.

es solo un ejemplo de un sistema en vivo.

 
Carmine Marrone:

Hola elugovoy

Impresionante artículo y estupendas bibliotecas.

Estoy tratando de utilizar sus ejemplos en MT5 pero estoy recibiendo este error:

2014.12.15 15:44:16.387 MySQL-001 'C:\Users\....\AppData\Roaming\MetaQuotes\TerminalD0E8209F77C8CF37AD8BF550E51FF075\MQL5\libraries\MQLMySQL.dll' no es la versión de 64 bits

¿Está ejecutando MT5 en un entorno de 32 bits?

¿Podría ayudarme?

¡Muchas Gracias!

Carmine Marrone.

Hola Carmine, puede descargar la versión x64 de las fuentes en github.

https://github.com/elugovoy/MQLMySQL-Project/tree/master/MQLMySQL/x64/Release

 

Hola @Eugeniy Lugovoy, en primer lugar gracias por toda la contribución a la comunidad


Estoy stucked aquí:

"Cannot load 'C:\Users\Admin\AppData\Roaming\MetaQuotes\Tester\D0E8209F77C8CF37AD8BF550E51FF075\Agent-127.0.0.1-3000\MQL5\libraries\MQLMySQL.dll'" [126]

"No se puede llamar a 'ReadIni', '..\libraries\MQLMySQL.dll' no está cargado"
 
MARCOS DALCIN ALVES DINIZ:

Hey @Eugeniy Lugovoy, en primer lugar gracias por toda la contribución a la comunidad


Estoy stucked aquí:

"Cannot load 'C:\Users\Admin\AppData\Roaming\MetaQuotes\Tester\D0E8209F77C8CF37AD8BF550E51FF075\Agent-127.0.0.1-3000\MQL5\libraries\MQLMySQL.dll'" [126]

"No se puede llamar a 'ReadIni', '..\libraries\MQLMySQL.dll' no está cargado"

Asegúrese de que tiene los archivos MQLMySQL.dll & MQLMySQL.def ubicados en su carpeta "C:\Users\Admin\AppData\Roaming\MetaQuotes\Tester\D0E8209F77C8CF37AD8BF550E51FF075\Agent-127.0.0.1-3000\MQL5\libraries\".

Como puede ver si está ejecutando programas MQL en modo Tester, la ruta a las librerías sería diferente (debido a UAC)

 

multi-insert obtiene error.

Query =         "INSERT INTO `test_table` (id, code, start_date) VALUES (1,\'EURUSD\',\'2014.01.01 00:00:01\');";
Query = Query + "INSERT INTO `test_table` (id, code, start_date) VALUES (2,\'EURJPY\',\'2014.01.02 00:02:00\');";
Query = Query + "INSERT INTO `test_table` (id, code, start_date) VALUES (3,\'USDJPY\',\'2014.01.03 03:00:00\');";
      

Error de múltiples sentencias: Usted tiene un error en su sintaxis SQL; consulte el manual que corresponde a su versión del servidor MySQL para la sintaxis correcta a utilizar cerca de ...



 
¿es compatible con el comando modify sql?
 
Yu Zhang:

multi-insert obtiene error.

Error de múltiples sentencias: Usted tiene un error en su sintaxis SQL; consulte el manual que corresponde a su versión del servidor MySQL para la sintaxis correcta a utilizar cerca de ...



Asegúrese de que ha establecido la bandera de cliente de múltiples declaraciones en la apertura de la conexión de base de datos.

int ClientFlag = CLIENT_MULTI_STATEMENTS; // Establecer la bandera multi-statements
int DB; 

DB = MySqlConnect(Host, User, Password, Database, Port, Socket, ClientFlag); // Conexión a la base de datos