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

 
Eugeniy Lugovoy:

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

Registro da execução dos scripts de teste:

Pessoal, por favor, 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.

Estou usando o MT4 (950). Peguei os arquivos do arquivo anexado ao artigo. Entendi corretamente que não é a versão mais recente: MySQL-001 EURUSD,M1: MQLMySQL v2.0 Demo Copyright © 2014, FxCodex Laboratory.

Ele não lê os dados do arquivo de configuração.

 
Sergey Deynego:

Eu uso o MT4 (950). Peguei os arquivos do arquivo anexado ao artigo. Entendi corretamente que não é a versão mais recente: MySQL-001 EURUSD,M1: MQLMySQL v2.0 Demo Copyright © 2014, FxCodex Laboratory

Ele não lê os dados do arquivo de configuração.

Sim, a v2.0 é antiga. Eu já postei versões mais recentes na discussão do artigo.

Vou anexá-la agora.

MQLMySQL v2.2 - Fontes do projeto DLL para x64 e x86

Tente algo a partir disso. Parece ser a versão mais recente.

Arquivos anexados:
MQLMySQL_v2.2.zip  4801 kb
MQL4_x32.zip  1073 kb
MQL5_x32.zip  1073 kb
MQL5_x64.zip  1076 kb
 
Eugeniy Lugovoy:

Com base no erro que vejo no seu registro: 0 11:09:37.742 MySQL-002 EURUSD,H1: A tabela `table` não pode ser criada.

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

Bem, segui suas sugestões para o nome das tabelas e o comando MySqlExecute(DB, "USE mt4"), mas ainda recebo a mensagem de erro:

0 12:51:40.534 Script MySQL-002new EURUSD,M1: carregado com sucesso

0 12:51:40.549 MySQL-002new EURUSD,M1: inicializado

0 12:51:40.549 MySQL-002new EURUSD,M1: MQLMySQL v2.0 Demo Copyright © 2014, FxCodex Laboratory

0 12:51:40.549 MySQL-002new EURUSD,M1: Host: , User: , Database:

0 12:51:40.549 MySQL-002new EURUSD,M1: Conectando...

0 12:51:40.565 MySQL-002new EURUSD,M1: Conectado! DBID#0

0 12:51:40.565 MySQL-002new EURUSD,M1: A tabela `test_table` não pode ser criada. Error: Aucune base n'a ?t? s?lectionn?e

0 12:51:40.565 MySQL-002new EURUSD,M1: Desconectado. Script concluído!

0 12:51:40.565 MySQL-002new EURUSD,M1: uninit reason 0

0 12:51:40.565 Script MySQL-002new EURUSD,M1: removido

 

Olá , Eugeniy Lugovoy,

Muito obrigado por seu projeto útil.

Estou tentando ler um campo de cadeia de caracteres de uma tabela com cerca de 3.000 caracteres, usei o "MySqlGetFieldAsString" assim:


if (Cursor >= 0)

{

Rows = MySqlCursorRows(Cursor);

for (int i=0; i<Rows; i++)

se (MySqlCursorFetchRow(Cursor))

{

Get_Setting = MySqlGetFieldAsString(Cursor, 4);

}

.....

Mas o problema é que Get_String me retorna apenas 1.025 caracteres,

Preciso ler esse campo completamente.

Você pode me ajudar a resolver isso?

Atenciosamente

 
FX. MDA7:

Olá , Eugeniy Lugovoy,

Muito obrigado por seu projeto útil.

Estou tentando ler um campo de cadeia de caracteres de uma tabela com cerca de 3.000 caracteres, usei o "MySqlGetFieldAsString" assim:


if (Cursor >= 0)

{

Rows = MySqlCursorRows(Cursor);

for (int i=0; i<Rows; i++)

se (MySqlCursorFetchRow(Cursor))

{

Get_Setting = MySqlGetFieldAsString(Cursor, 4);

}

.....

Mas o problema é que Get_String me retorna apenas 1.025 caracteres,

Preciso ler esse campo completamente.

Você pode me ajudar a resolver isso?

Considerações

Sim, configurei o comprimento máximo dos dados de caracteres como 1024 caracteres. Posso alterar esse limite e reconstruir a DLL. A propósito, que tipo de dados você está usando para essa coluna no banco de dados?
 
peg:

Bem, segui suas sugestões para o nome das tabelas e o comando MySqlExecute(DB, "USE mt4"), mas ainda recebo a mensagem de erro:

0 12:51:40.534 Script MySQL-002new EURUSD,M1: carregado com sucesso

0 12:51:40.549 MySQL-002new EURUSD,M1: inicializado

0 12:51:40.549 MySQL-002new EURUSD,M1: MQLMySQL v2.0 Demo Copyright © 2014, FxCodex Laboratory

0 12:51:40.549 MySQL-002new EURUSD,M1: Host: , User: , Database:

0 12:51:40.549 MySQL-002new EURUSD,M1: Conectando...

0 12:51:40.565 MySQL-002new EURUSD,M1: Conectado! DBID#0

0 12:51:40.565 MySQL-002new EURUSD,M1: A tabela `test_table` não pode ser criada. Error: Aucune base n'a ?t? s?lectionn?e

0 12:51:40.565 MySQL-002new EURUSD,M1: Desconectado. Script concluído!

0 12:51:40.565 MySQL-002new EURUSD,M1: uninit reason 0

0 12:51:40.565 Script MySQL-002new EURUSD,M1: removido

Por que a versão"MQLMySQL v2.0"? deveria ser 2.2
 

Excelente!

Estou usando a MQL5 para gerar dados para a MQL4.

Tudo funcionou perfeitamente, exceto pelo fato de eu ter que remover as aspas simples em torno do nome da tabela no comando de consulta

Query ="SELECT Symbol,Composite,Pattern FROM summarytable";

funciona bem

 
Ingvar Engelbrecht:

Excelente!

Estou usando a MQL5 para gerar dados para a MQL4.

Tudo funcionou perfeitamente, exceto pelo fato de eu ter que remover as aspas simples em torno do nome da tabela no comando de consulta

Query ="SELECT Symbol,Composite,Pattern FROM summarytable";

funciona bem

Sim, é possível usar sem aspas se você não planeja nomear tabelas com letras maiúsculas e minúsculas (o mysql diferencia maiúsculas de minúsculas) e símbolos especiais. A propósito, não se trata do símbolo de aspas simples "'", mas sim de "`"

Portanto, sua consulta também poderia ser: Query ="SELECT `Symbol`,`Composite`,`Pattern` FROM `summarytable`";

se você quiser nomear as colunas como Symbol, mas não como símbolo ou SYMBOL

 

Oi Eugeniy,

Obrigado por seu módulo, muito útil. Você poderia me ajudar a adicionar uma função para obter o nome do campo ou como eu poderia adicioná-la no VC++?

 

Como você está!

sistema win10 64x, não é possível se conectar ao banco de dados, você pode me ajudar?