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

 

기사 주셔서 감사합니다! 얼마나 많은 솔루션이 모든 곳에서 똑같은 것을 시도하지 않았는지, 귀찮게하지 않으면 로그를 보시면 아무것도 이해할 수 없습니다....

MySQL 서버:

  • 서버 : TCP / IP를 통한 로컬 호스트
  • 서버 버전: 5.6.10
  • 프로토콜 버전: 10
  • 사용자: root@localhost
  • MySQL 인코딩: UTF-8 유니코드(utf8 )
  • InnoDB 데이터베이스, UTF8-General-Ci

MT5 빌드 1035

OS: Win8.1 x64

파일:
log_.txt  19 kb
 

안녕하세요.

x64 운영 체제를 사용 중인데 64비트 버전용 DLL을 사용하고 계신가요?

토론 게시물 중 하나에 첨부되어 있습니다(mqlmysql_for_mql5_x64.zip1264 kb).

이 문서에는 x86 운영 체제 전용 라이브러리가 있었습니다.

그런데 아카이브의 테스트 예제가 작동하나요?

<<조금 후에>>.

이 줄은 혼란스럽습니다: 테스터 파일 추가됨: libraries\MQLMySQL.dll. 89626바이트 로드됨

x64 파일 MQLMySQL.dll의 원래 크기는 89626이 아니라 89600바이트입니다.

어떤 안티바이러스가 있나요?

 

안녕하세요.

컨셉이 마음에 듭니다. 큰 도움이 될 것입니다.

그러나 나는 몇 가지 문제에 부딪쳤다. 64 비트를 사용하고 있으며 어떻게 작동하는지 확인하기 위해 테스트 스크립트를 다운로드하고 시작했습니다.

그러나 MySQLGetFieldAsxxxxx에서 충돌합니다.

2015.01.09 21:32:09.535 testsql(AUDNZD,H1) 000000013F81347A 488BF2 mov rsi, rdx
2015.01.09 21:32:09.535 testsql (AUDNZD,H1) 000000013F813476 4883EC20 sub rsp, 0x20
2015.01.09 21:32:09.535 testsql (AUDNZD,H1) 000000013F813475 57 PUSH RDI
2015.01.09 21:32:09.535 testsql (AUDNZD,H1) 000000013F813470 4889742418 MOV [RSP+0X18], RSI
2015.01.09 21:32:09.535 testsql (AUDNZD,H1) 0x000000013F8134B3에서 0x0000000000000001로 읽은 액세스 위반
2015.01.09 21:32:09.535 testsql (AUDNZD,H1) +++++++++++++0
2015.01.09 21:32:09.535 testsql (AUDNZD,H1) 2 행 선택됨
2015..01.09 21:32:09.425 testsql (AUDNZD,H1) Connected
2015.01.09 21:31:18.135 testsql (AUDNZD,H1) x 0 y


Sorce:

#include <FXCM\PairsInfo.mqh>
#include <FXCM\MQLMySQL.mqh>

//--- 입력 매개변수
input string   MySQLURL="yyyyyyyyyyyyyy";
input string   MySQLDB = "forex";
input string   MySQLParms = "tradeparms";
input string   MySQLUser="Ingvar";
input string   MySQLPW="xxxxxxxxxxxx";
input int      MySQLPort=3306;
input string   GroupID= "Groupxxx";

PairsInfo prms;

//+------------------------------------------------------------------+
//| 스크립트 프로그램 시작 함수|
//+------------------------------------------------------------------+
void OnStart()
  {
//---
  string SQLString = "";
  string Q;
  string C = ",";
  StringSetCharacter(Q,0,34);
  
  string query;
  int Cursor;
  int DB;
  int rows;
  
  DB = MySqlConnect(MySQLURL, MySQLUser, MySQLPW, MySQLDB, MySQLPort, "0", 0);
  if (DB == -1) 
    {
      Print ("Connection failed! Error: "+MySqlErrorDescription); 
      return;
    }

    Print ("Connected");
    
  // 쿼리 = "tradeparms에서 * 선택";
    
  // 쿼리 = "Select * FROM tradeparms WHERE TradeType = 2";
    
    query = "SELECT Pair, TradeType, SetupID FROM tradeparms WHERE TradeType = 2 AND Pair = 'USDJPY'";
     
     
   Cursor = MySqlCursorOpen(DB,query);
   if(Cursor <  0)
    {
      Print("Cursor error");
      return;
    }


   string pair= "x";
   int tradetype = 0;
   string setupid = "y";
   
   rows = MySqlCursorRows(Cursor);
   Print (rows, " row(s) selected.");
   
   for(int i=0;i<rows;i++)
    {
     if (MySqlCursorFetchRow(Cursor))  
       {
        Print("+++++++++++++" + i);
    pair = MySqlGetFieldAsString(커서, 0);                    << crashes here.   
   // tradetype = MySqlGetFieldAsInt(Cursor,1);
   // setupid = MySqlGetFieldAsString(Cursor,2);
       }
     }  
      
   Print(pair + "  " + DoubleToString(tradetype,0) + "  " + setupid);
   
   MySqlCursorClose(Cursor);
 
  
 } 
 

Win32가 설치된 오래된 노트북을 꺼내 32 비트 버전을 설치하고 32 비트 라이브러리와 포함 된 동일한 소스를 컴파일했습니다.

잘 작동합니다. 64비트 버전에 문제가 있습니다.

 
ingvar_e:

Win32가 설치된 오래된 노트북을 꺼내 32 비트 버전을 설치하고 32 비트 라이브러리와 포함 된 동일한 소스를 컴파일했습니다.

잘 작동합니다. 64 비트 버전에 문제가 있습니다.

좋아, 이것을 확인하겠습니다.

터미널 버전은 무엇입니까? MT4/MT5? 그리고 빌드 번호는?

 
elugovoy:

네, 확인하겠습니다.

터미널 버전은 무엇인가요? MT4/MT5? 그리고 빌드 번호는요?

터미널 MT5 빌드 1035. W7 64에서 실행 중 크래시 발생

터미널 MT5 빌드 1035 XP 32에서 실행 중입니다.

고마워요. 현재 입력 파일을 사용하는 멀티 커런시, 뮬리 방식 (일종의) EA에서 작업 중입니다. 다른 입력 파일을 유연하게 테스트하기 위해 MySQL로 변환하고 있습니다.

 
ingvar_e:

터미널 MT5 빌드 1035. W7 64에서 실행 중 크래시 발생

XP 32에서 실행 중인 터미널 MT5 빌드 1035 OK

고마워요. 현재 입력 파일을 사용하는 멀티 커런트, 뮬리 방식 (일종의) EA에서 작업 중입니다. 다른 입력 파일을 유연하게 테스트하기 위해 MySQL로 변환하고 있습니다.

x64 OS, MT5 빌드 1035에서 테스트했습니다. 정답입니다.

몇 가지 확인을 해본 결과 DLL로 들어오는 데이터는 정상적으로 작동합니다. 문제는 DLL 함수에서 문자열 데이터 유형을 수신하는 데 있습니다.

또한 이전 빌드인 MT5 x64로 컴파일한 내 스크립트를 테스트했는데 정상적으로 작동했습니다.

그러나 빌드 1035로 다시 컴파일 한 후 동일한 DLL을 사용하는 동일한 스크립트가 이러한 오류를 가져옵니다.

마지막으로 DLL이나 MQLMySQL 프로젝트에 문제가있는 것이 아니라 MT5 x64 컴파일러에 문제가 있다고 가정합니다. 이 문제에 대해 서비스 데스크에 케이스를 열었습니다.

감사합니다,

Eugene

 
ingvar_e:

터미널 MT5 빌드 1035. W7 64에서 실행 중 크래시 발생

XP 32에서 실행 중인 터미널 MT5 빌드 1035 OK

고마워요. 현재 입력 파일을 사용하는 멀티 커런트, 뮬리 방식 (일종의) EA에서 작업 중입니다. 다른 입력 파일을 유연하게 테스트하기 위해 MySQL로 변환하고 있습니다.

테스트용으로 배포 패키지에 포함된 제 스크립트를 사용할 수 있습니다.

INI 파일에서 데이터베이스 자격 증명을 변경한 다음 스크립트를 실행하세요.

다시 컴파일하고 다시 실행해 보세요.

첫 번째 실행에서는 정상적으로 작동하지만 다시 컴파일 한 후에는 동일한 오류가 발생하는 것을 볼 수 있습니다.

MT5 x64 b1035 터미널/컴파일러에 문제가 있습니다.

 
elugovoy:

테스트용으로 배포 패키지에 포함된 스크립트를 사용할 수 있습니다.

INI 파일에서 데이터베이스 자격 증명을 변경한 다음 스크립트를 실행합니다.

다시 컴파일하고 다시 실행해 보세요.

첫 번째 실행에서는 정상적으로 작동하지만 다시 컴파일 한 후에는 동일한 오류가 발생하는 것을 볼 수 있습니다.

MT5 x64 b1035 터미널/컴파일러에 문제가 있습니다.

>문제는 MT5 x64 b1035에 있습니다.

그래서 우리는 갇혀 있습니까?

제 오래된 32비트 노트북이 오늘 포기했습니다. 완전히 죽었습니다.

64비트 머신에 32비트 윈도우를 설치할 수 있는지, 그리고 그게 정말 도움이 되는지 궁금합니다. 또는 Windows 7 64비트 컴퓨터에 MT5/MQL5 32비트를 설치하세요.

나중에:

이걸 찾았습니다.

 
ingvar_e:

>MT5 x64 b1035에 문제가 있습니다.

그래서 우리는 갇혀 있습니까?

제 오래된 32비트 노트북이 오늘 포기했습니다. 완전히 죽었습니다.

64비트 머신에 32비트 윈도우를 설치할 수 있는지, 정말 도움이 되는지 궁금합니다. 또는 Windows 7 64비트 컴퓨터에 MT5/MQL5 32비트를 설치하세요.

나중에:

이걸 찾았습니다.

  • 64비트 운영체제에 32비트 버전을 설치하려면 /32 키를 사용하여 설치 프로그램을 시작해야 합니다. 예: c:\>mt5setup.exe /32.
  • ,SYMBOL_TRADE_TICK_VALUE)

    는 0을 반환합니다;

    윈도우 64비트 머신에서 32비트 MT5를 실행하는 것은 좋은 생각이 아닐 수도 있습니다. 다른 오작동 징후도 있습니다. 다음에는 64비트 컴퓨터에 32비트를 설치해 보겠습니다.

    항상 이런 긴 우회로 때문에 메인 코스에서 멀리 떨어져 있습니다 :-(

    이 도구를 포기하고 MySQL로 기본으로 돌아가야 할 것 같습니다. 새 Windows XP를 설치하는 것이 너무 번거롭고 W7 키가 없습니다.