Come accedere al database da MQL4 , ORACL, MSSQL, MySQL - pagina 8

 
sergeev >>:

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

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

//l'esempio di TheVilkas

#include <ADOLib.mqh>

int createCnn=0;
int openCnn=0;
int Insert=0;


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



int init()
{



CloseConnection();
DestroyConnection();

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

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


ritorno(0);
}



//esempio di lavoro:

int start()
{
//questo è solo nel caso in cui una connessione sia chiusa o "andata male" - ci sono abbastanza ragioni
se (createCnn<=0 || IsOpenConnection()==0)
{
creareCnn=0;
openCnn=0;

CloseConnection();
Dormire(10);

DestroyConnection();
Dormire(10);

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

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

CloseConnection();
Dormire(10);

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



//e poi scrivere i tick nel database

stringa Company=AccountCompany();
stringa Symb=Symbol();

//il codice di inserimento funziona
/*
string CommandText="INSERT INTO Rates (TimeCurrent,AccountCompany,Symb,DateTimeRate,Ask,Bid) "+
"VALUES("+TimeCurrent()+",'"+Company+"','"+Symb+"','"+DateTimeRate+"',"+Ask+","+Bid+")";
Execute(CommandText,adAsyncFetch);
Dormire(15);
*/
//voglio ricevere dati dal database

string CommandText="select ask from test where ask='1.4560'";
string text=Execute(CommandText,adAsyncFetch);
Commento(testo);

Dormire(15);

//ritorni 1;
}



//+------------------------------------------------------------------+
//| funzione di deinizializzazione esperto |
//+------------------------------------------------------------------+
int deinit()
{
CloseConnection();
DestroyConnection();

ritorno(0);
}

 
sergeev >>:

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

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


//Campione Graff.

//+------------------------------------------------------------------+
//| notizie001.mq4 |
//| Copyright © 2009, Graff |
//| |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2009, Graff"
#proprietà link ""

#proprietà indicator_chart_window

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

#importare "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,stringa query,int length);
void mysql_close(int TMSQL);

int mysql_store_result(int TMSQL);
stringa mysql_fetch_row(int result);
int mysql_num_rows(int risultato);
void mysql_free_result(int result);

//#importare

int mysql;

int mTicket, mType;
stringa mSymbol;
doppio mLots, mOpen, mClose, mStopLoss, mTakeProfit;

//+------------------------------------------------------------------+
//| funzione di inizializzazione dell'indicatore personalizzata
//+------------------------------------------------------------------+
int init()
{
//---- indicatori
fila di stringhe;
connect();
string query="Select ask from calendar WHERE ask = '1.4567'";
int length=StringLen(query);
mysql_real_query(mysql,query,lunghezza);
int risultato = mysql_store_result(mysql);
int numOfRows = mysql_num_rows(risultato);
for (int i=0;i<numOfRows;i++) {
row = mysql_fetch_row(result);
Stampa(riga);

Commento(i);

//restituisce un valore normale ma all'inizio del carico

 

IMHO - hai bisogno di scrivere la tua dll. Troppi costrutti del linguaggio mancano in MQL4 - MQL5 promette di più.

 

IMHO non è utile in questo caso.

Che dire della documentazione. Cosa restituisce Execute?

Credo che restituisca un valore booleano, il tuo testo dice 1. Significa che è stato eseguito correttamente.

Bisogna cercare tra le registrazioni.

 

Ecco una dimostrazione di come lavorare attraverso ADO - potrebbe essere utile - facile e veloce da fare

 
Ho un'ottima connessione tra MT4 e MYSQL. Non vengono usate altre librerie tranne libmySQL.dll.
 
Per favore ditemi, chi lo sa, è possibile integrare MetaTrader 5 con Oracle DBS?
 
Twilight >>:


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

ADOLib.mqh si presenta così:


// Costanti per enum CursorTypeEnum

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

// Costanti per enum LockTypeEnum

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

// Costanti per enum ExecuteOptionEnum

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

// Costanti per enum CursorLocationEnum

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

// Costanti per enum CommandTypeEnum

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

#importare "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 CursorLocation,int CursorType,int LockType,int Options);
int CloseTable();
int Requery();
int Update();
int UpdateBatch();
int Annulla();
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();
stringa TableStatus();
int FieldsCount();
stringa FieldName(int I);
stringa FieldType(int Name);
stringa FieldTypeByPos(int I);
stringa GetFieldValue(stringa Name);
stringa GetFieldValueByPos(int I);
int SetFieldValue(string Name);

intFieldValueByPos(int I);


in ADOLib.mqh

ci sono dei metodi:

GetFieldValue

GetFieldValueByPos


dopo aver aperto con successo la tabella "SELECT * FROM NameTable"

impostato sul disco giusto con

int is_succ=MoveFirst();

e, in caso di successo, leggere:

stringa FieldVal=";

se(is_succ=1)

FieldVal=GetFieldValue("NameField");

o letto dal gestore numerico del campo:

int hbdFld=0;

se(is_succ=1)

FieldVal=GetFieldValueByPos(hndFld);

 

il metodo MoveFirst() che imposta alla PRIMA voce,

quelli che volete sono sovrascritti da MoveNext(),

e quelli che non vuoi vengono cercati e/o filtrati.

vedere. Find(),Filter() o WHERE in SELECT....

 

e anche i metodi di lettura dei dati GetFieldValueXXXX convertono i valori dei campi in

quindi, se necessario, l'opzione

al tipo richiesto