Diskussion zum Artikel "Wie man auf die MySQL-Datenbank von MQL5 (MQL4) aus zugreift" - Seite 6

 
elugovoy:

Hallo, welche Version des MT5-Terminals verwenden Sie?

Welche Version des MT5-Terminals verwenden Sie?

Bitte versuchen Sie das neueste Update der MQLMySQL-Bibliotheken, hier angehängt.

Ich habe die neueste Version von MT4 verwendet, wenn nur einen Aufruf verwenden, es ist OK, aber wenn Sender Daten senden und Empfänger Daten an der gleichen MT4 zur gleichen Zeit verwenden zur gleichen Zeit, die MT4 drucken Sie den Fehler "Zugriffsverletzung lesen, um 0x65D6954".
 
elugovoy:

Hallo, welche Version des MT5-Terminals verwenden Sie?

Welche Version des MT5-Terminals verwenden Sie?

Bitte versuchen Sie das letzte Update der MQLMySQL-Bibliotheken, das hier angehängt ist.

I s die mqlmysql.dll ist
Singleton-Aufruf, die gleichen mt4 kann nicht multicall diese dll
 

Vielleicht haben Sie libmysql.dll an verschiedenen Stellen in Ihrem Betriebssystem.

Wenn Sie libmysql.dll im Ordner %WINDOWS%\SYSTEM32 haben, müssen Sie sie aus MT4\MQL4\Experts\Libraries löschen

damit nur eine dll verwendet werden muss.

Das eine Terminal bindet die Bibliothek nur einmal an, auch wenn der Expert Advisor für verschiedene Charts verwendet wird, der Grund ist also ein anderer.

Die MQLMySQL.dll verwendet Mutexe für den Zugriff auf interne freigegebene Daten, so dass es auch nicht ein Grund sein kann.

Wenn Sie können, geben Sie mir bitte mit der MQL-Code, den Sie verwenden, um solche Situation und die Build-Nummer von MT4 zu erhöhen, werde ich versuchen, es zu testen und liefern die Lösung.

Ich werde versuchen, es zu testen und die Lösung zu liefern.

 
elugovoy:

Vielleicht haben Sie libmysql.dll an verschiedenen Stellen in Ihrem Betriebssystem.

Wenn Sie libmysql.dll im Ordner %WINDOWS%\SYSTEM32 haben, müssen Sie sie aus MT4\MQL4\Experts\Libraries löschen

damit nur eine dll verwendet werden muss.

Das eine Terminal bindet die Bibliothek nur einmal an, auch wenn der Expert Advisor für verschiedene Charts verwendet wird, der Grund ist also ein anderer.

Die MQLMySQL.dll verwendet Mutexe für den Zugriff auf interne freigegebene Daten, so dass es auch nicht ein Grund sein kann.

Wenn Sie können, geben Sie mir bitte mit der MQL-Code, den Sie verwenden, um solche Situation und die Build-Nummer von MT4 zu erhöhen, werde ich versuchen, es zu testen und liefern die Lösung.

Ich werde versuchen, es zu testen und die Lösung zu liefern.

MQL CODE sammelt mt4 Daten in die mysql Tabelle, bei Verwendung in einem mt4 in nur einem, ist es ok, bei Verwendung von vier oder mehr in zwei mt4, druckt es Access violation read auf 0x00000002 in ... \MQLMySQL.dll'


Dateien:
sendData.mq4  11 kb
 
elugovoy:

Vielleicht haben Sie libmysql.dll an verschiedenen Stellen in Ihrem Betriebssystem.

Wenn Sie libmysql.dll im Ordner %WINDOWS%\SYSTEM32 haben, müssen Sie sie aus MT4\MQL4\Experts\Libraries löschen

damit nur eine dll verwendet werden muss.

Das eine Terminal bindet die Bibliothek nur einmal an, auch wenn der Expert Advisor für verschiedene Charts verwendet wird, der Grund ist also ein anderer.

Die MQLMySQL.dll verwendet Mutexe für den Zugriff auf interne freigegebene Daten, so dass es auch nicht ein Grund sein kann.

Wenn Sie können, geben Sie mir bitte mit der MQL-Code, den Sie verwenden, um solche Situation und die Build-Nummer von MT4 zu erhöhen, werde ich versuchen, es zu testen und liefern die Lösung.

Ich werde versuchen, es zu testen und die Lösung zu liefern.

Ich habe eine mysql-Speichertabelle verwendet, ist das das Problem? ENGINE=MEMORY
 
yukaixie:
Ich habe eine mysql-Speichertabelle verwendet, ist das das Problem? ENGINE=MEMORY
Ich habe den Tabellentyp Engine von Memory auf Innodb geändert, das Problem besteht immer noch. 2015.04.08 15:31:59.296 Zugriffsverletzung beim Lesen von 0x00000004 in '. .MQLMySQL.dll'

 
yukaixie:

MQL CODE ist sammeln mt4 Daten an die mysql-Tabelle, wenn die Verwendung in einem mt4 in nur einer, es ist ok, wenn vier oder mehr in zwei mt4 verwenden, es drucken Access Verletzung lesen auf 0x00000002 in ... \MQLMySQL.dll'


MySqlDisconnect(DB);

die Datenbank-Trennung erforderlich, aber es ist immer noch nicht das Problem lösen.

 
Können Sie den Quellcode Ihres EA/Skripts zur Verfügung stellen?
 
elugovoy:
Können Sie den Quellcode Ihres EA/Skripts zur Verfügung stellen?

MQL CODE sammelt mt4 Daten in die mysql Tabelle, bei Verwendung in einem mt4 in nur einem, ist es ok, bei Verwendung von vier oder mehr in zwei mt4, druckt es Access violation read auf 0x00000002 in ... \MQLMySQL.dll'


Zusätzliche Dateien:

senddata.mq4 11 kb

Die Datei sendata.mq4 ist mein hochgeladener EA-Quellcode.

 
elugovoy:
Können Sie den Quellcode Ihres EA/Skripts zur Verfügung stellen?
//+------------------------------------------------------------------+
//|& nbsp; Database Operations.mq4 |
//| Copyright 2015, MetaQuotes Software Corp.
//| & nbsp nbsp; https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.00"
#property strict


input string Host = "localhost"; //Server IP, z.B. 192.168.1.210, localhost
input string User = "root"; //Mysql-Datenbank Login-Benutzername
input string Passwort = "root"; //Mysql-Datenbank-Passwort
input string Datenbank = "test"; //Mysql-Datenbankname
input string Socket = "0"; // Datenbank-Zugangsdaten
input int Port = 3306; // Mysql-Datenbank-Portnummer
input int ClientFlag = 0; // Datenbank-Anmeldeinformationen

int DB = 0; // Datenbank-Bezeichner//---
int timeSeconds = 1; // Timer
#include <MQLMySQL.mqh

string Query; int i,Cursor,Rektor

int i,Cursor,Rows; //Include <MQLMySQL.mqh> string Query.
//+------------------------------------------------------------------+
//| Experteninitialisierungsfunktion & nbsp; |
//+------------------------------------------------------------------+
int OnInit()
OnInit()
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Experten-Deinitialisierungsfunktion |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{

}
//+------------------------------------------------------------------+
//| Experten-Tick-Funktion & nbsp; |
//+------------------------------------------------------------------+
void OnTick()
{
if( IsExpertEnabled() && IsConnected() && AccountNumber() > 0 )
{
int Konto = KontoNummer();
string symbol = Symbol();
//int syDB = 0; // Kennung der Datenbank//---
DB = cMySqlConnect(Host, Benutzer, Passwort, Datenbank, Port, Socket, ClientFlag); //inst syDB = 0; // Datenbankkennung//---
//Alert(DB);
double spread = (Ask - Bid);
//Alert(Symbol).
Query = "SELECT * FROM " + symbol + " where AccountNumber = " + (string)AccountNumber();
//Drucken(Abfrage);
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 " + symbol + " set Bid = " + (string)Bid + ", Ask = " + ( String)Ask
+ ", Spread = " + DoubleToStr(Spread, Digits)
+ ", Zeit = '" + TimeToString(TimeLocal(), TIME_DATE|TIME_SECONDS ) + "' where AccountNumber = "
+ (string)Konto; // + "' und 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, "
+ "Symbol char(20), Bid double, Ask double, Spread double,"
+ "Memo char(50), "
+ "Zeit datetime) ENGINE=MEMORY DEFAULT CHARSET=utf8 ";
MySqlExecute(DB, Query);
Query = "INSERT INTO " + symbol + "(AccountNumber, Symbol, Bid, Ask, Spread. Memo, Zeit) VALUES ("
+ (string)account + ", '" + symbol + "', "+(string)Bid+", "+ (string)Ask + ", "
+ DoubleToStr(spread, Ziffern)
+ ", '" + (string)Kontofirma()
+ "', \'"+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 int NOT NULL AUTO_INCREMENT PRIMARY KEY, AccountNumber int, "
+ "Symbol char(20), Bid double, Ask double, Spread double,"
+ "Memo char(50), "
+ "Zeit datetime) ENGINE=MEMORY DEFAULT CHARSET= utf8 ";
MySqlExecute(DB, Query);
}
}
MySqlCursorClose(Cursor); // NIEMALS VERGESSEN, den CURSOR ZU SCHLIESSEN !!!!
}
}
}
//+------------------------------------------------------------------+

Ich habe drei DB-Verbindungen verwendet, aber ich habe dieselbe DB verwendet. Ist es notwendig, eine neue DB für jede neue Datenbank-CRUD zu erstellen?


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