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

 
Eugeniy Lugovoy:

Olá, James,

Atualmente, estou trabalhando no Upwork apenas em um grande projeto. Portanto, não tenho muito tempo livre atualmente. Qual é o problema que você tem com as bibliotecas? Como posso ajudá-lo?

Olá,

Acabei descobrindo o problema, mas, de qualquer forma, obrigado pela biblioteca.... Muito útil!!!

James
 

Por que tudo parou de funcionar após a atualização para o build 890 mt4?

O registro diz que a violação de acesso foi lida para 0x00000000 em 'D:\MT4\MQL4\libraries\MQLMySQL.dll'.

 
também interessado em ...
 
Itum:
também interessado em ...
Pessoal, tentarei verificar nos próximos dias.
 
Estou ansioso por isso!
 
alhimik7:
Estou ansioso por isso!

MT4 build 890 x32 acabou de ser verificado. Tudo está funcionando.

Registro da execução dos scripts de teste:

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

Pessoal, esclareçam:

1. Em que operação ocorre a mensagem"Access violation read" ?

2. Ao executar o script MySQL-001, qual versão do MQLMySQL é exibida na guia Experts? Deveria ser: MQLMySQL v2.2 x32 Copyright © 2014, FxCodex Laboratory.

3. Qual é a versão do banco de dados MySQL?

4. o MySQL é usado localmente ou em um host remoto?

5. Em qual sistema operacional você executa o terminal?

Verifique e informe, pois não consigo reproduzir o erro.

Vou criar um ambiente semelhante e testar.

 

Olá,

Estou tentando conectar o Metatrader ao Mysql por meio de seus arquivos.
Após o download e a instalação, alterei o arquivo "MyConnection" definindo as informações do meu banco de dados.

Aqui está o problema:

No início, tudo funcionou muito bem; os scripts estavam criando tabelas dentro do banco de dados. Depois, fiz uma pequena alteração no código (apenas mudei o nome da tabela) e excluí a tabela do banco de dados para que o script criasse uma nova do zero sem descartar a anterior. E tudo o que consegui foi a criação das colunas, mas sem nenhum dado.
Então, decidi usar os scripts antigos novamente. Então não consegui nada, nem mesmo uma tabela foi criada. Desde então, tenho um banco de dados que permanece vazio.

Alguma ideia do que poderia ter dado errado?

Desde já, obrigado!

 
peg:

Olá,

Estou tentando conectar o Metatrader ao Mysql por meio de seus arquivos.
Após o download e a instalação, alterei o arquivo "MyConnection" definindo as informações do meu banco de dados.

Aqui está o problema:

No início, tudo funcionou muito bem; os scripts estavam criando tabelas dentro do banco de dados. Depois, fiz uma pequena alteração no código (apenas mudei o nome da tabela) e excluí a tabela do banco de dados para que o script criasse uma nova do zero sem descartar a anterior. E tudo o que consegui foi a criação das colunas, mas sem nenhum dado.
Então, decidi usar os scripts antigos novamente. Então não consegui nada, nem mesmo uma tabela foi criada. Desde então, tenho um banco de dados que permanece vazio.

Alguma ideia do que poderia ter dado errado?

Desde já, obrigado!

Olá, Peg,

Para criar uma tabela, use o comando SQL CREATE TABLE http://dev.mysql.com/doc/refman/5.7/en/create-table.html

Para inserir dados, use o comando SQL INSERT INTO https://dev.mysql.com/doc/refman/5.6/en/insert.html

Para executar esses comandos, use a função MySqlExecute.

Você também pode fornecer seu código para que eu possa resolver o 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:

Olá Peg,

Para criar uma tabela, use o comando SQL CREATE TABLE http://dev.mysql.com/doc/refman/5.7/en/create-table.html

Para inserir dados, use o comando SQL INSERT INTO https://dev.mysql.com/doc/refman/5.6/en/insert.html

Para executar esses comandos, use a função MySqlExecute.

Além disso, você pode fornecer seu código e eu poderei descobrir o problema.

Olá, Eugeniy,

Obrigado pelos links.

Inicialmente, usei seu código para me conectar ao meu banco de dados (eu estava usando o mySql Server, caso fosse útil). E consegui ver a tabela. Em seguida, alterei o nome da tabela em seu script MySQL-002 (como você pode ver abaixo) e, embora parecesse funcionar, ele não criava minha tabela. Agora estou usando o WampServer e obtenho:

0 11:09:37.579 Script MySQL-002 EURUSD,H1: carregado com sucesso

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, FxCodex Laboratory

0 11:09:37.730 MySQL-002 EURUSD,H1: Host: , Usuário: , Banco de dados:

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: A tabela `table` não pode ser criada. Error: Aucune base n'a ?t? s?lectionn?e

0 11:09:37.742 MySQL-002 EURUSD,H1: Desconectado. Script concluído!

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

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

//+------------------------------------------------------------------+
//|MySQL-002.mq4
//|Direitos autorais 2014, Eugene Lugovoy |
//|http://www.fxcodexlab.com
//| Criação de tabela (DEMO)|
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, Eugene Lugovoy."
#property link      "http://www.fxcodexlab.com"
#property version   "1.00"
#property strict

#include <MQLMySQL.mqh>

string INI;
//+------------------------------------------------------------------+
//| Função de início do programa de script|
//+------------------------------------------------------------------+
void OnStart()
{
 string Host, User, Password, Database, Socket; // credenciais do banco de dados
 int Port,ClientFlag;
 int DB; // identificador do banco de dados
 
 Print (MySqlVersion());

 INI = TerminalPath()+"\\MQL4\\Scripts\\MyConnection.ini";
 
 // leitura das credenciais do banco de dados do arquivo 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 conexão com o banco de dados
 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:

Olá, Eugeniy,

Obrigado pelos links.

Inicialmente, usei seu código para me conectar ao meu banco de dados (eu estava usando o mySql Server, caso fosse útil). E consegui ver a tabela. Em seguida, alterei o nome da tabela em seu script MySQL-002 (como você pode ver abaixo) e, embora parecesse funcionar, ele não criava minha tabela. Agora estou usando o WampServer e obtenho:

0 11:09:37.579 Script MySQL-002 EURUSD,H1: carregado com sucesso

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, FxCodex Laboratory

0 11:09:37.730 MySQL-002 EURUSD,H1: Host: , Usuário: , Banco de dados:

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: A tabela `table` não pode ser criada. Error: Aucune base n'a ?t? s?lectionn?e

0 11:09:37.742 MySQL-002 EURUSD,H1: Desconectado. Script concluído!

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

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

Com base no erro que vejo no seu registro: 0 11:09:37.742 MySQL-002 EURUSD,H1: Table `table` cannot be created.

Você está usando o nome "table", que é a palavra-chave do banco de dados mysql e não pode ser usado como nome de tabela. Tente mudar para "table1", por exemplo, apenas para verificar se funciona.

É possível que o banco de dados não tenha sido selecionado ou não tenha sido definido. Você pode executar o comando "USE database_name" logo após a conexão, em que database_name é o nome do seu banco de dados.

Por exemplo, se meu banco de dados for "mysql":

DB = MySqlConnect(Host, User, Password, Database, Port, Socket, ClientFlag);

if (DB ==-1) { Print ("Connection failed! Error: "+MySqlErrorDescription); } else { Print ("Connected! DBID#",DB);}

MySqlExecute(DB, "USE mysql");