MQL4, ORACL, MSSQL, MySQL에서 데이터베이스에 액세스하는 방법 - 페이지 8

 
sergeev >> :

그리고 이 문제에 대한 운영 시간은 정확히 무엇입니까? MS SQL?

코드를 제공하고 그것이 당신을 위해 작동하지 않는 곳을 보여줍니다. 우리가 알아낼 것입니다.

//TheVilkas 예제

#include <ADOLib.mqh>

int createCnn=0;
int openCnn=0;
int삽입=0;


문자열 StringConnection="DSN=dbForex;UID=sa;PWD=;";



정수 초기화()
{



닫기연결();
연결 끊기();

int createCnn=CreateConnection();
수면(10);

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


리턴(0);
}



//작업 예시:

정수 시작()
{
//연결이 닫혔거나 "망친" 경우입니다. 충분한 이유가 있습니다.
if (createCnn<=0 || IsOpenConnection()==0)
{
생성Cnn=0;
openCnn=0;

닫기연결();
수면(10);

연결 끊기();
수면(10);

createCnn=CreateConnection();
수면(30);
}

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

닫기연결();
수면(10);

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



// 그런 다음 데이터베이스에 틱을 씁니다.

stringCompany=계정회사();
문자열 Symb=Symbol();

// Embed 코드 작동
/*
string CommandText="INSERT INTO 요금(TimeCurrent,AccountCompany,Symb,DateTimeRate,Ask,Bid)"+
"VALUES("+TimeCurrent()+",'"+회사+"','"+Symb+"','"+DateTimeRate+"',"+Ask+","+Bid+")";
실행(CommandText,adAsyncFetch);
수면(15);
*/
//데이터베이스에서 데이터를 가져오고 싶습니다.

string CommandText="검사에서 묻기를 선택하십시오. 여기서 ask='1.4560'";
문자열 텍스트=실행(CommandText,adAsyncFetch);
주석(텍스트);

수면(15);

//1을 반환합니다.
}



//+----------------------------------------------- --------------------+
//| 전문가 초기화 해제 기능 |
//+----------------------------------------------- --------------------+
정수 초기화()
{
닫기연결();
연결 끊기();

리턴(0);
}

 
sergeev >> :

그리고 이 문제에 대한 운영 시간은 정확히 얼마입니까? MS SQL은 무엇입니까?

코드를 제공하고 그것이 당신을 위해 작동하지 않는 곳을 보여줍니다. 우리가 알아낼 것입니다.


//그래프 예제

//+----------------------------------------------- --------------------+
//| news001.mq4 |
//| Copyright © 2009, 그라프 |
//| |
//+----------------------------------------------- --------------------+
#property copyright "Copyright © 2009, Graff"
#속성 링크 ""

#속성 표시기_차트_창

#define DELIM ";"
//#포함 <mysql.mqh>

#가져오기 "libmysql.dll"
int mysql_init(intdb);
int mysql_errno(int TMYSQL);
int mysql_real_connect(int TMYSQL,문자열 호스트,문자열 사용자,문자열 암호,문자열 DB,int 포트,int 소켓,int clientflag);
int mysql_real_query(int TMSQL, 문자열 쿼리, int 길이);
무효 mysql_close(int TMSQL);

int mysql_store_result(int TMSQL);
문자열 mysql_fetch_row(int 결과);
int mysql_num_rows(int 결과);
무효 mysql_free_result(int 결과);

//#수입

정수 mysql;

int mTicket, mType;
문자열 mSymbol;
더블 mLots, mOpen, mClose, mStopLoss, mTakeProfit;

//+----------------------------------------------- --------------------+
//| 사용자 지정 표시기 초기화 기능 |
//+----------------------------------------------- --------------------+
정수 초기화()
{
//---- 표시기
문자열 행;
연결하다();
string query="캘린더에서 질문 선택 WHERE ask = '1.4567'";
int 길이=StringLen(쿼리);
mysql_real_query(mysql, 쿼리, 길이);
int 결과 = mysql_store_result(mysql);
int numOfRows = mysql_num_rows(결과);
(int i=0;i<numOfRows;i++) {
행 = mysql_fetch_row(결과);
인쇄(행);

주석(행);

//정상 값을 반환하지만 zakaruchka의 시작 부분에 있음

 

IMHO - 자신의 dll을 작성해야 합니다. MQL4에는 너무 많은 언어 구성이 누락되었습니다. MQL5는 더 많은 것을 약속합니다.

 

여기 IMHO는 도움이되지 않습니다.

그리고 문서는 어떻습니까? Execute는 무엇을 반환합니까?

부울 값을 반환한다고 생각합니다. 1이 당신의 텍스트에 쓰여져 있습니다. 그래서 그것은 올바르게 작성되었습니다.

기록에서 찾아야 한다.

 

여기에서 그는 ADO를 통해 작업하는 방법을 보여주었습니다. 유용할 수 있습니다. 빠르고 쉽게 나타납니다.

 
많은 MT4와 MYSQL이 저에게 잘 맞습니다. 이 경우 libmySQL.dll 이외의 다른 라이브러리는 사용하지 않습니다.
 
MetaTrader 5를 Oracle DBMS와 통합할 수 있는지 누가 알겠습니까?
 
Twilight >> :


데이터베이스에서 읽는 방법?

ADOlib.mqh는 다음과 같습니다.


// 열거형 CursorTypeEnum에 대한 상수

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

// 열거형 LockTypeEnum에 대한 상수

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

// 열거형에 대한 상수 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;

// 열거형 CursorLocationEnum에 대한 상수

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

// 열거형 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;

#가져오기 "ADOLib.dll"
int CreateConnection();
intDestroyConnection();
int OpenConnection(문자열 ConnectionString,int CursorLocation,int CommandTimeout);
intCloseConnection();
정수 IsOpenConnection();
int 실행(문자열 명령 텍스트, int 실행 옵션);
intBeginTrans();
intCommitTrans();
int 롤백트랜스();
int OpenTable(문자열 Qry,int CursorLocation,int CursorType,int LockType,int 옵션);
intCloseTable();
정수 요청();
정수 업데이트();
정수 UpdateBatch();
정수 취소();
정수 취소 배치();
정수 취소 업데이트();
int 찾기(문자열 기준, int SearchDirection,int 시작);
정수 필터(문자열 기준);
intBOF();
intEOF();
intMoveFirst();
intMoveLast();
intMoveNext();
문자열 TableStatus();
intFieldsCount();
문자열 FieldName(int I);
문자열 FieldType(int 이름);
문자열 FieldTypeByPos(int I);
문자열 GetFieldValue(문자열 이름);
문자열 GetFieldValueByPos(int I);
정수 설정 필드 값(문자열 이름);

int SetFieldValueByPos(int I);


ADOlib.mqh에서

방법이 있습니다:

필드 값 가져오기

GetFieldValueByPos


테이블 "SELECT * FROM NameTable"을 성공적으로 연 후

사용하여 원하는 레코드로 설정

int is_succ=MoveFirst();

성공하면 다음을 읽습니다.

stringFieldVal="";

if(is_succ=1)

FieldVal=GetFieldValue("이름 필드");

또는 숫자 필드 핸들러에서 읽습니다.

정수 hbdFld=0;

if(is_succ=1)

FieldVal=GetFieldValueByPos(hndFld);

 

uh FIRST 항목으로 설정하는 MoveFirst() 메서드,

NEEDED는 enumeration-MoveNext(),

및 NECESSARY는 검색 및/또는 필터링됩니다.

SELECT의 Find(), Filter() 또는 WHERE를 참조하십시오....

 

및 더 많은 데이터 읽기 방법 GetFieldValueXXXX는 필드 값을 다음으로 가져옵니다.

type string , 필요한 경우 다음을 수행할 수 있습니다.

원하는 유형으로 캐스팅

사유: