如何从MQL4、ORACL、MSSQL、MySQL访问数据库。 - 页 8

 
sergeev >>:

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

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

//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()。
睡眠(10)。

int openCnn=OpenConnection(StringConnection,adUseClient,0)。
睡眠(10)。


return(0);
}



//工作实例。

int start()
{
//这只是为了防止连接被关闭或 "变坏"--有足够的理由。
如果(createCnn<=0 || IsOpenConnection()==0)
{
createCnn=0。
openCnn=0。

CloseConnection()。
睡眠(10)。

DestroyConnection()。
睡眠(10)。

createCnn=CreateConnection()。
睡眠(30)。
}

如果(createCnn>0 &&(openCnn<=0 || IsOpenConnection()==0 || Insert==0))
{
openCnn=0。

CloseConnection()。
睡眠(10)。

openCnn=OpenConnection(StringConnection,adUseClient,0)。
睡眠(30)。
}



//然后将刻度线写进数据库

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

//插入的代码有效
/*
string CommandText="INSERT INTO Rates (TimeCurrent,AccountCompany,Symb,DateTimeRate,Ask,Bid)" +
"VALUES("+TimeCurrent()+",'"+Company+"','"+Symb+"','"+DateTimeRate+"',"+Ask+","+Bid+")";
Execute(CommandText,adAsyncFetch)。
睡眠(15)。
*/
//我想从数据库中接收数据

string CommandText="select ask from test where ask='1.4560'"。
string text=Execute(CommandText,adAsyncFetch)。
评论(文本)。

睡眠(15)。

//返回1。
}



//+------------------------------------------------------------------+
//|专家去初始化功能|
//+------------------------------------------------------------------+
int deinit()
{
CloseConnection()。
DestroyConnection()。

return(0);
}

 
sergeev >>:

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

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


//样品格拉夫。

//+------------------------------------------------------------------+
//| news001.mq4 |
//| Copyright © 2009, Graff |
//| |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2009, Graff"
#属性链接""

#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)。
string mysql_fetch_row(int result);
int mysql_num_rows(int result)。
空白mysql_free_result(int result)。

//#import

int mysql;

int mTicket, mType;
字符串mSymbol。
double mLots, mOpen, mClose, mStopLoss, mTakeProfit。

//+------------------------------------------------------------------+
//|自定义指标初始化函数
//+------------------------------------------------------------------+
int init()
{
//---- 指标
字符串行。
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);
Print(row);

评论(行)。

//返回一个正常的值,但在负载的开始阶段

 

IMHO - 你需要编写你自己的dll。在MQL4中缺少太多的语言结构--MQL5承诺了更多。

 

IMHO在这里是没有帮助的。

文件呢。Execute返回什么?

我认为它返回的是一个布尔值。 你的文字说是1。这意味着它被正确执行。

你必须在录音中搜索。

 

这里有 一个如何通过ADO工作的演示--可能会派上用场--快速而简单地完成。

 
我在MT4和MYSQL之间有一个很好的连接。除了libmySQL.dll,没有使用其他库。
 
请告诉我,谁知道,是否有可能将MetaTrader 5与Oracle DBS整合?
 
Twilight >>:


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

ADOLib.mqh看起来像这样。


// CursorTypeEnum枚举的常量

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

// LockTypeEnum 枚举的常量

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

// 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。

// 枚举CursorLocationEnum的常量

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

// 枚举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 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()。
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)。


在ADOLib.mqh中

是有方法的。

获取字段值

按位置获取字段价值


在成功打开表 "SELECT * FROM NameTable "之后

设置为正确的记录,与

int is_succ=MoveFirst()。

如果成功,就读。

string FieldVal=";

如果(is_succ=1)

FieldVal=GetFieldValue("NameField")。

或由字段的数字处理程序读取。

int hbdFld=0。

如果(is_succ=1)

FieldVal=GetFieldValueByPos(hndFld)。

 

MoveFirst()方法,设置为第一条。

你想要的那些要么被MoveNext()重写。

而你不想要的则被搜索和/或过滤掉了。

见。SELECT.... 中的Find(),Filter()或WHERE。

 

以及GetFieldValueXXXX数据读取方法将字段值转换为

字符串类型,所以如果有必要

到所需的类型

原因: