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

 
Eugeniy Lugovoy:

Здравствуйте, Джеймс,

В настоящее время я работаю на Upwork только над одним большим проектом. Поэтому сейчас у меня нет много свободного времени. Какие у вас проблемы с либами? Чем я могу вам помочь?

Здравствуйте,

В итоге я разобрался, но все равно спасибо за библиотеку..... Очень полезно!!!

Джеймс
 

Почему после обновления до билда 890 mt4 перестало все работать?

в журнале пишет Access violation read to 0x00000000 in 'D:\MT4\MQL4\libraries\MQLMySQL.dll'

[Удален]  
также интересует ...
 
Itum:
также интересует ...
Ребята, я постараюсь проверить в ближайшие дни.
 
Ждём с нетерпением!
 
alhimik7:
Ждём с нетерпением!

MT4 build 890 x32 только что проверил. Все работает.

Лог запуска тестовых скриптов:

2015.12.05 12:20:09.984 Script MySQL-005 EURUSD,H1: removed
2015.12.05 12:20:09.984 MySQL-005 EURUSD,H1: uninit reason 0
2015.12.05 12:20:09.984 MySQL-005 EURUSD,H1: Disconnected. Script done!
2015.12.05 12:20:09.984 MySQL-005 EURUSD,H1: Passed!
2015.12.05 12:20:09.984 MySQL-005 EURUSD,H1: Closing cursors...
2015.12.05 12:20:09.984 MySQL-005 EURUSD,H1: Cursor 4 was opened.
2015.12.05 12:20:09.984 MySQL-005 EURUSD,H1: Cursor 3 was opened.
2015.12.05 12:20:09.984 MySQL-005 EURUSD,H1: Cursor 2 was opened.
2015.12.05 12:20:09.984 MySQL-005 EURUSD,H1: Cursor 1 was opened.
2015.12.05 12:20:09.984 MySQL-005 EURUSD,H1: Connected! DBID#0
2015.12.05 12:20:09.984 MySQL-005 EURUSD,H1: Connecting...
2015.12.05 12:20:09.984 MySQL-005 EURUSD,H1: Host: 127.0.0.1, User: mt4, Database: mt4
2015.12.05 12:20:09.984 MySQL-005 EURUSD,H1: MQLMySQL v2.2 x32 Copyright © 2014, FxCodex Laboratory
2015.12.05 12:20:09.984 MySQL-005 EURUSD,H1: initialized
2015.12.05 12:20:09.968 Script MySQL-005 EURUSD,H1: loaded successfully
2015.12.05 12:20:04.484 Script MySQL-004 EURUSD,H1: removed
2015.12.05 12:20:04.484 MySQL-004 EURUSD,H1: uninit reason 0
2015.12.05 12:20:04.484 MySQL-004 EURUSD,H1: Disconnected. Script done!
2015.12.05 12:20:04.484 MySQL-004 EURUSD,H1: ROW[3]: id = 4, code = USDJPY, start_time = 2014.01.03 03:00:00
2015.12.05 12:20:04.484 MySQL-004 EURUSD,H1: ROW[2]: id = 3, code = EURJPY, start_time = 2014.01.02 00:02:00
2015.12.05 12:20:04.484 MySQL-004 EURUSD,H1: ROW[1]: id = 1, code = EURUSD, start_time = 2014.01.01 00:00:01
2015.12.05 12:20:04.484 MySQL-004 EURUSD,H1: ROW[0]: id = 123279852, code = ACCOUNT, start_time = 2015.12.05 12:20:00
2015.12.05 12:20:04.484 MySQL-004 EURUSD,H1: Rows affected: 4
2015.12.05 12:20:04.484 MySQL-004 EURUSD,H1: 4 row(s) selected.
2015.12.05 12:20:04.484 MySQL-004 EURUSD,H1: SQL> SELECT id, code, start_date FROM `test_table`
2015.12.05 12:20:04.484 MySQL-004 EURUSD,H1: Connected! DBID#0
2015.12.05 12:20:04.484 MySQL-004 EURUSD,H1: Connecting...
2015.12.05 12:20:04.484 MySQL-004 EURUSD,H1: Host: 127.0.0.1, User: mt4, Database: mt4
2015.12.05 12:20:04.484 MySQL-004 EURUSD,H1: MQLMySQL v2.2 x32 Copyright © 2014, FxCodex Laboratory
2015.12.05 12:20:04.484 MySQL-004 EURUSD,H1: initialized
2015.12.05 12:20:04.484 Script MySQL-004 EURUSD,H1: loaded successfully
2015.12.05 12:20:00.093 Script MySQL-003 EURUSD,H1: removed
2015.12.05 12:20:00.093 MySQL-003 EURUSD,H1: uninit reason 0
2015.12.05 12:20:00.093 MySQL-003 EURUSD,H1: Disconnected. Script done!
2015.12.05 12:20:00.093 MySQL-003 EURUSD,H1: Rows affected: 2
2015.12.05 12:20:00.093 MySQL-003 EURUSD,H1: Succeeded! 2 rows has been updated.
2015.12.05 12:20:00.078 MySQL-003 EURUSD,H1: Rows affected: 1
2015.12.05 12:20:00.078 MySQL-003 EURUSD,H1: Succeeded! 3 rows has been inserted by one query.
2015.12.05 12:20:00.031 MySQL-003 EURUSD,H1: Rows affected: 1
2015.12.05 12:20:00.031 MySQL-003 EURUSD,H1: Succeeded: INSERT INTO `test_table` (id, code, start_date) VALUES (123279852,'ACCOUNT','2015.12.05 12:20:00')
2015.12.05 12:20:00.031 MySQL-003 EURUSD,H1: Table `test_table` created.
2015.12.05 12:19:59.968 MySQL-003 EURUSD,H1: Connected! DBID#0
2015.12.05 12:19:59.953 MySQL-003 EURUSD,H1: Connecting...
2015.12.05 12:19:59.953 MySQL-003 EURUSD,H1: Host: 127.0.0.1, User: mt4, Database: mt4
2015.12.05 12:19:59.953 MySQL-003 EURUSD,H1: MQLMySQL v2.2 x32 Copyright © 2014, FxCodex Laboratory
2015.12.05 12:19:59.953 MySQL-003 EURUSD,H1: initialized
2015.12.05 12:19:59.953 Script MySQL-003 EURUSD,H1: loaded successfully
2015.12.05 12:19:55.531 Script MySQL-002 EURUSD,H1: removed
2015.12.05 12:19:55.531 MySQL-002 EURUSD,H1: uninit reason 0
2015.12.05 12:19:55.531 MySQL-002 EURUSD,H1: Disconnected. Script done!
2015.12.05 12:19:55.531 MySQL-002 EURUSD,H1: Table `test_table` created.
2015.12.05 12:19:55.218 MySQL-002 EURUSD,H1: Connected! DBID#0
2015.12.05 12:19:55.218 MySQL-002 EURUSD,H1: Connecting...
2015.12.05 12:19:55.218 MySQL-002 EURUSD,H1: Host: 127.0.0.1, User: mt4, Database: mt4
2015.12.05 12:19:55.218 MySQL-002 EURUSD,H1: MQLMySQL v2.2 x32 Copyright © 2014, FxCodex Laboratory
2015.12.05 12:19:55.218 MySQL-002 EURUSD,H1: initialized
2015.12.05 12:19:55.218 Script MySQL-002 EURUSD,H1: loaded successfully
2015.12.05 12:19:49.625 Script MySQL-001 EURUSD,H1: removed
2015.12.05 12:19:49.625 MySQL-001 EURUSD,H1: uninit reason 0
2015.12.05 12:19:49.625 MySQL-001 EURUSD,H1: All connections closed. Script done!
2015.12.05 12:19:49.625 MySQL-001 EURUSD,H1: Connected! DBID#2
2015.12.05 12:19:49.625 MySQL-001 EURUSD,H1: Connected! DBID#1
2015.12.05 12:19:49.625 MySQL-001 EURUSD,H1: Connected! DBID#0
2015.12.05 12:19:49.609 MySQL-001 EURUSD,H1: Connecting...
2015.12.05 12:19:49.609 MySQL-001 EURUSD,H1: Host: 127.0.0.1, User: mt4, Database: mt4
2015.12.05 12:19:49.609 MySQL-001 EURUSD,H1: MQLMySQL v2.2 x32 Copyright © 2014, FxCodex Laboratory
2015.12.05 12:19:49.609 MySQL-001 EURUSD,H1: initialized
2015.12.05 12:19:49.546 Script MySQL-001 EURUSD,H1: loaded successfully

 Ребята, уточните:

1. На какой операции дает "Access violation read" ?

2. При запуске скрипта MySQL-001 какую версию MQLMySQL показывает на вкладке Experts? должно быть: MQLMySQL v2.2 x32 Copyright © 2014, FxCodex Laboratory

3. Какая версия базы MySQL?

4. MySQL используется локально или на удаленном хосте?

5. Под какой операционкой запускаете терминал?

Пожалуйста проверьте и отпишитесь, т.к. у себя не могу воспроизвести ошибку.

Я создам аналогичное окружение и протестирую. 

 

Здравствуйте,

Я пытаюсь подключить Metatrader к Mysql через ваши файлы.
После скачивания и установки я изменил файл "MyConnection", установив в него информацию о моей БД.

И вот в чем проблема:

Сначала все работало нормально, скрипты создавали таблицы внутри БД. Затем я немного изменил код (просто поменял имя таблицы) и удалил таблицу из БД, чтобы скрипт создал новую с нуля, не удаляя предыдущую. И все, что я получил, - это создание столбцов, но без каких-либо данных.
Тогда я решил снова использовать старые скрипты. Тогда я не получил ничего, даже таблица не была создана. С тех пор у меня есть БД, которая остается пустой.

Есть идеи, что могло пойти не так?

Заранее спасибо!

 
peg:

Здравствуйте,

Я пытаюсь подключить Metatrader к Mysql через ваши файлы.
После скачивания и установки я изменил файл "MyConnection", установив в него информацию о моей БД.

И вот в чем проблема:

Сначала все работало нормально, скрипты создавали таблицы внутри БД. Затем я немного изменил код (просто поменял имя таблицы) и удалил таблицу из БД, чтобы скрипт создал новую с нуля, не удаляя предыдущую. И все, что я получил, - это создание столбцов, но без каких-либо данных.
Тогда я решил снова использовать старые скрипты. Тогда я не получил ничего, даже таблица не была создана. С тех пор у меня есть БД, которая остается пустой.

Есть идеи, что могло пойти не так?

Заранее спасибо!

Здравствуйте, Пег,

Для создания таблицы используйте команду SQL CREATE TABLE http://dev.mysql.com/doc/refman/5.7/en/create-table.html.

Для вставки данных используйте SQL-команду INSERT INTO https://dev.mysql.com/doc/refman/5.6/en/insert.html.

Для выполнения таких команд используйте функцию MySqlExecute.

Также вы можете предоставить свой код, и я смогу разобраться в проблеме.

MySQL :: MySQL 5.7 Reference Manual :: 13.1.14 CREATE TABLE Syntax
  • dev.mysql.com
creates a table with the given name. You must have the privilege for the table. Rules for permissible table names are given in Section 9.2, “Schema Object Names”. By default, the table is created in the default database, using the storage engine. An error occurs if the table exists, if there is no default database, or if the database does not...
 
Eugeniy Lugovoy:

Здравствуйте, Пег,

Для создания таблицы используйте SQL-команду CREATE TABLE http://dev.mysql.com/doc/refman/5.7/en/create-table.html.

Для вставки данных используйте SQL-команду INSERT INTO https://dev.mysql.com/doc/refman/5.6/en/insert.html.

Для выполнения таких команд используйте функцию MySqlExecute.

Также вы можете предоставить свой код, и я смогу разобраться в проблеме.

Здравствуйте Евгений,

Спасибо за ссылки.

Сначала я использовал ваш код для подключения к моей базе данных (я использовал mySql Server, если это полезно). И я смог увидеть таблицу. Затем я изменил имя таблицы в вашем MySQL-002 Script (как вы можете видеть ниже) и думал, что это, казалось бы, работает, но он не создал мою таблицу. Теперь я использую WampServer и получаю:

0 11:09:37.579 Скрипт MySQL-002 EURUSD,H1: загружен успешно

0 11:09:37.730 Скрипт MySQL-002 EURUSD,H1: инициализирован

0 11:09:37.730 MySQL-002 EURUSD,H1: MQLMySQL v2.0 Demo Copyright © 2014, FxCodex Laboratory

0 11:09:37.730 MySQL-002 EURUSD,H1: Host: , User: , Database:

0 11:09:37.730 MySQL-002 EURUSD,H1: Connecting...

0 11:09:37.741 MySQL-002 EURUSD,H1: Подключено! DBID#0

0 11:09:37.742 MySQL-002 EURUSD,H1: Таблица `table` не может быть создана. Error: Aucune base n'a ?t? s?lectionn?e

0 11:09:37.742 MySQL-002 EURUSD,H1: Отключено. Скрипт выполнен!

0 11:09:37.742 MySQL-002 EURUSD,H1: uninit reason 0

0 11:09:37.743 Скрипт MySQL-002 EURUSD,H1: удален

