文章 "如何从 MQL5 (MQL4) 访问 MySQL 数据库" - 页 8

 
Eugeniy Lugovoy:

你好,詹姆斯、

我现在只在 Upwork 做一个大项目。所以,现在没有什么空闲时间。你在程序库方面有什么问题?我能帮上什么忙?

您好、

我最后还是想通了,不过还是要感谢你提供的库....。非常有用

詹姆斯
 

为什么升级到 890 版 mt4 后一切都停止工作了?

日志显示在'D:\MT4\MQL4\libraries\MQLMySQL.dll'中读取到 0x00000000 的访问违规。

[删除]  
还对......
 
Itum:
还对......
伙计们,我会试着在接下来的几天里检查一下。
 
期待它的到来!
 
alhimik7:
期待已久!

刚刚检查了 MT4 版本 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.什么操作会出现"读取访问违规"?

2.运行 MySQL-001 脚本时,专家选项卡上显示的 MQLMySQL 版本是什么? 应该是:MQLMySQL v2.2 x32 Copyright © 2014, FxCodex Laboratory

3.MySQL 数据库是什么版本?

4. MySQL 是在本地使用还是在远程主机上使用?

5. 在哪个操作系统下运行终端

请检查并反馈,因为我无法重现错误。

我将创建一个类似的环境并进行测试。

 

您好、

我正试图通过您的文件将 Metatrader 连接到 Mysql。
下载和安装后,我修改了 "MyConnection "文件,设置了我的数据库信息。

问题来了:

起初,一切运行正常;脚本在数据库中创建表格。然后,我在代码中做了一点改动(只是更改了表名),并从数据库中删除了表,这样脚本就能从头开始创建一个新表,而不会删除之前的表。结果只是创建了列,却没有任何数据。
于是我决定再次使用旧脚本。结果一无所获,甚至连一个表都没有创建。从那以后,我的数据库就一直是空的。

有什么办法可以解决这个问题吗?

在此先表示感谢!

 
peg:

您好、

我正试图通过您的文件将 Metatrader 连接到 Mysql。
下载和安装后,我修改了 "MyConnection "文件,设置了我的数据库信息。

问题来了:

起初,一切运行正常;脚本在数据库中创建表格。然后,我在代码中做了一点改动(只是更改了表名),并从数据库中删除了表,这样脚本就能从头开始创建一个新表,而不会删除之前的表。结果只是创建了列,却没有任何数据。
于是我决定再次使用旧脚本。结果一无所获,甚至连一个表都没有创建。从那以后,我的数据库就一直是空的。

有什么办法可以解决这个问题吗?

在此先表示感谢!

你好,佩格、

要创建表格,请使用 SQL 命令 CREATE TABLEhttp://dev.mysql.com/doc/refman/5.7/en/create-table.html

要插入数据,请使用 SQL 命令 INSERT INTOhttps://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:

你好,Peg、

要创建表格,请使用 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 脚本中更改了表名(如下所示),虽然似乎起了作用,但却无法创建表格。现在我使用 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` 无法创建。错误:Aucune base n'a n'a s?

0 11:09:37.742 MySQL-002 EURUSD,H1: Disconnected.脚本已完成!

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

0 11:09:37.743 脚本 MySQL-002 EURUSD,H1:删除

//+------------------------------------------------------------------+
//|MySQL-002.mq4
//|2014 年,尤金-卢戈沃伊版权所有。
//|http://www.fxcodexlab.com | |
// 创建表格(演示)|
//+------------------------------------------------------------------+
#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 服务器,以防万一)。我可以看到表。然后,我在你的 MySQL-002 脚本中更改了表名(如下所示),虽然似乎起了作用,但却无法创建表格。现在我使用 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` 无法创建。错误:Aucune base n'a n'a s?

0 11:09:37.742 MySQL-002 EURUSD,H1: Disconnected.脚本已完成!

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");