Cómo acceder a la base de datos desde MQL4 , ORACL , MSSQL, MySQL - página 8

 
sergeev >>:

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

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

//El ejemplo de Vilkas

#include <ADOLib.mqh>

int createCnn=0;
int openCnn=0;
int Inserción=0;


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



int init()
{



CloseConnection();
DestroyConnection();

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

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


return(0);
}



//Ejemplo de trabajo:

int inicio()
{
//esto es sólo en caso de que una conexión se cierre o "se estropee" - hay suficientes razones
if (createCnn<=0 || IsOpenConnection()==0)
{
createCnn=0;
openCnn=0;

CloseConnection();
Dormir(10);

DestroyConnection();
Dormir(10);

createCnn=CrearConexión();
Dormir(30);
}

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

CloseConnection();
Dormir(10);

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



//y luego escribir los ticks en la base de datos

string Empresa=CuentaEmpresa();
string Symb=Símbolo();

//el código de inserción funciona
/*
string CommandText="INSERT INTO Rates (TimeCurrent,AccountCompany,Symb,DateTimeRate,Ask,Bid) "+
"VALUES("+TimeCurrent()+",'"+Company+"','"+Symb+"','"+DateTimeRate+"',"+Ask+","+Bid+")";
Execute(CommandText,adAsyncFetch);
Dormir(15);
*/
//Quiero recibir datos de la base de datos

string CommandText="select ask from test where ask='1.4560'";
string text=Ejecutar(CommandText,adAsyncFetch);
Comentario(texto);

Dormir(15);

//devuelve 1;
}



//+------------------------------------------------------------------+
//| función de desinicialización experta |
//+------------------------------------------------------------------+
int deinit()
{
CloseConnection();
DestroyConnection();

return(0);
}

 
sergeev >>:

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

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


//Muestra Graff.

//+------------------------------------------------------------------+
//|| news001.mq4 ||
//| Copyright © 2009, Graff |
//| |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2009, Graff"
#enlace de la propiedad ""

#propiedad ventana_del_gráfica_del_indicador

#define DELIM ";"
//#include <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 result);
int mysql_num_rows(int resultado);
void mysql_free_result(int result);

//#importar

int mysql;

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

//+------------------------------------------------------------------+
//| Función de inicialización de indicadores personalizada |
//+------------------------------------------------------------------+
int init()
{
//---- indicadores
fila de cuerdas;
conectar();
string query="Select ask from calendar WHERE ask = '1.4567'";
int length=StringLen(query);
mysql_real_query(mysql,query,length);
int resultado = mysql_store_result(mysql);
int numOfRows = mysql_num_rows(resultado);
for (int i=0;i<numOfRows;i++) {
row = mysql_fetch_row(result);
Print(row);

Comentario(s);

//devuelve un valor normal pero al principio de la carga

 

En mi opinión, tienes que escribir tu propia dll. En MQL4 faltan demasiadas construcciones del lenguaje - MQL5 promete más.

 

El IMHO no es útil aquí.

¿Y la documentación? ¿Qué devuelve Ejecutar?

Creo que devuelve un valor booleano. Su texto dice 1. Significa que se ha ejecutado correctamente.

Hay que buscar en las grabaciones.

 

Aquí hay una demostración de cómo trabajar a través de ADO - podría ser útil - rápido y fácil de hacer

 
Tengo una excelente conexión entre MT4 y MYSQL. No se utiliza ninguna otra librería excepto libmySQL.dll.
 
Por favor, dígame, ¿quién sabe, es posible integrar MetaTrader 5 con Oracle DBS?
 
Twilight >>:


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

ADOLib.mqh tiene el siguiente aspecto:


// Constantes para el enum CursorTypeEnum

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

// Constantes para el enum LockTypeEnum

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

// Constantes para el 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 para el enum CursorLocationEnum

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

// Constantes para el 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;

#importar "ADOLib.dll".
int CrearConexión();
int DestruirConexión();
int OpenConnection(string ConnectionString,int CursorLocation,int CommandTimeout);
int CerrarConexión();
int IsOpenConnection();
int Ejecutar(cadena TextoComando,int OpciónEjecución);
int InicioTrans();
int CommitTrans();
int RollbackTrans();
int OpenTable(string Qry,int CursorLocation,int CursorType,int LockType,int Options);
int CerrarTabla();
int Requery();
int Actualizar();
int ActualizarLote();
int Cancelar();
int CancelarLote();
int CancelarActualización();
int Find(string Criteria,int SearchDirection,int Start);
int Filtro(cadena Criterios);
int BOF();
int EOF();
int MoverPrimero();
int MoverÚltimo();
int MoverSiguiente();
string TableStatus();
int CuentaCampos();
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);


en ADOLib.mqh

hay métodos:

GetFieldValue

GetFieldValueByPos


después de abrir con éxito la tabla "SELECT * FROM NameTable"

ajustado al registro correcto con

int is_succ=MoverFirst();

y si tiene éxito, lee:

string FieldVal=";

if(is_succ=1)

FieldVal=GetFieldValue("NameField");

o leído por el manejador numérico del campo:

int hbdFld=0;

if(is_succ=1)

FieldVal=GetFieldValueByPos(hndFld);

 

el método MoveFirst() que establece la PRIMERA entrada,

las que quieres son anuladas por MoveNext(),

y los que no quieres son buscados y/o filtrados.

ver. Find(),Filter() o WHERE en SELECT....

 

y también los métodos de lectura de datos GetFieldValueXXXX convierten los valores de los campos en

detipo cadena, por lo que si es necesario el

al tipo requerido