View Single Post
 
Old 04-14-2006, 09:18 AM
Beluck's Avatar
Beluck Beluck is offline
Senior Member
 
Join Date: Oct 2005
Posts: 195
Beluck has much to be proud ofBeluck has much to be proud ofBeluck has much to be proud ofBeluck has much to be proud ofBeluck has much to be proud ofBeluck has much to be proud ofBeluck has much to be proud ofBeluck has much to be proud of
for libmysql.dll look in "lib" subfolder of your mysql installation.

there is one problem though as metatrader can get only scalar datatypes from DLLs.
DDL and DML SQL statements work just fine, but if you need to read something from database with SELECT, it is not so trivial as result is in memory as some structure, which can not be read in MQ4.
to override this I had to output query result to a file and then read it in MQ4:

Code:
int GetClientTrades() {
   FileDelete(queryFile);
   string query="SELECT * INTO OUTFILE \'"+queryPFile+"\' FIELDS TERMINATED BY \';\' LINES TERMINATED BY \'\n\'FROM clients_trades;";
   Print(query);
   int length=StringLen(query);
   mysql_real_query(mysql,query,length);
   int myerr=mysql_errno(mysql);
   if (myerr>0) Print("error=",myerr);

   int handle,res,size,i;
  	ArrayResize(clientTrades,0);
	handle=FileOpen(queryFile,FILE_CSV|FILE_READ);
	if(handle<1) {
   	Print("File " + queryFile + " not found, the last error is ", GetLastError());
   	return(0);
	}
	while (!FileIsEnding(handle)) {
		size++;
		ArrayResize(clientTrades,size);
		clientTrades[size-1][0]=FileReadNumber(handle);
		clientTrades[size-1][1]=FileReadNumber(handle);
		clientTrades[size-1][2]=FileReadNumber(handle);
		clientTrades[size-1][3]=FileReadNumber(handle);
		clientTrades[size-1][4]=FileReadNumber(handle);
		clientTrades[size-1][5]=FileReadNumber(handle);
		clientTrades[size-1][6]=FileReadNumber(handle);
		clientTrades[size-1][7]=FileReadNumber(handle);
		clientTrades[size-1][8]=FileReadNumber(handle);
		clientTrades[size-1][9]=FileReadNumber(handle);
	}
	ArrayResize(clientTrades,size-1);
	size--;
	//if (clientTrades[size-1][0]==0.0) ArrayResize(clientTrades,size-1);
	FileClose(handle);
   return(1);
}