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

 

그리고 다음과 같이 시도하십시오.

 #import "MT4"
int SaveSQL ( int x , int y ) ;   
#import

void start ( )
{
   int rez = SaveSQL ( 10 , 2 ) ;
   Comment ( "Результат" + rez ) ;
}
 
mysql 데이터베이스 작업(정보 읽기 및 쓰기)을 위한 안정적인 솔루션을 알려주세요. mysql_wrapper가 터미널을 계속 충돌시킵니다.
 

BTRVODKAex

이러한 목적을 위해 중간 dll은 C++\cli에 작성됩니다. mql에서 직접 관리 코드를 호출할 수 없습니다.



 
Graff >> :
mysql 데이터베이스 작업(정보 읽기 및 쓰기)을 위한 안정적인 솔루션을 알려주세요. mysql_wrapper가 터미널을 계속 충돌시킵니다.

https://www.mql5.com/ru/code/8623

 
HIDDEN >> :

https://www.mql5.com/ru/code/8623

mysql_wrapper를 사용할 때 터미널이 충돌합니다. 아마도 이것을 고칠 방법이 있습니까? 와인 XP 및 와인 7 빌드 7100에서 테스트 - 동일한 문제.

통나무:

치명적인 오류가 발생했습니다
시간 : 2009.07.03 13:38
프로그램 : 클라이언트 터미널
버전 : 4.00 (빌드: 224, 2009년 5월 15일)
OS : Windows XP Professional 5.1 서비스 팩 3(빌드 2600)
프로세서: 2 x X86(레벨 6)
메모리 : 2086128/291388kb
예외: C0000005
주소 : 7C929267
액세스 유형 : 읽기
접속주소 : 00000004

레지스터: EAX=00000000 CS=001b EIP=7C929267 EFLGS=00010217
: EBX=00000000 SS=0023 ESP=0012DD60 EBP=0012DE1C
: ECX=022F8900 DS=0023 ESI=022F88F0 FS=003b
: EDX=022F8910 ES=0023 EDI=00340000 GS=0000

스택 추적: 77C1C2DE 0055ED21 00000000 00000000
: 00000000 00000000 00000000 00000000
: 00000000 00000000 00000000 00000000
: 00000000 00000000 00000000 00000000

모듈:
1 : 00400000 002B1000 d:\forex\metatrader - alpari\terminal.exe
2 : 00F70000 00042000 c:\program files\splitview 2009\splat.dll
3 : 018F0000 002CD000 c:\windows\system32\xpsp2res.dll
4 : 02050000 00035000 d:\forex\metatrader - alpari\experts\libraries\mysql_wrapper.dll
5 : 02090000 00244000 c:\windows\system32\libmysql.dll
6 : 02560000 00009000 c:\windows\system32\amhooker.dll
7 : 08000000 00008000 c:\program files\yandex\punto switcher\pshook.dll
8 : 10000000 00012000 c:\program files\rocketdock\rocketdock.dll
9:40080000 001E8000 c:\windows\system32\iertutil.dll
10:45020000 00131000 c:\windows\system32\urlmon.dll
11 : 5B260000 00038000 c:\windows\system32\uxtheme.dll
12 : 5BD50000 00056000 c:\windows\system32\netapi32.dll
13 : 61EC0000 0000E000 c:\windows\system32\mfc42loc.dll
14 : 698B0000 00058000 c:\windows\system32\hnetcfg.dll
15 : 71A30000 00040000 c:\windows\system32\mswsock.dll
16:71A70000 00008000 c:\windows\system32\wshtcpip.dll
17:71A80000 00008000 c:\windows\system32\ws2help.dll
18:71A90000 00017000 c:\windows\system32\ws2_32.dll
19 : 71AB0000 0000A000 c:\windows\system32\wsock32.dll
20 : 72CD0000 00008000 c:\windows\system32\msacm32.drv
21 : 72CE0000 00009000 c:\windows\system32\wdmaud.drv
22 : 73D90000 000FE000 c:\windows\system32\mfc42.dll
23 : 746E0000 0004C000 c:\windows\system32\msctf.dll
24:75310000 0002E000 c:\windows\system32\msctfime.ime
25 : 76350000 00005000 c:\windows\system32\msimg32.dll
26:76360000 0001D000 c:\windows\system32\imm32.dll
27:76380000 00049000 c:\windows\system32\comdlg32.dll
28 : 76B20000 0002E000 c:\windows\system32\winmm.dll
29 : 76BE0000 0000B000 c:\windows\system32\psapi.dll
30 : 76C20000 0002E000 c:\windows\system32\wintrust.dll
31 : 76C80000 00028000 c:\windows\system32\imagehlp.dll
32 : 76F10000 00027000 c:\windows\system32\dnsapi.dll
33 : 76F50000 0002D000 c:\windows\system32\wldap32.dll
34 : 76FA0000 00008000 c:\windows\system32\winrnr.dll
35 : 76FB0000 00006000 c:\windows\system32\rasadhlp.dll
36 : 76FC0000 0007F000 c:\windows\system32\clbcatq.dll
37 : 77040000 000C7000 c:\windows\system32\comres.dll
38:77110000 0008B000 c:\windows\system32\oleaut32.dll
39 : 773C0000 00103000 c:\windows\winsxs\x86_microsoft.windows.common-controls_6595b64144ccf1df_6.0.2600.5512_x-ww_35d4ce83\comctl32.dll
40 : 774D0000 0013E000 c:\windows\system32\ole32.dll
41 : 77910000 000F4000 c:\windows\system32\setupapi.dll
42 : 77A70000 00096000 c:\windows\system32\crypt32.dll
43 : 77B10000 00012000 c:\windows\system32\msasn1.dll
44 : 77B30000 00022000 c:\windows\system32\apphelp.dll
45 : 77BC0000 00007000 c:\windows\system32\midimap.dll
46 : 77BD0000 00015000 c:\windows\system32\msacm32.dll
47 : 77BF0000 00008000 c:\windows\system32\version.dll
48 : 77C00000 00058000 c:\windows\system32\msvcrt.dll
49 : 77DC0000 000AC000 c:\windows\system32\advapi32.dll
50 : 77E70000 00092000 c:\windows\system32\rpcrt4.dll
51 : 77F10000 00049000 c:\windows\system32\gdi32.dll
52 : 77F60000 00076000 c:\windows\system32\shlwapi.dll
53 : 77FE0000 00011000 c:\windows\system32\secur32.dll
54 : 7C800000 000F8000 c:\windows\system32\kernel32.dll
55 : 7C900000 000B3000 c:\windows\system32\ntdll.dll
56 : 7C9C0000 0081B000 c:\windows\system32\shell32.dll
57 : 7E360000 00091000 c:\windows\system32\user32.dll

호출 스택:


 

libmysql.dll 을 사용하는 데 어떤 문제가 있습니까?

데이터베이스에 완벽하게 씁니다. 읽으려고 시도하지는 않았지만 잼이 없다고 가정합니다.

 
kombat >> :

libmysql.dll을 사용하는 데 어떤 문제가 있습니까?

데이터베이스에 완벽하게 씁니다. 읽으려고 시도하지는 않았지만 잼이 없다고 가정합니다.

저에게는 데이터베이스에서 읽는 것이 더 중요합니다. 누군가 libmysql.dll을 통해 데이터베이스에서 읽을 수 있는 검증된 코드를 가지고 있다면 보내주십시오.

다음은 libmysql.dll을 통해 데이터베이스에서 읽는 코드입니다.

 //+------------------------------------------------------------------+
//|                                                      news001.mq4 |
//|                                          Copyright © 2009, Graff |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2009, Graff"
#property link      ""

#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 ) ; 
void mysql_free_result ( int result ) ; 

//#import 

int mysql ; 

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

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init ( )
  {
//---- indicators
   string row ; 
   connect ( ) ; 
   string query = "Select currency, title from calendar WHERE currency = 'USD'" ; 
   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 ) ; 
      //Print("Ticket=", mTicket, ",Symbol=", mSymbol);
     // decodeTrade(row); 
      //Comment("Ticket=", mTicket, ",Symbol=", mSymbol, ",Type=", mType, ",Lots=", mLots, ",Open=", mOpen, ",Close=", mClose, ",SL=", mStopLoss, ",TakeProfit=", mTakeProfit); 
   } 
   mysql_free_result ( result ) ;
//----
   return ( 0 ) ;
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit ( )
  {
//----
 mysql_close ( mysql ) ;
//----
   return ( 0 ) ;
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start ( )
  {
   int    counted_bars = IndicatorCounted ( ) ;
//----
   
//----
   return ( 0 ) ;
  }
//+------------------------------------------------------------------+

void connect ( ) { 

   mysql = mysql_init ( mysql ) ; 
   if ( mysql ! = 0 ) Print ( "allocated" ) ; 
   string host = "localhost" ; 
   string user = "*****" ; 
   string password = "****" ; 
   string DB = "forex" ; 
   int clientflag = 0 ; 
   int port = 3306 ; 
   string socket = "" ; 
   int res = mysql_real_connect ( mysql , host , user , password , DB , port , socket , clientflag ) ; 
   int err = GetLastError ( ) ; 
   if ( res = = mysql ) Print ( "connected" ) ; 
   else Print ( "error=" , mysql , " " , mysql_errno ( mysql ) , " " ) ; 

} 

void decodeTrade ( string trade ) { 
   int begin = StringFind ( trade , DELIM ) + 1 ; 
   int end = StringFind ( trade , DELIM , begin ) ; 
   mTicket = StrToInteger ( StringSubstr ( trade , begin , end - begin ) ) ; 
   begin = end + 1 ; 
   end = StringFind ( trade , DELIM , begin ) ; 
   mSymbol = StringSubstr ( trade , begin , end - begin ) ; 
   begin = end + 1 ; 
   end = StringFind ( trade , DELIM , begin ) ; 
   mType = StrToInteger ( StringSubstr ( trade , begin , end - begin ) ) ; 
   begin = end + 1 ; 
   end = StringFind ( trade , DELIM , begin ) ; 
   mLots = StrToDouble ( StringSubstr ( trade , begin , end - begin ) ) ; 
   begin = end + 1 ; 
   end = StringFind ( trade , DELIM , begin ) ; 
   mOpen = StrToDouble ( StringSubstr ( trade , begin , end - begin ) ) ; 
   begin = end + 1 ; 
   end = StringFind ( trade , DELIM , begin ) ; 
   mClose = StrToDouble ( StringSubstr ( trade , begin , end - begin ) ) ; 
   begin = end + 1 ; 
   end = StringFind ( trade , DELIM , begin ) ; 
   mStopLoss = StrToDouble ( StringSubstr ( trade , begin , end - begin ) ) ; 
   begin = end + 1 ; 
   end = StringLen ( trade ) ; 
   mTakeProfit = StrToDouble ( StringSubstr ( trade , begin , end - begin ) ) ; 
} 


실행 결과:

18:01:54 'news001' 편집 중
18:01:54 news001 USDCHF,H4: 초기화 해제
18:01:54 news001 USDCHF,H4: 단위 이유 2
18:01:54 news001 USDCHF,H4: 성공적으로 로드됨
18:01:54 news001 USDCHF,H4: 할당됨
18:01:54 news001 USDCHF,H4: 연결됨
18:01:54 news001 USDCHF,H4: ¤Fџ ЁFџ °Fџ USD
18:01:54 news001 USDCHF,H4: МFџ РFџ nFџ USD
18:01:54 news001 USDCHF,H4: Gџ Gџ $Gџ USD
18:01:54 news001 USDCHF,H4: DGџ HGџ _Gџ USD
18:01:54 news001 USDCHF,H4: |Gџ ЂGџ ™Gџ USD
18:01:54 news001 USDCHF,H4: јGџ AGџ YGџ USD
18:01:54 news001 USDCHF,H4: ьGџ
18:01:54 news001 USDCHF,H4:,Hџ 0Hџ FHџ USD
18:01:54 news001 USDCHF,H4: dHџ hHџ wHџ USD
18:01:54 news001 USDCHF,H4: ”Hџ ~Hџ “Hџ USD
18:01:54 news001 USDCHF,H4: МHџ РHџ kHџ USD
18:01:54 news001 USDCHF,H4: Iџ Iџ Iџ USD 등


어떻게 든 상형 문자 문제를 해결할 수 있습니까? phpMyAdmin의 동일한 요청 스크린샷



 

MS SQL 데이터베이스 작업을 위한 "래퍼"를 퍼뜨렸습니다.

ADOLib.mqh 래퍼 및 COM 서버 자체,

이것은 MS SQL(뿐만 아니라!) ADOLib.dll과의 작업을 제공합니다.

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"
정수 만들기 연결();
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);



 

MS SQL 2005 "dbForex" 데이터베이스 접속 예

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();

string CommandText="INSERT INTO 요금(TimeCurrent,AccountCompany,Symb,DateTimeRate,Ask,Bid)"+
"VALUES("+TimeCurrent()+",'"+회사+"','"+Symb+"','"+DateTimeRate+"',"+Ask+","+Bid+")";
실행(CommandText,adAsyncFetch);
수면(15);

}


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

리턴(0);
}

 

나는 ADOLib.mqh가 "include" 디렉토리에 있고

"Library" 디렉토리의 ADOlib.

이제 \Library 디렉토리에 있으므로 등록하십시오.

이 COM 개체를 입력하고 regsvr32 ADOLib.dll 명령을 입력합니다.

Enter 키를 누르면 이 라이브러리가 등록됩니다.

이 모든 작업은 명령줄 콘솔에서 수행하거나,

Total Commander에서 말합니다.

Vista를 실행하는 경우 TC와

콘솔은 계정 아래에서 시작해야 합니다.

"관리자".

사유: