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

 
Pavel Kolchin:

começaram a aparecer o tempo todo, o que isso significa?

ao executar meu código nesta linha.

if(DB==-1){DB=MySqlConnect(Host, User, Password, Database, Port, Socket, ClientFlag);}

res = MySqlCursorOpen(DB, "SELECT id, account, symbol FROM `current` WHERE account="+account);

No MQL, todas as cadeias de caracteres são Unicode e você as passa em vez de ANSI.

É por isso que a dllka trava.

 
MetaQuotes Software Corp.:

No MQL, todas as cadeias de caracteres são Unicode e você as passa em vez de ANSI.

É por isso que a dll trava.

Se eu remover a condição, tudo funcionará, em geral, você pode refazê-la de forma diferente, mas não entendo por que ela trava.

//if(DB==-1){

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

//}

res = MySqlCursorOpen(DB, "SELECT id, account, symbol FROM `current` WHERE account="+account);

 
MetaQuotes Software Corp.:

No MQL, todas as cadeias de caracteres são Unicode e você as passa em vez de ANSI.

É por isso que a dll trava.

Na DLL, a recodificação é realizada
 
Pavel Kolchin:

Se eu remover a condição, tudo funcionará, em geral, você pode refazê-la de forma diferente, mas não entendo por que ela trava

//if(DB==-1){

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

//}

res = MySqlCursorOpen(DB, "SELECT id, account, symbol FROM `current` WHERE account="+account);

Qual é a lógica? Você tem uma conexão antes desse código? Qual é o valor de DB antes da condição? Se a variável DB não estiver inicializada, provavelmente é por causa disso.

E, no último exemplo, você abre uma conexão com o banco de dados normalmente e é por isso que o cursor também funciona

Os scripts fornecidos com a DLL funcionam?
 

Saudações, Eugene!

Obrigado pelo script. Decidi implementá-lo em meu projeto. Mas, na etapa de teste dos scripts que você anexou ao projeto, tenho um erro que não está claro. O ReadIni não funciona. Talvez eu tenha feito algo errado, mas ele sempre retorna valores vazios do ini. Qual poderia ser o motivo? Suspeito que ele não encontre o arquivo no caminho especificado, mas verifiquei em diferentes diretórios que tudo está correto e no lugar.

Se eu prescrever os dados para a conexão diretamente no código, tudo funcionará bem.

Estou usando o mt4.
 
E aqui está outro problema: o texto em russo é inserido em karakaziaby. É claro que eu entendo que a dll está recodificando, mas meu banco de dados é UTF-8. O que devo fazer para inserir texto em russo legível? isso facilitaria muito minha vida?
 
Anton Gaisin:

Saudações, Eugene!

Obrigado pelo script. Decidi implementá-lo em meu projeto. Mas, na etapa de teste dos scripts que você anexou ao projeto, tenho um erro que não está claro. O ReadIni não funciona. Talvez eu tenha feito algo errado, mas ele sempre retorna valores vazios do ini. Qual poderia ser o motivo? Suspeito que ele não encontre o arquivo no caminho especificado, mas verifiquei em diferentes diretórios que tudo está correto e no lugar.

Se eu prescrever os dados para a conexão diretamente no código, tudo funcionará bem.

Estou usando o mt4.

Você deve verificar os caminhos... O UAC provavelmente afeta. Que caminho você define para o INI? Para o diretório do terminal ou para os dados?

 
Anton Gaisin:
E aqui está outro problema: o texto em russo é inserido em karakaziaby. É claro que eu entendo que a dll está recodificando, mas meu banco de dados é UTF-8. O que devo fazer para inserir um texto em russo legível? isso facilitaria muito minha vida...?

Sim, a conversão para ASCII está em andamento, e há também um comentário sobre isso de colegas chineses. Assim que tiver tempo, tentarei corrigi-lo.

 
Eugeniy Lugovoy:

Você precisa verificar os caminhos... O UAC provavelmente afeta isso. Que caminho você define para o INI? Para o diretório do terminal ou para os dados?

Há exemplos em seu arquivo... neles, deixei tudo como está. Apenas alterei o ini.

O problema foi resolvido. Eu mesmo fui estúpido. Anteriormente, a pasta com o MT4 e a pasta com os dados estavam unidas. Agora a pasta de dados está armazenada em uma seção especial do Windows. Agora, o caminho está correto para usar TerminalInfoString(TERMINAL_DATA_PATH) em vez de TerminalPath().

 
Anton Gaisin:

Há exemplos em seu arquivo... neles, deixei tudo como estava. Apenas alterei o ini.

O problema foi resolvido. Eu mesmo fui estúpido. Anteriormente, a pasta com o MT4 e a pasta com os dados estavam unidas. Agora a pasta de dados está armazenada em uma seção especial do Windows. Agora, o caminho está correto para usar TerminalInfoString(TERMINAL_DATA_PATH) em vez de TerminalPath().

Hmm... isso está em algum lugar na biblioteca antiga, nas versões mais recentes (postadas na discussão) eu corrigi isso, se não me falha a memória :)

Ok, então o problema do UTF permanece. Tentarei resolvê-lo esta semana até o fim de semana, se não estiver sobrecarregado.