Comment accéder à la base de données depuis MQL4 , ORACL , MSSQL, MySQL - page 8

 
sergeev >>:

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

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

//TheVilkas exemple

#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() ;
Sleep(10) ;

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


retour(0) ;
}



//exemple de travail :

int start()
{
//c'est juste au cas où une connexion serait fermée ou "ratée" - il y a suffisamment de raisons pour cela.
si (createCnn<=0 || IsOpenConnection()==0)
{
createCnn=0 ;
openCnn=0 ;

CloseConnection() ;
Sleep(10) ;

DestroyConnection() ;
Sleep(10) ;

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

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

CloseConnection() ;
Sleep(10) ;

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



//et ensuite écrire les ticks dans la base de données

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

//le code d'insertion fonctionne
/*
string CommandText="INSERT INTO Rates (TimeCurrent,AccountCompany,Symb,DateTimeRate,Ask,Bid) "+
"VALUES("+TimeCurrent()+",'"+Company+"','"+Symb+"','"+DateTimeRate+"',"+Ask+","+Bid+")";
Exécuter(CommandText,adAsyncFetch) ;
Sommeil(15) ;
*/
//Je veux recevoir des données de la base de données

string CommandText="select ask from test where ask='1.4560'" ;
string text=Exécuter(CommandText,adAsyncFetch) ;
Commentaire(texte) ;

Sommeil(15) ;

//renvoie 1 ;
}



//+------------------------------------------------------------------+
//| fonction de désinitialisation des experts |
//+------------------------------------------------------------------+
int deinit()
{
CloseConnection() ;
DestroyConnection() ;

retour(0) ;
}

 
sergeev >>:

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

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


//Sample Graff.

//+------------------------------------------------------------------+
//| news001.mq4 |
//| Copyright © 2009, Graff |
//| |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2009, Graff"
#propriété lien ""

#property indicator_chart_window

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

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

int mysql_store_result(int TMSQL) ;
chaîne mysql_fetch_row(int result) ;
int mysql_num_rows(int result) ;
void mysql_free_result(int result) ;

//#import

int mysql ;

int mTicket, mType ;
string mSymbol ;
double mLots, mOpen, mClose, mStopLoss, mTakeProfit ;

//+------------------------------------------------------------------+
//| Fonction d'initialisation de l'indicateur personnalisé |
//+------------------------------------------------------------------+
int init()
{
//---- indicateurs
rangée de chaînes ;
connect() ;
string query="Select ask from calendar WHERE ask = '1.4567'" ;
int length=StringLen(query) ;
mysql_real_query(mysql,query,length) ;
int result = mysql_store_result(mysql) ;
int numOfRows = mysql_num_rows(result) ;
for (int i=0;i<numOfRows;i++) {
row = mysql_fetch_row(result) ;
Imprimer(ligne) ;

Commentaire(s) ;

//renvoie une valeur normale mais au début du chargement

 

IMHO - vous devez écrire votre propre dll. Trop de constructions linguistiques manquent dans MQL4 - MQL5 en promet davantage.

 

IMHO n'est pas utile ici.

Qu'en est-il de la documentation ? Que retourne Execute ?

Je pense qu'il retourne une valeur booléenne. Votre texte dit 1. Cela signifie qu'il a été exécuté correctement.

Vous devez chercher dans les enregistrements.

 

Voici une démonstration de la façon de travailler avec ADO - cela pourrait s'avérer utile - c'est rapide et facile à faire.

 
J'ai une excellente connexion entre MT4 et MYSQL. Aucune autre bibliothèque n'est utilisée, à l'exception de libmySQL.dll.
 
Dites-moi, s'il vous plaît, qui sait, s'il est possible d'intégrer MetaTrader 5 avec Oracle DBS ?
 
Twilight >>:


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

ADOLib.mqh ressemble à ceci :


// Constantes pour l'enum CursorTypeEnum

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

// Constantes pour enum LockTypeEnum

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

// Constantes pour l'enum ExecuteOptionEnum

#define adOptionUnspecified 4294967295 //$FFFFFFFFFF ;
#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 pour enum CursorLocationEnum

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

// Constantes pour enum CommandTypeEnum

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

#import "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 Annuler() ;
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() ;
string TableStatus() ;
int FieldsCount() ;
string FieldName(int I) ;
string FieldType(int Name) ;
string FieldTypeByPos(int I) ;
string GetFieldValue(string Name) ;
string GetFieldValueByPos(int I) ;
int SetFieldValue(string Name) ;

intFieldValueByPos(int I) ;


dans ADOLib.mqh

il existe des méthodes :

GetFieldValue

GetFieldValueByPos


après avoir ouvert avec succès la table "SELECT * FROM NameTable".

sur le bon enregistrement avec

int is_succ=MoveFirst() ;

et en cas de succès, lire :

string FieldVal=" ;

si(is_succ=1)

FieldVal=GetFieldValue("NameField") ;

ou lu par le gestionnaire numérique du champ :

int hbdFld=0 ;

si(is_succ=1)

FieldVal=GetFieldValueByPos(hndFld) ;

 

la méthode MoveFirst() qui place la PREMIÈRE entrée,

celles que vous voulez sont soit surchargées par MoveNext(),

et ceux que vous ne voulez pas sont recherchés et/ou filtrés.

voir. Find(), Filter() ou WHERE dans SELECT....

 

ainsi que les méthodes de lecture de données GetFieldValueXXXX convertissent les valeurs des champs en

de type chaîne de caractères, de sorte que, si nécessaire, le

au type requis

Raison: