기고글 토론 "MQL5(MQL4)에서 MySQL 데이터베이스에 액세스하는 방법" - 페이지 6

 
elugovoy:

안녕하세요, 어떤 버전의 MT5 터미널을 사용 중이신가요?

어떤 버전의 MT5 터미널을 사용 중이신가요?

여기에 첨부된 MQLMySQL 라이브러리의 최신 업데이트를 시도해 보세요.

최신 버전의 MT4를 사용하고 있는데, 하나의 통화만 사용할 때는 괜찮지만 동일한 MT4에서 발신자가 데이터를 보내고 수신자가 데이터를 수신하는 경우 동시에 MT4는 "0x65D6954로 읽은 액세스 위반"이라는 오류를 인쇄합니다.
 
elugovoy:

안녕하세요, 어떤 버전의 MT5 터미널을 사용 중이신가요?

어떤 버전의 MT5 터미널을 사용 중이신가요?

여기에 첨부된 MQLMySQL 라이브러리의 최신 업데이트를 시도해 주세요.

mqlmysql.dll이
싱글톤 호출, 동일한 MT4가 이 dll을 멀티콜할 수 없습니다.
 

운영 체제의 다른 위치에 libmysql.dll이(가) 있을 수 있습니다.

libmysql.dll이 %WINDOWS%\SYSTEM32 폴더에 있는 경우 MT4\MQL4\Experts\Libraries에서 삭제해야 합니다.

에서 삭제해야 하므로 하나의 dll만 사용해야 합니다.

전문가용 어드바이저를 다른 차트에 사용하더라도 하나의 터미널은 라이브러리를 한 번만 첨부하므로 그 이유는 다릅니다.

MQLMySQL.dll은 내부 공유 데이터에 액세스하기 위해 뮤텍스를 사용하므로 이 또한 이유가 될 수 없습니다.

가능한 경우 해당 상황을 발생시키는 데 사용하시는 MQL 코드와 MT4의 빌드 번호를 알려주시면 테스트해보고 해결책을 전달해드리도록 하겠습니다.

테스트해보고 해결책을 전달하도록 하겠습니다.

 
elugovoy:

운영 체제의 다른 위치에 libmysql.dll이(가) 있을 수 있습니다.

libmysql.dll이 %WINDOWS%\SYSTEM32 폴더에 있는 경우 MT4\MQL4\Experts\Libraries에서 삭제해야 합니다.

에서 삭제해야 하므로 하나의 dll만 사용해야 합니다.

전문가용 어드바이저를 다른 차트에 사용하더라도 하나의 터미널은 라이브러리를 한 번만 첨부하므로 그 이유는 다릅니다.

MQLMySQL.dll은 내부 공유 데이터에 액세스하기 위해 뮤텍스를 사용하므로 이 또한 이유가 될 수 없습니다.

가능한 경우 해당 상황을 발생시키는 데 사용하시는 MQL 코드와 MT4의 빌드 번호를 알려주시면 테스트해보고 해결책을 전달해드리도록 하겠습니다.

테스트해보고 해결책을 전달하도록 하겠습니다.

MQL 코드는 mt4 데이터를 mysql 테이블에 수집하는 코드인데, 하나의 mt4에서 하나만 사용하면 괜찮고, 두 개의 mt4에서 4개 이상 사용하면 Access violation read 에 0x00000002로 ... \MQLMySQL.dll'


파일:
sendData.mq4  11 kb
 
elugovoy:

운영 체제의 다른 위치에 libmysql.dll이(가) 있을 수 있습니다.

libmysql.dll이 %WINDOWS%\SYSTEM32 폴더에 있는 경우 MT4\MQL4\Experts\Libraries에서 삭제해야 합니다.

에서 삭제해야 하므로 하나의 dll만 사용해야 합니다.

전문가용 어드바이저를 다른 차트에 사용하더라도 하나의 터미널은 라이브러리를 한 번만 첨부하므로 그 이유는 다릅니다.

MQLMySQL.dll은 내부 공유 데이터에 액세스하기 위해 뮤텍스를 사용하므로 이 또한 이유가 될 수 없습니다.

가능한 경우 해당 상황을 발생시키는 데 사용하시는 MQL 코드와 MT4의 빌드 번호를 알려주시면 테스트해보고 해결책을 전달해드리도록 하겠습니다.

테스트해보고 해결책을 전달하도록 하겠습니다.

mysql 메모리 테이블을 사용했는데 문제가 있나요? 엔진=메모리
 
yukaixie:
mysql 메모리 테이블을 사용했는데 문제가 있나요? 엔진=메모리
테이블 유형 엔진을 메모리에서 Innodb로 변경했는데 문제가 여전히 존재합니다. 2015.04.08 15:31:59.296 액세스 위반 읽기 0x00000004에서 '. .MQLMySQL.dll'

 
yukaixie:

MQL 코드는 mt4 데이터를 mysql 테이블에 수집하고, 하나의 mt4에서 하나만 사용하면 괜찮고, 두 개의 mt4에서 4 개 이상을 사용하면 액세스 위반 읽기를 인쇄합니다. 에 0x00000002로 ... \MQLMySQL.dll'


MySqlDisconnect(DB);

데이터베이스 연결 해제가 필요하지만 여전히 문제가 해결되지 않습니다.

 
EA/스크립트의 소스 코드를 제공할 수 있나요?
 
elugovoy:
EA/스크립트의 소스 코드를 제공해 주실 수 있나요?

