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);
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?
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
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.
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.
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
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
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
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
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?