Discussão do artigo "Como acessar o banco de dados MySQL a partir do MQL5 (MQL4)" - página 24

 
E quanto ao suporte a caching_sha2_password? Existe alguma maneira de lidar com isso ou devo apenas instalar o mysql_native_password?
 
Dmitri Custurov:
E quanto ao suporte a caching_sha2_password? Existe alguma maneira de lidar com isso ou apenas instalar o mysql_native_password?

Hy, até o momento, só há suporte para o nativo. Alguém realmente precisa de suporte para sha2 nessa solução?

Então seu servidor de banco de dados não está localizado localmente ou mesmo sob VPN?

 

Olá @EugeniyLugovoy e obrigado por seu trabalho árduo!

Na versão atual da sua implementação, existe uma maneira de recuperar o "LAST_INSERT_ID" após uma operação INSERT (em uma tabela com uma coluna AUTO_INCREMENT)?

Desde já, obrigado e tenha um bom dia :)
 
arsenico42:

Olá @EugeniyLugovoy e obrigado por seu trabalho árduo!

Na versão atual da sua implementação, existe uma maneira de recuperar o "LAST_INSERT_ID" após uma operação INSERT (em uma tabela com uma coluna AUTO_INCREMENT)?

Desde já, obrigado e tenha um bom dia :)


Olá arsenico42, você pode tentar fazer a inserção em uma consulta e, em seguida, selecionar LAST_INSERT_ID em outra, mas não posso recomendar essa maneira, pois LAST_INSERT_ID é uma função que retorna uma variável global do banco de dados, e outra inserção (de outro usuário, executada simultaneamente) entre a inserção original e a seleção de LAST_INSERT_ID pode afetar o valor de LAST_INSERT_ID.

Isso não depende da biblioteca, é como o mysql/mariadb funciona.

Mas posso aconselhá-lo a criar uma função no banco de dados para inserir os valores necessários, selecionar LAST_INSERT_ID e retornar esse ID como valor da função:

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;;

E no MQL você precisa abrir o cursor para a consulta:

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

em seguida, obter o valor do cursor usual e fechar o cursor.

Portanto, em vez de usar esses comandos separadamente no MQL, você pode simplesmente combiná-los no lado do banco de dados em uma função.

Esse é apenas um exemplo de um sistema ativo.

 
Carmine Marrone:

Olá elugovoy

Artigo incrível e ótimas bibliotecas.

Estou tentando usar seus exemplos no MT5, mas estou recebendo este erro:

2014.12.15 15:44:16.387 MySQL-001 'C:\Users\....\AppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075\MQL5\libraries\MQLMySQL.dll' não é uma versão de 64 bits

Você está executando o MT5 em um ambiente de 32 bits?

Poderia me ajudar com isso, por favor?

Muito obrigado!

Carmine Marrone.

Olá Carmine, você pode fazer download da versão x64 a partir das fontes no github.

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

 

Olá @Eugeniy Lugovoy, antes de mais nada, obrigado por toda a contribuição para a comunidade


Estou preso aqui:

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

"Não é possível chamar 'ReadIni', '..\libraries\MQLMySQL.dll' não está carregado"
 
MARCOS DALCIN ALVES DINIZ:

Olá @Eugeniy Lugovoy, antes de mais nada, obrigado por toda a contribuição para a comunidade


Estou preso aqui:

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

"Não é possível chamar 'ReadIni', '..\libraries\MQLMySQL.dll' não está carregado"

Verifique se você tem os arquivos MQLMySQL.dll e MQLMySQL.def localizados na pasta "C:\Users\Admin\AppData\Roaming\MetaQuotes\Tester\D0E8209F77C8CF37AD8BF550E51FF075\Agent-127.0.0.1-3000\MQL5\libraries\"

Como você pode ver, se estiver executando programas MQL no modo Tester, o caminho para as bibliotecas será diferente (devido ao UAC)

 

multi-insert obtém erro.

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\');";
      

Erro de várias instruções: Você tem um erro na sintaxe SQL; verifique o manual que corresponde à sua versão do servidor MySQL para saber a sintaxe correta a ser usada perto de ...



 
Ele é compatível com o comando modify sql?
 
Yu Zhang:

A inserção múltipla obtém um erro.

Erro de várias instruções: Você tem um erro na sintaxe SQL; verifique o manual que corresponde à sua versão do servidor MySQL para saber a sintaxe correta a ser usada perto de ...



Certifique-se de ter definido o sinalizador de cliente de várias instruções na abertura da conexão com o banco de dados.

int ClientFlag = CLIENT_MULTI_STATEMENTS; // Definição do sinalizador de multi-statements
int DB; 

DB = MySqlConnect(Host, User, Password, Database, Port, Socket, ClientFlag); // Conexão com o banco de dados