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

 
elugovoy:

お使いのMT5ターミナルのバージョンは?

お使いのMT5ターミナルのバージョンはどちらですか?

MQLMySQLライブラリの最新アップデートをお試しください。

MT4の最新バージョンを使用していますが、1つのコールだけを使用する場合は問題ありませんが、 同じMT4で センダーがデータを送信し、 レシーバーがデータを受信 すると、MT4は "アクセス違反 "というエラーを表示します。 MT4は "アクセス違反が0x65D6954に読み込まれた "というエラーを表示します。
 
elugovoy:

お使いのMT5ターミナルのバージョンは?

お使いのMT5ターミナルのバージョンはどちらですか?

MQLMySQLライブラリの最新アップデートをお試しください。

mqlmysql.dllが
シングルトン呼び出しで、同じmt4はこのdllをマルチコールできません。
 

もしかすると、libmysql.dllがオペレーティングシステムの別の場所にあるかもしれません。

もしlibmysql.dllが%WINDOWS%SYSTEM32フォルダにある場合、MT4MQL4Librariesから削除してください。

から削除する必要があります。

エキスパートアドバイザーが異なるチャートに使用する場合でも、1つのターミナルは1つのライブラリをアタッチする。

MQLMySQL.dllは内部共有データへのアクセスにミューテックスを使用しているので、これも理由にはなりません。

もし可能であれば、このような状況を発生させるために使用しているMQLコードとMT 4のビルド 番号を教えてください。

私はそれをテストし、解決策を提供しようとします。

 
elugovoy:

もしかすると、libmysql.dllがオペレーティングシステムの別の場所にあるかもしれません。

もしlibmysql.dllが%WINDOWS%SYSTEM32フォルダにある場合、MT4MQL4Librariesから削除してください。

から削除する必要があります。

エキスパートアドバイザーが異なるチャートに使用する場合でも、1つのターミナルは1つのライブラリをアタッチする。

MQLMySQL.dllは内部共有データへのアクセスにミューテックスを使用しているので、これも理由にはなりません。

もし可能であれば、このような状況を発生させるために使用しているMQLコードとMT4のビルド番号を教えてください。

私はそれをテストし、解決策を提供しようとします。

MQLコードはmt4のデータをmysqlのテーブルに収集するもので、1つのmt4で1つだけ使用する場合は問題ありませんが、2つのmt4で4つ以上使用する場合は、Access violation readと表示されます。と表示される。\MQLMySQL.dll'


ファイル:
sendData.mq4  11 kb
 
elugovoy:

もしかすると、libmysql.dllがオペレーティングシステムの別の場所にあるかもしれません。

もしlibmysql.dllが%WINDOWS%SYSTEM32フォルダにある場合、MT4MQL4Librariesから削除してください。

から削除する必要があります。

エキスパートアドバイザーが異なるチャートに使用する場合でも、1つのターミナルは1つのライブラリをアタッチする。

MQLMySQL.dllは内部共有データへのアクセスにミューテックスを使用しているので、これも理由にはなりません。

もし可能であれば、このような状況を発生させるために使用しているMQLコードとMT4のビルド番号を教えてください。

テストして解決策を提供するよう努力します。

mysqlの メモリテーブルを 使用している のですが、それが問題なのでしょうか? ENGINE=MEMORY
 
yukaixie:
mysqlのメモリテーブルを使用したのですが、これが問題なのでしょうか? ENGINE=MEMORY
テーブルタイプのエンジンをメモリからInnodbに変更したが、問題はまだ存在する。 2015.04.08 15:31:59.296 Access violation read to 0x00000004 in '..MQLMySQL.dll'で0x00000004へのアクセス違反が読み込まれました。

 
yukaixie:

MQL CODEはmt4のデータをmysqlのテーブルに収集するもので、1つのmt4で1つだけ使用する場合は問題ないが、2つのmt4で4つ以上使用すると、Access violation readと表示される。と表示される。\MQLMySQL.dll'


MySqlDisconnect(DB);

データベースの切断が必要ですが、それはまだ問題を解決していない。

 
EA/スクリプトのソースコードをいただけますか?
 
elugovoy:
EA/スクリプトのソースコードを教えてください。

MQL CODEはmt4のデータをmysqlのテーブルに収集していますが、1つのmt4で1つだけ使用する場合は問題ありませんが、2つのmt4で4つ以上使用する場合は、Access violation readと表示されます。と表示される。\MQLMySQL.dll'


追加ファイル:

senddata.mq4 11 kb