//+------------------------------------------------------------------+
//|MySQL-002.mq4 |
//|Copyright 2014, Евгений Луговой |
//|http://www.fxcodexlab.com |
//| Создание таблицы (DEMO)|
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, Eugene Lugovoy."
#property link      "http://www.fxcodexlab.com"
#property version   "1.00"
#property strict

#include <MQLMySQL.mqh>

string INI;
//+------------------------------------------------------------------+
//| Функция запуска программы сценария|
//+------------------------------------------------------------------+
void OnStart()
{
 string Host, User, Password, Database, Socket; // учетные данные базы данных
 int Port,ClientFlag;
 int DB; // идентификатор базы данных
 
 Print (MySqlVersion());

 INI = TerminalPath()+"\\MQL4\\Scripts\\MyConnection.ini";
 
 // чтение учетных данных базы данных из INI-файла
 Host = ReadIni(INI, "MYSQL", "Host");
 User = ReadIni(INI, "MYSQL", "User");
 Password = ReadIni(INI, "MYSQL", "Password");
 Database = ReadIni(INI, "MYSQL", "Database");
 Port     = StrToInteger(ReadIni(INI, "MYSQL", "Port"));
 Socket   = ReadIni(INI, "MYSQL", "Socket");
 ClientFlag = StrToInteger(ReadIni(INI, "MYSQL", "ClientFlag"));  

 Print ("Host: ",Host, ", User: ", User, ", Database: ",Database);
 
 // откройте соединение с базой данных
 Print ("Connecting...");
 
 DB = MySqlConnect(Host, User, Password, Database, Port, Socket, ClientFlag);
 
 if (DB == -1) { Print ("Connection failed! Error: "+MySqlErrorDescription); } else { Print ("Connected! DBID#",DB);}
 
 string Query;
 Query = "DROP TABLE IF EXISTS `test`";
 MySqlExecute(DB, Query);
 
 Query = "CREATE TABLE `test` (id int, code varchar(50), start_date datetime)";
 if (MySqlExecute(DB, Query))
    {
     Print ("Table `test` created.");
    }
 else
    {
     Print ("Table `test` cannot be created. Error: ", MySqlErrorDescription);
    }
 
 MySqlDisconnect(DB);
 Print ("Disconnected. Script done!");
}
//+------------------------------------------------------------------+
 
peg:

Здравствуйте Евгений,

Спасибо за ссылки.

Сначала я использовал ваш код для подключения к моей базе данных (я использовал mySql Server, если это может быть полезно). И я смог увидеть таблицу. Затем я изменил имя таблицы в вашем MySQL-002 Script (как вы можете видеть ниже) и думал, что это, казалось бы, работает, но он не создал мою таблицу. Теперь я использую WampServer и получаю:

0 11:09:37.579 Скрипт MySQL-002 EURUSD,H1: загружен успешно

0 11:09:37.730 Скрипт MySQL-002 EURUSD,H1: инициализирован

0 11:09:37.730 MySQL-002 EURUSD,H1: MQLMySQL v2.0 Demo Copyright © 2014, FxCodex Laboratory

0 11:09:37.730 MySQL-002 EURUSD,H1: Host: , User: , Database:

0 11:09:37.730 MySQL-002 EURUSD,H1: Connecting...

0 11:09:37.741 MySQL-002 EURUSD,H1: Подключено! DBID#0

0 11:09:37.742 MySQL-002 EURUSD,H1: Таблица `table` не может быть создана. Error: Aucune base n'a ?t? s?lectionn?e

0 11:09:37.742 MySQL-002 EURUSD,H1: Отключено. Скрипт выполнен!

0 11:09:37.742 MySQL-002 EURUSD,H1: uninit reason 0

0 11:09:37.743 Скрипт MySQL-002 EURUSD,H1: удален

Судя по ошибке, которую я вижу из вашего лога: 0 11:09:37.742 MySQL-002 EURUSD,H1: Таблица `table` не может быть создана.

Вы используете имя "table", которое является ключевым словом базы данных mysql и не может быть использовано в качестве имени таблицы, попробуйте изменить его, например, на "table1", чтобы проверить, работает ли это.

Или, возможно, база данных не была выбрана или не была установлена. Вы можете выполнить команду "USE database_name" сразу после подключения, где database_name - это имя вашей базы данных.

Например, если моя база данных - "mysql":

DB = MySqlConnect(Host, User, Password, Database, Port, Socket, ClientFlag);

if (DB ==-1) { Print ("Connection failed! Error: "+MySqlErrorDescription); } else { Print ("Connected! DBID#",DB);}

MySqlExecute(DB, "USE mysql");