Entretanto, neste exemplo, a identificação do registro da tabela é devolvida, mas não será um problema refazer, eu me lembro e o texto e os números retornados do banco de dados, tudo funcionou.
//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+#import "libmysql.dll"int mysql_init(int db);
int mysql_errno(int TMYSQL);
int mysql_real_connect(int TMYSQL, string host, string user, string password, string DB,int port,int socket,int clientflag);
int mysql_real_query(int TMSQL, string query, int length);
int mysql_store_result(int TMSQL);
string mysql_fetch_row(int result);
int mysql_num_rows(int result);
void mysql_free_result(int result);
void mysql_close(int TMSQL);
int mysql_insert_id(int result);
#import//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+int mysql; string query = ""; int myerr;
int CompanyID = 0;
int SymbolID = 0;
int LastRecordQuotesID = 0;
//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+bool connect() {
mysql = mysql_init(mysql);
if (mysql!=0) Print("allocated");
string host="IP adress"; // меняем на своёstring user="Login"; // меняем на своёstring password="Password"; // меняем на своёstring DB="db_base"; // меняем на своёint clientflag=0;
int port=3306;
string socket="";
int res=mysql_real_connect(mysql,host,user,password,DB,port,socket,clientflag);
int err=GetLastError();
if (res==mysql){
Print("connected");
return(true);
} else {
Print("error=",mysql," ",mysql_errno(mysql)," ");
return(false);
}
return(false);
}
//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+int start(){
if(!connect()) return(0);
//----
CompanyID = CompanyID(AccountCompany(), AccountServer());
//----
mysql_close(mysql);
return(0);
}
//+--------------------------------------------------------------------------------------------+//| Функция поиска и вставки названия компании и сервера для связи. |//+--------------------------------------------------------------------------------------------+//| Переменные: |//| string AccCompany - AccountCompany() |//| string AccServer - AccountServer() |//+--------------------------------------------------------------------------------------------+int CompanyID(string AccCompany = "", string AccServer = ""){
int count_records, result;
string row = "";
query = StringConcatenate("SELECT id FROM Company WHERE Company = \'",AccCompany,"\' AND `Server` = \'",AccServer,"\'");
mysql_real_query(mysql,query,CountLength(query));
myerr = mysql_errno(mysql);
if(myerr > 0) Print("error=",myerr);
result = mysql_store_result(mysql);
count_records = Number_Of_Rows(result);
if (count_records > 0){
row = mysql_fetch_row(result);
mysql_free_result(result);
return( StrToInteger(StringSubstr(row, 8, StringLen(row)-1) ) );
} else {
query = StringConcatenate( "INSERT INTO `Company` (`Company`, `Server`) VALUES (\'",AccCompany ,"\', \'",AccServer,"\')");
mysql_real_query(mysql,query,CountLength(query));
myerr = mysql_errno(mysql);
if(myerr > 0) Print("CompanyID(): error=",myerr);
mysql_free_result(result);
return(mysql_insert_id(mysql));
}
}
//+--------------------------------------------------------------------------------------------+//| Вспомогательная Функция подсчёта колличества символов в передаваемом запросе. |//+--------------------------------------------------------------------------------------------+//| Переменные: |//| string query - Текстовая страка |//+--------------------------------------------------------------------------------------------+int CountLength(string query){
return(StringLen(query));
}
//+--------------------------------------------------------------------------------------------+//| Вспомогательная Функция подсчёта колличества результатов из базы данных |//+--------------------------------------------------------------------------------------------+//| Переменные: |//| int result - Результат запроса |//+--------------------------------------------------------------------------------------------+int Number_Of_Rows(int result){
return(mysql_num_rows(result));
}
1. Ao consultar "SELECT id FROM table", a função fetch_row retorna (endereço)(endereço) 1 (endereço)(endereço) 2 2. A consulta "SELECT user FROM table", a função fetch_row retorna (endereço) aaaa (endereço) bbb
Geralmente, isto pode ser tratado, a única pena é que ele retorna em string
Se eu consultar dois campos "SELECT id, user FROM table", a função retorna (endereço) 1 (endereço) (endereço) (endereço) 2 4. Se trocarmos os campos "SELECT user, id FROM table", a função retorna (endereço) aaaa (endereço) bbb
acontece que apenas o primeiro campo da string é claramente visível e outro endereço de 4 bytes é adicionado.
criou uma tabela com dois campos INT id; TEXT user
a mesa tem duas fileiras id usuário 1 aaa 2 bbb
1. Ao consultar a função "SELECT id FROM table" fetch_row returns (address)(address)(endereço) 1 (endereço)(endereço) 2 2. Ao solicitar a função "SELECT user FROM table" fetch_row returns (endereço) aaaa (endereço) bbb
Geralmente pode ser manipulado, mas o retorno está em cadeia
3. se a função retornar dois campos "SELECT id, user FROM table", ela retorna (endereço) 1 (endereço) 2 4. Se trocarmos os campos "SELECT user, id FROM table", a função retorna (endereço) aaaa (endereço) bbb
Acontece que apenas o primeiro campo da corda é explicitamente visto e outro endereço de 4 bytes é adicionado.
Como você consegue incluir isto no programa depois?
Vou escrever principalmente números de ponto flutuante e lê-los.
Atualmente estou desenvolvendo um script para trabalhar com um banco de dados MySQL para ler, inserir, excluir e modificar.
O roteiro é grande, mas a essência do trabalho com o banco de dados será compreensível, penso eu, a partir de uma função.
É verdade, este exemplo retorna o ID do registro da tabela, mas para não ter problemas, eu me lembro e o texto e números retornados do banco de dados, tudo funcionou.
Este é um exemplo interessante, mas não mostra como ler dados numéricos.
Basicamente, quero usar uma base com uma tabela de três colunas para apenas duas ações:
1) Leia as duas primeiras colunas (índice e a primeira coluna numérica)
Então escolha o número mais relevante da coluna numérica dentro do programa MQ4
2) Leia do índice desse número o número da segunda coluna.
Quais funções devo utilizar para isso? E eles trabalham normalmente na DLL especificada?
Se você pode ajudar a escrever ansiosamente o conversor unicode para MKL5, cujo código é dado no post anterior. Eu lhe enviarei o código de trabalho para MKL4, ele também o ajudará ao escrever a aula para MKL5.
Em funções de importação, não declarar cordas, mas matrizes de tipo uchar
O problema é, infelizmente, que estas cordas são devolvidas como resultado de uma função, não como um de seus parâmetros.
mysql_fetch_row retorna um ponteiro para uma série de cordas - char***
--------
alguém sabe se existem funções de baixo nível de kernel que possam retornar um char*** de uma matriz de char? (como strcpy, strcat...)
e, da mesma forma, a partir de uma matriz int* - alguma função da libra para obter seu elemento específico ? mesmo que a função em si não tenha sido projetada diretamente para esta operação :)
como ler o resultado da função mysql_fetch_row na MQL4 ?
Atualmente estou desenvolvendo um script para trabalhar com um banco de dados MySQL para ler, inserir, excluir e modificar.
O roteiro é grande, mas a essência do trabalho com o banco de dados será compreensível, penso eu, a partir de uma função.
Entretanto, neste exemplo, a identificação do registro da tabela é devolvida, mas não será um problema refazer, eu me lembro e o texto e os números retornados do banco de dados, tudo funcionou.
fez uma pequena experiência de investigação
Criei uma tabela com dois campos
INT id; TEXT user
há duas linhas na tabela
id user
1 aaa
2 bbb
1. Ao consultar "SELECT id FROM table", a função fetch_row retorna (endereço)(endereço) 1 (endereço)(endereço) 2
2. A consulta "SELECT user FROM table", a função fetch_row retorna (endereço) aaaa (endereço) bbb
Geralmente, isto pode ser tratado, a única pena é que ele retorna em string
Se eu consultar dois campos "SELECT id, user FROM table", a função retorna (endereço) 1 (endereço) (endereço) (endereço) 2
4. Se trocarmos os campos "SELECT user, id FROM table", a função retorna (endereço) aaaa (endereço) bbb
acontece que apenas o primeiro campo da string é claramente visível e outro endereço de 4 bytes é adicionado.
fez uma pequena experiência de investigação
criou uma tabela com dois campos
INT id; TEXT user
a mesa tem duas fileiras
id usuário
1 aaa
2 bbb
1. Ao consultar a função "SELECT id FROM table" fetch_row returns (address)(address)(endereço) 1 (endereço)(endereço) 2
2. Ao solicitar a função "SELECT user FROM table" fetch_row returns (endereço) aaaa (endereço) bbb
Geralmente pode ser manipulado, mas o retorno está em cadeia
3. se a função retornar dois campos "SELECT id, user FROM table", ela retorna (endereço) 1 (endereço) 2
4. Se trocarmos os campos "SELECT user, id FROM table", a função retorna (endereço) aaaa (endereço) bbb
Acontece que apenas o primeiro campo da corda é explicitamente visto e outro endereço de 4 bytes é adicionado.
Como você consegue incluir isto no programa depois?
Vou escrever principalmente números de ponto flutuante e lê-los.
Atualmente estou desenvolvendo um script para trabalhar com um banco de dados MySQL para ler, inserir, excluir e modificar.
O roteiro é grande, mas a essência do trabalho com o banco de dados será compreensível, penso eu, a partir de uma função.
É verdade, este exemplo retorna o ID do registro da tabela, mas para não ter problemas, eu me lembro e o texto e números retornados do banco de dados, tudo funcionou.
Este é um exemplo interessante, mas não mostra como ler dados numéricos.
Basicamente, quero usar uma base com uma tabela de três colunas para apenas duas ações:
1) Leia as duas primeiras colunas (índice e a primeira coluna numérica)
Então escolha o número mais relevante da coluna numérica dentro do programa MQ4
2) Leia do índice desse número o número da segunda coluna.
Quais funções devo utilizar para isso? E eles trabalham normalmente na DLL especificada?
Este é um exemplo interessante, mas não mostra como ler dados numéricos.
Você já escreveu uma linha de código para ver o que é devolvido e como?
HIDDEN já deu uma solução completa para ler um campo do banco de dados. você o executou?
Se você pode ajudar a escrever ansiosamente o conversor unicode para MKL5, cujo código é dado no post anterior. Eu lhe enviarei o código de trabalho para MKL4, ele também o ajudará ao escrever a aula para MKL5.
A MQL5 tem funções para converter unicode. Ver /en/docs/convert/chararraytostring e /en/docs/convert/stringtochararray
Declare uchar arrays em vez de strings em função de importação.
Em funções de importação, não declarar cordas, mas matrizes de tipo uchar
O problema é, infelizmente, que estas cordas são devolvidas como resultado de uma função, não como um de seus parâmetros.
mysql_fetch_row retorna um ponteiro para uma série de cordas - char***
--------
alguém sabe se existem funções de baixo nível de kernel que possam retornar um char*** de uma matriz de char?
(como strcpy, strcat...)
e, da mesma forma, a partir de uma matriz int* - alguma função da libra para obter seu elemento específico ?
mesmo que a função em si não tenha sido projetada diretamente para esta operação :)
Implementação de código completo....
Descarte SQL do banco de dados
Resultado do trabalho