sendata.mq4は私がアップロードしたEAのソースコードです。

 
elugovoy:
EA/スクリプトのソースコードを教えてください。
//+------------------------------------------------------------------+
//|&データベース操作.mq4
//| Copyright 2015, MetaQuotes Software Corp.
//|& nbspnbsp; https://www.mql5.com |
//+------------------------------------------------------------------+
#プロパティ copyright "Copyright 2015, MetaQuotes Software Corp."
#property version "1.00"
#プロパティ strict


input string Host = "localhost"; //サーバーIP、例えば192.168.1.210, localhost
input string User = "root"; //mysqlデータベースのログインユーザー名
input string Password = "root"; //Mysqlデータベースのパスワード
input string Database = "test"; //Mysqlデータベース名
input string Socket = "0"; //データベースの認証情報
input int Port = 3306; //mysqlデータベースのポート番号
input int ClientFlag = 0; // データベースの認証情報

int DB = 0; // データベース識別子
int timeSeconds = 1; // タイマー
#include <MQLMySQL.mqh

文字列 Query; int i,Cursor,Rector

int i,Cursor,Rows; //Include <MQLMySQL.mqh> string Query.
//+------------------------------------------------------------------+
//| エキスパート初期化関数 &nbsp;
//+------------------------------------------------------------------+
int OnInit()
OnInit()
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| エキスパート初期化関数
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{

}
//+------------------------------------------------------------------+
//| エキスパート・ティック関数 &nbsp;
//+------------------------------------------------------------------+
void OnTick()
{
if( IsExpertEnabled() && IsConnected() && AccountNumber() > 0 )
{
int account = AccountNumber();
string symbol = Symbol();
//int syDB = 0; // データベース識別子//---。
DB = cMySqlConnect(Host, User, Password, Database, Port, Socket, ClientFlag); //inst syDB = 0; // データベース識別子 ///---
//Alert(DB);
double spread = (Ask - Bid);
//アラート(シンボル).
Query = "SELECT * FROM " + symbol + " where AccountNumber = " + (string)AccountNumber();
//Print(Query);
カーソル = MySqlCursorOpen(DB, Query);
if (Cursor >= 0)
{
行 = MySqlCursorRows(Cursor); if (Cursor >= 0) { 行 = MySqlCursorRows(Cursor)
int dataRows = Rows;
//Alert(dataRows);
if( dataRows > 0 )
{
Query = "update " + symbol + " set Bid = " + (string)Bid + ", Ask = " + (文字列)アスク
+ ", スプレッド = " + DoubleToStr(spread, Digits)
+ ", Time = '" + TimeToString(TimeLocal(), TIME_DATE|TIME_SECONDS) + "' where AccountNumber) + "' where AccountNumber = ".
+ (string)account; // + "' and Symbol = '" + symbol + "'.".
MySqlExecute(DB, Query);
}
else if( dataRows == 0 )
{
Query = "CREATE TABLE IF NOT EXISTS " + symbol + " (id int NOT NULL AUTO_INCREMENT PRIMARY KEY, AccountNumber int, "
+ "シンボル char(20), Bid double, Ask double, Spread double,"
+ "メモ char(50), "
+ ENGINE=MEMORY DEFAULT CHARSET=utf8 ";
MySqlExecute(DB, Query);
Query = "INSERT INTO " + symbol + "(AccountNumber, Symbol, Bid, Ask, Spread.メモ, 時間) VALUES ("
+ (string)account + ", '" + symbol + "', "+(string)Bid+", "+ (string)Ask + "、"
+ DoubleToStr(スプレッド、桁)
+ ", '" + (文字列)AccountCompany()
+ "', ˶'+TimeToString(TimeLocal(), TIME_DATE|TIME_SECONDS)+"";)
if(MySqlExecute(DB, Query) != true )
{
//Query = "DROP TABLE IF EXISTS `data_table`";
//MySqlExecute(DB, Query);
Query = "CREATE TABLE IF NOT EXISTS " + symbol + "(id intNOT NULL AUTO_INCREMENT PRIMARY KEY, AccountNumber int, "
+ "シンボル char(20), Bid double, Ask double, Spreaddouble、"
+ "メモ char(50), "
+ ENGINE=MEMORY DEFAULT CHARSET=utf8 ";
MySqlExecute(DB, Query);
}
}
MySqlCursorClose(Cursor); // カーソルを閉じるのを忘れない !
}
}
}
//+------------------------------------------------------------------+

私は3つのDB接続を使用しましたが、同じDBを使用しています。新しいデータベースのCRUDのために新しいDBを作成する必要がありますか?


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