MQL CODE는 mt4 데이터를 mysql 테이블에 수집하고 있으며, 하나의 mt4에서 하나만 사용하면 괜찮고, 두 개의 mt4에서 4 개 이상을 사용하면 액세스 위반 읽기를 인쇄합니다. 에 0x00000002로 ... \MQLMySQL.dll'


추가 파일

senddata.mq4 11 kb

sendata.mq4는 제가 업로드한 EA 소스 코드입니다.

 
elugovoy:
EA/스크립트의 소스 코드를 제공할 수 있나요?
//+------------------------------------------------------------------+
//|& nbsp; 데이터베이스 운영.mq4 |
//| Copyright 2015, MetaQuotes Software Corp.
//| & nbsp https://www.mql5.com |
//+------------------------------------------------------------------+
#재산권 저작권 "Copyright 2015, MetaQuotes Software Corp."
#속성 링크 "https://www.mql5.com"
#속성 버전 "1.00"
#속성 엄격


입력 문자열 Host = "localhost"; //Server IP, 예: 192.168.1.210, localhost
입력 문자열 User = "root"; //mysql 데이터베이스 로그인 사용자 이름
입력 문자열 Password = "root"; //mysql 데이터베이스 비밀번호
입력 문자열 Database = "test"; //Mysql 데이터베이스 이름
입력 문자열 Socket = "0"; // 데이터베이스 자격 증명
입력 int Port = 3306; // mysql 데이터베이스 포트 번호
입력 int ClientFlag = 0; // 데이터베이스 자격 증명

int DB = 0; // 데이터베이스 식별자 //---
int timeSeconds = 1; // 타이머
#include <MQLMySQL.mqh

string Query; int i,Cursor,Rector

int i,Cursor,Rows; //인클루드 <MQLMySQL.mqh> 문자열 Query.
//+------------------------------------------------------------------+
//| 전문가 초기화 함수 nbsp; |
//+------------------------------------------------------------------+
int OnInit()
OnInit()
return(INIT_SUCCEED);
}
//+------------------------------------------------------------------+
//| 전문가 초기화 함수 ||
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{

}
//+------------------------------------------------------------------+
//| 전문가 틱 함수 nbsp; |
//+------------------------------------------------------------------+
void OnTick()
{
if( IsExpertEnabled() && IsConnected() && AccountNumber() > 0 )
{
int account = AccountNumber();
문자열 symbol = Symbol();
//int syDB = 0; // 데이터베이스 식별자//---
DB = cMySqlConnect(Host, User, Password, Database, Port, Socket, ClientFlag); //int syDB = 0; // 데이터베이스 식별자//---
//Alert(DB);
더블 스프레드 = (매도 - 매수);
//Alert(symbol).
Query = "SELECT * FROM " + symbol + " where AccountNumber = " + (문자열)AccountNumber();
//Print(Query);
Cursor = MySqlCursorOpen(DB, Query);
if (Cursor >= 0)
{
Rows = MySqlCursorRows(Cursor); if (Cursor >= 0) { Rows = MySqlCursorRows(Cursor)
int dataRows = Rows;
//Alert(dataRows);
if( dataRows > 0 )
{
Query = "update " + 기호 + " set Bid = " + (문자열)Bid + ", Ask = " + ( 문자열)Ask
+ ", Spread = " + DoubleToStr(spread, Digits)
+ ", Time = '" + TimeToString(TimeLocal(), TIME_DATE|TIME_SECONDS ) + "' 여기서 계정번호 = "
+ (문자열)계정; // + "' 및 기호 = '" + 기호 + "'".
MySqlExecute(DB, Query);
}
else if( dataRows == 0 )
{
Query = "CREATE TABLE IF NOT EXISTS " + symbol + " (id int NOT NULL AUTO_. INCREMENT PRIMARY KEY, AccountNumber int, "
+ "기호 문자(20), 입찰가 2배, 매도 2배, 스프레드 2배,"
+ "메모 문자(50), "
+ "시간 날짜 시간) 엔진=메모리 기본 문자 집합=utf8 ";
MySqlExecute(DB, Query);
Query = "INSERT INTO " + 기호 + "(계정번호, 기호, 매수, 매도, 스프레드. Memo, Time) VALUES ("
+ (문자열)계정 + ", '" + 기호 + "', "+(문자열)입찰가+","+ (문자열)질문 + ", "
+ DoubleToStr(스프레드, 숫자)
+ ", '" + (문자열)AccountCompany()
+ "', \'"+TimeToString(TimeLocal(), TIME_DATE|TIME_SECONDS)+"\')""";
if(MySqlExecute(DB, Query) ! = true )
{
//쿼리 = "`데이터_테이블`이 존재하면 테이블 삭제";
//MySqlExecute(DB, Query);
Query = "CREATE TABLE IF NOT EXISTS " + symbol + "(id int NOT NULL AUTO_INCREMENT PRIMARY KEY, AccountNumber int, "
+ "기호 문자(20), 입찰가 2배, 매도 2배, 스프레드 double,"
+ "메모 문자(50), "
+ "시간 날짜 시간) 엔진=메모리 기본 문자 집합= utf8 ";
MySqlExecute(DB, Query);
}
}
MySqlCursorClose(Cursor); // 절대 커서 닫는 것을 잊지 마세요 !!!!
}
}
}
//+------------------------------------------------------------------+

3개의 DB를 연결했는데 동일한 DB를 사용했는데, 새로운 데이터베이스 CRUD를 위해 새로운 DB를 생성해야 하나요?


自动交易和策略测试
自动交易和策略测试
  • www.mql5.com
MQL5:MetaTrader 5客户端内置的交易策略语言。语言允许编写您自己的自动交易系统,技术指标,脚本和函数程序库