記事"MQL5 (MQL4)から MySQL データベースにアクセスする方法"についてのディスカッション - ページ 3

 

記事をありがとうございました!あなたが気にしない場合は、ログを見てください、私は何も理解することはできません....どのように多くのソリューションは、どこでも同じことを試していませんでした。

MySQLサーバ:

  • サーバー:TCP/IP経由localhost
  • サーバーのバージョン:5.6.10
  • プロトコルバージョン: 10
  • ユーザー: root@localhost
  • MySQL エンコーディング:UTF-8 Unicode (utf8 )
  • InnoDBデータベース、UTF8-General-Ci

MT5ビルド1035

OS: Win8.1 x64

ファイル:
log_.txt  19 kb
 

はじめまして。

あなたのオペレーティング・システムはx64ですが、64ビット版のDLLを使用していますか?

DLLはディスカッションの投稿に添付されています(mqlmysql_for_mql5_x64.zip1264 kb)。

その記事にはx86オペレーティング・システム用のライブラリしかありませんでした。

ところで、アーカイブにあるテスト・サンプルは動きますか?

<<少し後>>。

Tester file added: librariesMQLMySQL.dll.89626バイトがロードされました

x64ファイルMQLMySQL.dllの 元のサイズは89626ではなく89600バイトです。

どのアンチウイルスを使用していますか?

 

こんにちは。

コンセプトが気に入った。大きな助けになるはずです。

でも、ちょっと問題があるんだ。私は64ビットを使用しており、それらをダウンロードし、どのように動作するかを確認するためにテストスクリプトを開始しました。

しかし、MySQLGetFieldAsxxxxxxxでクラッシュします。

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) Access violation at 0x000000013F8134B3 read to 0x000000000001
2015.01.09 21:32:09.535 testsql (AUDNZD,H1) +++++++++++0
2015.01.09 21:32:09.535 testsql (AUDNZD,H1) 2 row(s) selected.
2015.01.09 21:32:09.425 testsql (AUDNZD,H1) Connected
2015.01.09 21:31:18.135 testsql (AUDNZD,H1) x 0 y


ソーサ

#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");
    
  // query = "Select * From tradeparms";
    
  // query = "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(Cursor, 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で動作中 OK

ありがとうございます。現在、入力ファイルを使用するマルチカレンシー、ムリメソッド(のようなもの)のEAに取り組んでいます。異なる入力ファイルを柔軟にテストするために、MySQLに変換しています。

 
ingvar_e:

ターミナル MT5 ビルド 1035 W7 64で動作中 クラッシュ

Terminal MT5 Build 1035 XP 32で動作中 OK

ありがとうございます。現在、入力ファイルを使用するマルチカレンシー、ムリメソッド(のようなもの)のEAに取り組んでいます。異なる入力ファイルを柔軟にテストするために、MySQLに変換しています。

x64 OS、MT5 build 1035でテストしました。その通りです。

いくつかのチェックを行ったところ、DLLに来るデータは問題なく動作することがわかりました。問題はDLLの関数から STRINGデータ型を受信することです。

また、私自身のスクリプトをMT5 x64の以前のビルドでコンパイルしてテストしましたが、問題なく動作しました。

しかし、ビルド1035で再コンパイルした後、同じDLLで同じスクリプトを実行すると、このようなエラーが発生します。

最終的に、問題はDLLやMQLMySQLプロジェクトではなく、MT5 x64コンパイラにあると仮定します。この問題についてサービスデスクにケースを開設しました。

ありがとうございました、

ユージン

 
ingvar_e:

ターミナル MT5 ビルド 1035 W7 64で動作中 クラッシュ

Terminal MT5 Build 1035 XP 32で動作中 OK

ありがとうございます。現在、入力ファイルを使用するマルチカレンシー、ムリメソッド(のようなもの)のEAに取り組んでいます。異なる入力ファイルを柔軟にテストするために、MySQLに変換しています。

テスト用に、配布パッケージに含まれている私のスクリプトを使用することができます。

INIファイルでデータベースの認証情報を変更し、スクリプトを実行してください。

再コンパイルしてもう一度実行してみてください。

1回目の実行では問題なく動作しますが、再コンパイルするとあなたのスクリプトと同じエラーが発生します。

問題はMT5 x64 b1035ターミナル/コンパイラで発生します。

 
elugovoy:

テスト用に、配布パッケージに含まれている私のスクリプトを使うことができます。

INIファイルでデータベースの認証情報を変更してから、スクリプトを実行してください。

再コンパイルしてもう一度実行してみてください。

1回目の実行では問題なく動作しますが、再コンパイルすると、あなたのスクリプトと同じエラーが発生することがわかります。

問題は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ビットOSに32ビット版をインストールするには、/32キーでインストーラーを起動します。例えば、c:˶>mt5setup.exe /32.
  • ,SYMBOL_TRADE_TICK_VALUE)

    は0を返します;

    多分、32ビットのMT5をウィンドウズの64ビットマシンで実行するのは良い考えではない。他の不具合の兆候もあります。次に試すのは、私の64ビットコンピュータに32ビットのウィンドウズをインストールすることだ。

    いつもこのような長い回り道をしていると、メインコースから大きく外れてしまう :-(

    このツールに見切りをつけて、MySQLの基本に戻るしかなさそうだ。新しいウィンドウズXPをインストールするのは面倒だし、W7のキーもない。