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

 

Obrigado pelo artigo! Quantas soluções não tentaram em todos os lugares a mesma coisa, se você não se incomodar, por favor, dê uma olhada no log, não consigo entender nada....

Servidor MySQL:

  • Servidor: localhost via TCP/IP
  • Versão do servidor: 5.6.10
  • Versão do protocolo: 10
  • Usuário: root@localhost
  • Codificação do MySQL: UTF-8 Unicode (utf8 )
  • Banco de dados InnoDB, UTF8-General-Ci

MT5 build 1035

Sistema operacional: Win8.1 x64

Arquivos anexados:
log_.txt  19 kb
 

Saudações.

Você tem um sistema operacional x64, tem certeza de que está usando as DLLs para a versão de 64 bits?

Elas estão anexadas em uma das postagens de discussão(mqlmysql_for_mql5_x64.zip1264 kb).

No artigo, havia bibliotecas apenas para sistemas operacionais x86.

A propósito, os exemplos de teste do arquivo funcionam?

<<um pouco mais tarde>>.

Esta linha é confusa: Arquivo de teste adicionado: libraries\MQLMySQL.dll. 89626 bytes carregados

O tamanho original do arquivo x64 MQLMySQL.dll = 89600 bytes, não 89626.

Qual é o seu antivírus?

 

Hi.

Gostei do conceito. Deve ser de grande ajuda

Mas estou enfrentando um problema. Estou usando 64 bits e fiz o download e iniciei um script de teste para ver como funciona.

mas trava no MySQLGetFieldAsxxxxx

2015.01.09 21:32:09.535 testsql(AUDNZD,H1) 000000013F81347A 488BF2 mov rsi, rdx
2015.01.09 21:32:09.535 testsql (AUDNZD,H1) 000000013F813476 4883EC20 sub rsp, 0x20
2015.01.09 21:32:09.535 testsql (AUDNZD,H1) 000000013F813475 57 push rdi
2015.01.09 21:32:09.535 testsql (AUDNZD,H1) 000000013F813470 4889742418 mov [rsp+0x18], rsi
2015.01.09 21:32:09.535 testsql (AUDNZD,H1) Access violation at 0x000000013F8134B3 read to 0x0000000000000001
2015.01.09 21:32:09.535 testsql (AUDNZD,H1) +++++++++++++0
2015.01.09 21:32:09.535 testsql (AUDNZD,H1) 2 row(s) selected.
2015.01.09 21:32:09.425 testsql (AUDNZD,H1) Conectado
2015.01.09 21:31:18.135 testsql (AUDNZD,H1) x 0 y


Sorrir:

#include <FXCM\PairsInfo.mqh>
#include <FXCM\MQLMySQL.mqh>

//--- parâmetros de entrada
input string   MySQLURL="yyyyyyyyyyyyyy";
input string   MySQLDB = "forex";
input string   MySQLParms = "tradeparms";
input string   MySQLUser="Ingvar";
input string   MySQLPW="xxxxxxxxxxxx";
input int      MySQLPort=3306;
input string   GroupID= "Groupxxx";

PairsInfo prms;

//+------------------------------------------------------------------+
//| Função de início do programa de script|
//+------------------------------------------------------------------+
void OnStart()
  {
//---
  string SQLString = "";
  string Q;
  string C = ",";
  StringSetCharacter(Q,0,34);
  
  string query;
  int Cursor;
  int DB;
  int rows;
  
  DB = MySqlConnect(MySQLURL, MySQLUser, MySQLPW, MySQLDB, MySQLPort, "0", 0);
  if (DB == -1) 
    {
      Print ("Connection failed! Error: "+MySqlErrorDescription); 
      return;
    }

    Print ("Connected");
    
  // consulta = "Select * From tradeparms";
    
  // consulta = "Select * FROM tradeparms WHERE TradeType = 2";
    
    query = "SELECT Pair, TradeType, SetupID FROM tradeparms WHERE TradeType = 2 AND Pair = 'USDJPY'";
     
     
   Cursor = MySqlCursorOpen(DB,query);
   if(Cursor <  0)
    {
      Print("Cursor error");
      return;
    }


   string pair= "x";
   int tradetype = 0;
   string setupid = "y";
   
   rows = MySqlCursorRows(Cursor);
   Print (rows, " row(s) selected.");
   
   for(int i=0;i<rows;i++)
    {
     if (MySqlCursorFetchRow(Cursor))  
       {
        Print("+++++++++++++" + i);
    pair = MySqlGetFieldAsString(Cursor, 0);                    << crashes here.   
   // tradetype = MySqlGetFieldAsInt(Cursor,1);
   // setupid = MySqlGetFieldAsString(Cursor,2);
       }
     }  
      
   Print(pair + "  " + DoubleToString(tradetype,0) + "  " + setupid);
   
   MySqlCursorClose(Cursor);
 
  
 } 
 

