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()
{
//これは、接続が閉じられたり、「悪くなった」場合に備えてのことです。
if (createCnn<=0 || IsOpenConnection()==0)
{
createCnn=0とする。
openCnn=0です。

CloseConnection()。
スリープ(10)。

DestroyConnection()。
スリープ(10)。

createCnn=CreateConnection()。
スリープ(30)。
}

if (createCnn>0 &&(openCnn<=0 || IsOpenConnection()==0 || Insert==0))
{
openCnn=0です。

CloseConnection()。
スリープ(10)。

openCnn=OpenConnection(StringConnection,adUseClient,0)とする。
スリープ(30)。
}



//そして、データベースに刻みを書き込む

string Company=AccountCompany()。
文字列 Symb=Symbol()。

//挿入コードが動作する
/*
string Command Text="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?

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


//Sample Graff.

//+------------------------------------------------------------------+
//| news001.mq4
//| 著作権 © 2009, グラフ
//| |
//+------------------------------------------------------------------+
#property copyright "著作権 © 2009, グラフ"
#プロパティリンク ""

#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);
文字列 mysql_fetch_row(int result);
int mysql_num_rows(int result);
void 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 以外のライブラリは使用していません。
 
知っている人教えてください、メタトレーダー5をオラクルDBSと統合することは可能ですか?
 
Twilight >>:


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

ADOLib.mqhはこのようになります。


// enum CursorTypeEnum の定数

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

// enum LockTypeEnum の定数

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

// enum ExecuteOptionEnum の定数

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

// enum CursorLocationEnum の定数

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

// enum CommandTypeEnum の定数

#define adCmdUnspecified 4294967295 //$FFFFFFFF;
#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).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()。
文字列 TableStatus()。
int FieldsCount()。
文字列 FieldName(int I);
string FieldType(int Name)。
文字列 FieldTypeByPos(int I)。
string GetFieldValue(string Name)。
文字列 GetFieldValueByPos(int I)。
int SetFieldValue(string Name)。

intFieldValueByPos(int I)。


ADOLib.mqhの中で

方法があります。

GetFieldValue

GetFieldValueByPos


テーブル "SELECT * FROM NameTable "のオープンに成功した後

をセットして、正しいレコードにする。

int is_succ=MoveFirst()。

を読み、成功したら読みます。

string FieldVal=";

if(is_succ=1)

FieldVal=GetFieldValue("NameField")。

またはそのフィールドの数値ハンドラによって読み取られる。

int hbdFld=0;

if(is_succ=1)

FieldVal=GetFieldValueByPos(hndFld)。

 

最初のエントリに設定する MoveFirst() メソッド。

は、MoveNext()によって上書きされます。

で、不要なものは検索やフィルタリングされます。

をご覧ください。SELECTのFind()、Filter()、WHERE...。

 

また、GetFieldValueXXXX データ読み込みメソッドは、フィールド値を

文字列型 なので、必要であれば

を必要な型に変換する