Обсуждение статьи "Работа с СУБД MySQL из MQL5 (MQL4)" - страница 6

 
elugovoy:

Здравствуйте, какую версию терминала MT5 вы используете?

Какую версию терминала MT5 вы используете?

Пожалуйста, попробуйте последнее обновление библиотек MQLMySQL, прикрепленное здесь.

Я использовал последнюю версию MT4, когда используется только один вызов, все в порядке, но когда используется отправитель отправить данные и использовать приемник получить данные на том же MT4 в одновременно, MT4 выдает ошибку "Access violation read to 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 CODE собирает данные mt4 в таблицу mysql, при использовании в одном mt4 только одного, все нормально, при использовании четырех и более в двух mt4, выводится 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, в этом ли проблема? ENGINE=MEMORY
 
yukaixie:
Я использовал таблицу mysql с памятью, в этом ли проблема? ENGINE=MEMORY
Я изменил тип движка таблицы с memory на Innodb, проблема все еще существует. 2015.04.08 15:31:59.296 Access violation read to 0x00000004 in '. .MQLMySQL.dll'

 
yukaixie:

MQL CODE собирает данные mt4 в таблицу mysql, при использовании в одном mt4 только одного, все нормально, при использовании четырех или более в двух mt4, выводит Access violation read 0x00000002 в ... \MQLMySQL.dll'


MySqlDisconnect(DB);

отключение базы данных необходимо, но это все еще не решает проблему.

 
Можете ли вы предоставить исходный код вашего советника/скрипта?
 
elugovoy:
Можете ли вы предоставить исходный код вашего советника/скрипта?

MQL CODE собирает данные mt4 в таблицу mysql, при использовании в одном mt4 только одного, все нормально, при использовании четырех или более в двух mt4, выводит Access violation read 0x00000002 в ... \MQLMySQL.dll'


Дополнительные файлы:

senddata.mq4 11 kb

sendata.mq4 - это мой загруженный исходный код советника.

 
elugovoy:
Можете ли вы предоставить исходный код вашего советника/скрипта?
//+------------------------------------------------------------------+
//|& nbsp; Database Operation.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"; //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

string 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);
//Alert(symbol).
Query = "SELECT * FROM " + symbol + " where AccountNumber = " + (string)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 = "обновить " + символ + " установить Bid = " + (string)Bid + ", Ask = " + ( string)Ask
+ ", Spread = " + DoubleToStr(spread, Digits)
+ ", Time = '" + TimeToString(TimeLocal(), TIME_DATE|TIME_SECONDS ) + "', где 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, "
+ "Symbol char(20), Bid double, Ask double, Spread double,"
+ "Memo char(50), "
+ "Time datetime) ENGINE=MEMORY DEFAULT CHARSET=utf8 ";
MySqlExecute(DB, Query);
Query = "INSERT INTO " + symbol + "(AccountNumber, Symbol, Bid, Ask, Spread. Memo, Time) VALUES ("
+ (string)account + ", '" + symbol + "', "+ (string)Bid+", "+ (string)Ask + ", "
+ DoubleToStr(spread, Digits)
+ ", '" + (string)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 int NOT NULL AUTO_INCREMENT PRIMARY KEY, AccountNumber int, "
+ "Symbol char(20), Bid double, Ask double, Spread double,"
+ "Memo char(50), "
+ "Time datetime) ENGINE=MEMORY DEFAULT CHARSET= utf8 ";
MySqlExecute(DB, Query);
}
}
MySqlCursorClose(Cursor); // НИКОГДА НЕ ЗАБУДЬТЕ ЗАКРЫТЬ КУРСОР !!!!
}
}
}
//+------------------------------------------------------------------+

Я использовал три DB connect, но я использовал одну и ту же DB, нужно ли создавать новую DB для любой новой базы данных CRUD?


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