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

 
Pavel Kolchin:

win 7 x64 - mt5 x64 versão mais recente (v5 b1455)

Não consigo acessar o MySQL, mas isso não é uma pena.

Servidor: Localhost via soquete UNIX

Tipo de servidor: Servidor Percona

Versão do servidor: 5.5.35-33.0-log - Percona Server (GPL), Release rel33.0, Revisão 611

Versão do protocolo: 10

Usuário: ***

Codificação do servidor: UTF-8 Unicode (utf8)

funciona no mql4
O erro foi reproduzido. Vou resolvê-lo...
 

Aqui está o x64 recompilado para MQL5

Pavel, experimente.

Arquivos anexados:
MQL5_x64.zip  1412 kb
 
Eugeniy Lugovoy:


não há mais problemas com a conexão da dll

tudo funciona, obrigado

 
Pavel Kolchin:

não há mais problemas com a conexão da dll

tudo funciona, obrigado

Sempre fico feliz em ajudar.

Boa sorte com seus projetos.

 
Yuriy Asaulenko:

Obrigado, eu li o artigo. O autor do artigo atual, que entrou no site ....., fez uma observação muito boa e estragou tudo. e estragou tudo).


Eu mesmo já me deparei mais de uma vez com o problema de colisões nele. Por exemplo, se um robô de negociação estiver anexado a diferentes gráficos, mas usar a mesma base, e o acesso for feito a uma tabela de uso geral (digamos, registro/alteração de sessões, contas), em qualquer caso, você receberá um erro como "tabela bloqueada". E não importa se todas as transações foram concluídas, se os cursores foram fechados e se o banco de dados foi aberto no modo compartilhado.


O comentarista provavelmente não entendeu as configurações do sqlite, que resolvem todas as colisões por meio da compilação para o modo com bloqueios ou por meio de pragma.

Posso dizer que trabalho há vários anos em projetos pesados com multithreading de leitura/gravação simultânea e não há problemas, o principal é ter as mãos direitas.

 
o_O:

O comentarista provavelmente não entendeu as configurações do sqlite, que resolvem todas as colisões por meio da compilação para o modo com bloqueios ou por meio de pragma.

Posso dizer que tenho trabalhado por vários anos em projetos pesados com multithreading de leitura/gravação simultânea e não há problemas, o principal é ter as mãos direitas.

o_O

Se for o caso, posso pegar esse projeto para o SQLite, escrever scripts de teste/EA e, se houver bloqueios novamente, podemos resolver isso juntos (se você não se importar) e fornecer uma solução de software para a comunidade.

Talvez valha a pena prestar atenção a isso, pois há algumas vantagens de um BD (autonomia, SQL, mobilidade, capacidade de incorporação etc.).

Na verdade, peguei uma DLL pronta do SQLite (não o código-fonte) e não a recompilei, apenas trabalhei com a API C++.

 
Eugeniy Lugovoy:

o_O

Se for o caso, posso pegar esse projeto para o SQLite, escrever scripts de teste/EA e, se houver bloqueios novamente, podemos resolver isso juntos (se você não se importar) e fornecer uma solução de software para a comunidade.

Talvez valha a pena prestar atenção a isso, pois há algumas vantagens de um BD (autonomia, SQL, mobilidade, capacidade de incorporação etc.).

Na verdade, eu peguei uma DLL pronta do SQLite (não o código-fonte) e não a recompilei, apenas trabalhei com a API C++.

Seria realmente interessante se o "mito" do bloqueio do SQLite fosse confirmado ou desfeito. Se não fosse por essa incerteza, ou por soluções para resolvê-la, o SQlite é uma opção muito atraente para a interoperabilidade. Seria interessante saber também algo sobre seu desempenho, por exemplo, em comparação com o mesmo banco de dados com o Access. É claro, se alguém tiver tempo real e vontade de fazer esse trabalho.

Ainda há questões sobre a conexão da base a softwares de terceiros, que podem ser conectados a qualquer banco de dados - Access, SQL Server, Oracle e assim por diante. O SQLite tem um driver instalado no computador, como o OLEDB ou, pelo menos, o ODBC? E no mesmo Access, vários aplicativos podem gravar e ler no mesmo banco de dados de forma assíncrona por meio de diferentes interfaces sem nenhum problema. Suspeito que isso talvez não funcione com o SQLite.

 
Yuriy Asaulenko:

Seria realmente interessante se o "mito" do bloqueio do SQLite fosse confirmado ou desfeito. Se não fosse por essa incerteza, ou por soluções para eliminá-la, o SQlite é uma opção muito atraente para a interoperabilidade. Também seria interessante saber algo sobre seu desempenho, por exemplo, em comparação com o mesmo banco de dados com o Access. É claro, se alguém tiver tempo real e vontade de fazer esse trabalho.

Ainda há questões sobre a conexão da base a softwares de terceiros, que podem ser conectados a qualquer banco de dados - Access, SQL Server, Oracle e assim por diante. O SQLite tem um driver instalado no computador, como o OLEDB ou pelo menos o ODBC? E no mesmo Access, vários aplicativos podem gravar e ler no mesmo banco de dados de forma assíncrona por meio de diferentes interfaces sem nenhum problema. Suspeito que isso talvez não funcione com o SQLite.

Bem, o OLEDB para SQLite está disponível, basta pesquisar no Google. A propósito, uma ideia interessante é executar scripts de teste sobre localização por meio do OLEDB para o SQLite.... pervertida, é claro, mas todos nós somos pervertidos aqui....

E sobre o acesso nativo, acredito que, com esforços conjuntos, podemos obter um resultado positivo. É só uma questão de tempo, não vou conseguir fazer isso esta semana... talvez no fim de semana eu consiga algum tempo...

 
Eugeniy Lugovoy:

Bem, o OLEDB para SQLite está disponível, basta pesquisar no Google. A propósito, é interessante a ideia de executar scripts de teste sobre loc via OLEDB para SQLite.... pervertida, é claro, mas todos nós somos pervertidos aqui....

E com relação ao acesso nativo, acredito que, com esforços conjuntos, podemos obter um resultado positivo. É só uma questão de tempo, não poderei fazer isso esta semana... talvez no fim de semana eu consiga alocar tempo...

Tenho um aplicativo que cria um banco de dados e grava (não lê) nele grandes quantidades de informações em várias tabelas. Se eu conseguir encontrar um driver OLEDB instalado no computador e visível por meio das configurações do aplicativo, o SQLite poderá ser facilmente testado sem travamentos. Da mesma forma, você pode se conectar ao SQLite pelo mesmo Access e tentar ler e modificar tabelas em paralelo. Algo para medir, é claro, não será possível.

Dei uma olhada na Internet. De imediato, não foi possível encontrar esse provedor OLEDB. Todos os outros OLEDB DLLs, que só podem ser usados a partir de linguagens de programação, pelo que entendi.

 

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

Quando executo 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);