Como acessar o banco de dados da MQL4 , ORACL , MSSQL, MySQL - página 8

 
sergeev >>:

А что вы конкретно имеете в наработке по данному вопросу MS SQL?

приведите код и покажите где у вас не работает. будем разбираться.

// O exemplo Vilkas

#incluir <ADOLib.mqh>

int createCnn=0;
int openCnn=0;
int Inserção=0;


string StringConnection="DSN=dbForex;UID=sa;PWD=;";



int init()
{



FecharConexão();
DestroyConnection();

int createCnn=CreateConnection();
Dormir(10);

int openCnn=OpenConnection(StringConnection,adUseClient,0);
Dormir(10);


retorno(0);
}



//exemplo de trabalho:

int start()
{
//isto é apenas para o caso de uma conexão ser fechada ou "ficar ruim" - há razões suficientes
se (createCnn<=0 || IsOpenConnection()==0)
{
createCnn=0;
openCnn=0;

FecharConexão();
Dormir(10);

DestroyConnection();
Dormir(10);

createCnn=CreateConnection();
Dormir(30);
}

if (createCnn>0 &&(openCnn<=0 || IsOpenConnection()==0 ||| Insert==0))
{
openCnn=0;

FecharConexão();
Dormir(10);

openCnn=OpenConnection(StringConnection,adUseClient,0);
Dormir(30);
}



// e depois escrever carrapatos no banco de dados

string Company=AccountCompany();
string Symb=Símbolo();

//eserção de código funciona
/*
string CommandText="INSERT INTO Rates (TimeCurrent,AccountCompany,Symb,DateTimeRate,Ask,Bid) "+
"VALUES("+TimeCurrent()+",'"+Company+"','"+Symb+"','"+DateTimeRate+"',"+Ask+","+Bid+")";
Execute(CommandText,adAsyncFetch);
Dormir(15);
*/
//I deseja receber dados do banco de dados

string CommandText="select ask from test where ask='1.4560'";
string text=Execute(CommandText,adAsyncFetch);
Comentário(texto);

Dormir(15);

//retornos 1;
}



//+------------------------------------------------------------------+
//| função de desinicialização especializada |
//+------------------------------------------------------------------+
int deinit()
{
FecharConexão();
DestroyConnection();

retorno(0);
}

 
sergeev >>:

А что вы конкретно имеете в наработке по данному вопросу MS SQL?

приведите код и покажите где у вас не работает. будем разбираться.


// Amostra Graff.

//+------------------------------------------------------------------+
//| news001.mq4 |
//| Copyright © 2009, Graff |
//| |
//+------------------------------------------------------------------+
#direitos autorais de propriedade "Copyright © 2009, Graff"
#link de propriedade ""

#janela_do_cartão_indicador de propriedade

#define DELIM ";"
//#incluir <mysql.mqh>

#importar "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);
void mysql_close(int TMSQL);

int mysql_store_result(int TMSQL);
string mysql_fetch_row(int resultado);
int mysql_num_rows(int resultado);
void mysql_free_result(int result);

//#importar

int mysql;

int mTicket, mType;
mSímbolo de corda;
duplo mLots, mOpen, mClose, mStopLoss, mTakeProfit;

//+------------------------------------------------------------------+
//| Função de inicialização do indicador personalizado |
//+------------------------------------------------------------------+
int init()
{
//---- indicadores
linha de cordas;
connect();
string query="Select ask from calendar WHERE ask = '1.4567'";
int length=StringLen(consulta);
mysql_real_query(mysql,query,length);
int resultado = mysql_store_result(mysql);
int numOfRows = mysql_num_rows(resultado);
para (int i=0;i<numOfRows;i++) {
linha = mysql_fetch_row(resultado);
Imprimir(fila);

Comentário(fila);

// devolve um valor normal, mas no início da carga

 

IMHO - você precisa escrever sua própria dll. Faltam muitas construções lingüísticas na MQL4 - a MQL5 promete mais.

 

IMHO não é útil aqui.

E quanto à documentação? O que o Execute retorna?

Acho que retorna um valor booleano. Seu texto diz 1. Isso significa que foi executado corretamente.

Você tem que pesquisar através das gravações.

 

Aqui está uma demonstração de como trabalhar através da ADO - pode vir a ser útil - rápida e fácil de fazer

 
Eu tenho uma excelente conexão entre o MT4 e o MYSQL. Nenhuma outra biblioteca, exceto libmySQL.dll, é utilizada.
 
Por favor me diga, quem sabe, é possível integrar o MetaTrader 5 com o Oracle DBS?
 
Twilight >>:


А как осуществить чтение из БД?

ADOLib.mqh tem este aspecto:


// Constantes para enum CursorTypeEnum

#define adOpenUnspecified 4294967295 //$FFFFFFFFFFFFFFFFFF;
#define adOpenForwardOnly 0 //$0000000000000000;
#define adOpenKeyset 1 //$00000001;
#define adOpenDynamic 2 //$00000002;
#define adOpenStatic 3 //$00000003;

// Constantes para enumerar LockTypeEnum

#define adLockUnspecified 4294967295 //$FFFFFFFFFFFFFFFF;
#define adLockRead 1 //$00000001
#define adLockPessimistic 2 //$00000002;
#define adLockOptimistic 3 //$00000003;
#define adLockBatchOptimistic 4 //$00000004;

// Constantes para enumeração ExecuteOptionEnum

#define adOptionUnspecified 4294967295 //$FFFFFFFFFFFFFFFFFF;
#define adAsyncExecute 16 //$00000010;
#define adAsyncFetch 32 //$00000020;
#define adAsyncFetchNonBlocking 64 //$00000040;
#define adExecuteNoRecords 128 //$00000080;
#define adExecuteStream 296 //$00000400;
#define adExecuteRecord 2048 //$00000800;

// Constantes para enum CursorLocationEnum

#define adUseNone 1 //$00000001;
#define adUseServer 2 //$00000002;
#define adUseClient 3 //$00000003;
#define adUseClientBatch 3 //$00000003;

// Constantes para enumerar o CommandTypeEnum

#define adCmdUnspecified 4294967295 //$FFFFFFFFFFFFFFFFFF;
#define adCmdUnknown 8 //$00000008;
#define adCmdText 1 //$00000001;
#define adCmdTable 2 //$00000002;
#define adCmdStoredProc 4 //$00000004;
#define adCmdFile 256 //$00000100;
#define adCmdTableDirect 512 //$00000200;

#importar "ADOLib.dll".
int CreateConnection();
int DestroyConnection();
int OpenConnection(string ConnectionString,int CursorLocation,int CommandTimeout);
int CloseConnection();
int IsOpenConnection();
int Execute(string CommandText,int ExecuteOption);
int BeginTrans();
int CommitTrans();
int RollbackTrans();
int OpenTable(string Qry,int CursorLocal,int CursorType,int LockType,int Opções);
int CloseTable();
int Requery();
int Update();
int UpdateBatch();
int Cancel();
int CancelBatch();
int CancelUpdate();
int Find(string Criteria,int SearchDirection,int Start);
int Filter(string Criteria);
int BOF();
int EOF();
int MoveFirst();
int MoveLast();
int MoveNext();
TabelaStatus();
int FieldsCount();
string FieldName(int I);
string FieldType(int Nome);
string FieldTypeByPos(int I);
string GetFieldValue(string Name);
string GetFieldValueByPos(int I);
int SetFieldValue(string Name);

intFieldValueByPos(int I);


em ADOLib.mqh

há métodos:

GetFieldValue

GetFieldValueByPos


após a abertura bem sucedida da tabela "SELECT * FROM NameTable".

bater o recorde certo com

int is_succ=MoveFirst();

e, se bem-sucedido, leia:

string FieldVal=";

if(is_succ=1)

FieldVal=GetFieldValue("NameField");

ou lido pelo manipulador numérico do campo:

int hbdFld=0;

if(is_succ=1)

FieldVal=GetFieldValueByPos(hndFld);

 

o método MoveFirst(), que se define como a PRIMEIRA entrada,

os que você deseja são anulados pela MoveNext(),

e aqueles que você não quer são pesquisados e/ou filtrados.

ver. Find(),Filter() ou WHERE in SELECT....

 

e também os métodos de leitura de dados GetFieldValueXXXX convertem os valores de campo para

tipo de fio, portanto, se necessário, o

para o tipo exigido