Peguei meu laptop antigo com win32 e instalei a versão de 32 bits nele e compilei o mesmo código-fonte com a biblioteca e os includes de 32 bits.

Funciona bem. O problema é com a versão de 64 bits

 
ingvar_e:

Peguei meu laptop antigo com win32 e instalei a versão de 32 bits nele e compilei o mesmo código-fonte com a biblioteca e os includes de 32 bits.

Funciona bem. O problema é com a versão de 64 bits

Ok, vou verificar isso.

Qual é a versão do terminal? MT4/MT5? e número de compilação?

 
elugovoy:

Ok, vou verificar isso.

Qual é a versão do terminal? MT4/MT5? e o número de compilação?

Terminal MT5 Build 1035 em execução no W7 64 com falha

Terminal MT5 Build 1035 em execução no XP 32 OK

Muito obrigado. Estou trabalhando em um EA com várias moedas e vários métodos (mais ou menos) que atualmente usa um arquivo de entrada. Para ter flexibilidade no teste de diferentes arquivos de entrada, estou convertendo para MySQL

 
ingvar_e:

Terminal MT5 Build 1035 em execução no W7 64 com falha

Terminal MT5 Build 1035 em execução no XP 32 OK

Agradeço. Estou trabalhando em um EA com várias moedas e vários métodos (mais ou menos) que atualmente usa um arquivo de entrada. Para ter flexibilidade ao testar diferentes arquivos de entrada, estou convertendo para MySQL

Eu o testei no sistema operacional x64, MT5 build 1035. Você está absolutamente certo.

Fiz algumas verificações e descobri que os dados que chegam à DLL funcionam bem. O problema está no recebimento do tipo de dados STRING das funções da DLL.

Além disso, testei meus próprios scripts que foram compilados com a versão anterior do MT5 x64 - funciona bem.

Mas, depois de recompilar com a compilação 1035, o mesmo script com a mesma DLL gera esses erros.

Por fim, presumo que o problema não esteja na DLL ou no projeto MQLMySQL, mas no compilador do MT5 x64. Abri um caso na central de serviços para esse problema.

Obrigado,

Eugênio

 
ingvar_e:

Terminal MT5 Build 1035 em execução no W7 64 com falha

Terminal MT5 Build 1035 em execução no XP 32 OK

Agradeço. Estou trabalhando em um EA com várias moedas e vários métodos (mais ou menos) que atualmente usa um arquivo de entrada. Para ter flexibilidade no teste de diferentes arquivos de entrada, estou convertendo para MySQL

Apenas para teste, você pode usar meus scripts incluídos no pacote de distribuição.

Altere as credenciais do banco de dados no arquivo INI e, em seguida, execute os scripts.

Tente recompilá-los e executá-los novamente.

Você verá que na primeira execução eles funcionam bem, mas depois de recompilar, eles apresentam os mesmos erros que os seus.

O problema está no terminal/compilador do MT5 x64 b1035

 
elugovoy:

Apenas para teste, você pode usar meus scripts incluídos no pacote de distribuição.

Altere as credenciais do banco de dados no arquivo INI e, em seguida, execute os scripts.

Tente recompilá-los e executá-los novamente.

Você verá que na primeira execução eles funcionam bem, mas depois de recompilá-los, eles apresentam os mesmos erros que os seus.

O problema está no MT5 x64 b1035 terminal/compilador

>O problema está no MT5 x64 b1035

Então, estamos presos?

Meu antigo laptop de 32 bits parou de funcionar hoje. Completamente morto.

Gostaria de saber se posso instalar um Windows de 32 bits em uma máquina de 64 bits e se isso realmente ajuda. Ou instalar um MT5/MQL5 de 32 bits em uma máquina com Windows 7 de 64 bits

Mais tarde:

Encontrei isso Tentando.

 
ingvar_e:

>O problema está no MT5 x64 b1035

Então, estamos presos?

Meu antigo laptop de 32 bits parou de funcionar hoje. Completamente morto.

Gostaria de saber se posso instalar um Windows de 32 bits em uma máquina de 64 bits e se isso realmente ajuda. Ou instalar um MT5/MQL5 de 32 bits em uma máquina com Windows 7 de 64 bits

Mais tarde:

Encontrei isso Tentando.

  • Para instalar a versão de 32 bits em um sistema operacional de 64 bits, você deve iniciar o instalador com a chave /32. Por exemplo, c:\>mt5setup.exe /32.
  • ,SYMBOL_TRADE_TICK_VALUE)

    retorna 0;

    Talvez não seja uma boa ideia executar um MT5 de 32 bits em uma máquina Windows de 64 bits. Também há outras indicações de mau funcionamento. A próxima tentativa será instalar um Windows 32 em meu computador de 64 bits.

    Esses longos desvios sempre o afastam muito de sua rota principal :-(

    Parece que vou ter que desistir dessa ferramenta e voltar ao básico com o MySQL. É muito incômodo instalar um novo Windows XP e não tenho a chave do W7