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

 
Eugeniy Lugovoy:

刚刚检查了 MT4 版本 890 x32。一切正常。

运行测试脚本的日志:

各位,请说明

1.什么操作会出现"读取访问违规"?

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

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

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

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

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

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

我使用的是 MT4 (950)。我从文章所附的档案中提取了文件。MySQL-001 EURUSD,M1: MQLMySQL v2.0 Demo 版权所有 © 2014, FxCodex Laboratory。

它无法从配置文件中读取数据。

 
Sergey Deynego:

我使用 MT4 (950)。我从文章所附的档案中提取了文件。MySQL-001 EURUSD,M1: MQLMySQL v2.0 Demo 版权所有 © 2014, FxCodex Laboratory。

它无法从配置文件中读取数据。

是的,v2.0 已经过时。我已在文章讨论中发布了更新版本。

我现在附上它。

MQLMySQL v2.2 - 适用于 x64 和 x86 的 DLL项目 源代码

试试这个。它似乎是最新版本。

附加的文件:
MQLMySQL_v2.2.zip  4801 kb
MQL4_x32.zip  1073 kb
MQL5_x32.zip  1073 kb
MQL5_x64.zip  1076 kb
 
Eugeniy Lugovoy:

根据我从您的日志中看到的错误: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");

我按照您的建议输入了表名和MySqlExecute(DB, "USE mt4") 命令,但还是收到了错误信息:

0 12:51:40.534 脚本 MySQL-002new EURUSD,M1: 载入成功

0 12:51:40.549 MySQL-002new EURUSD,M1: 已初始化

0 12:51:40.549 MySQL-002new EURUSD,M1:MQLMySQL v2.0 演示 Copyright © 2014, FxCodex Laboratory

0 12:51:40.549 MySQL-002new EURUSD,M1: Host:, User: , Database:

0 12:51:40.549 MySQL-002new EURUSD,M1:连接...

0 12:51:40.565 MySQL-002new EURUSD,M1:已连接!DBID#0

0 12:51:40.565 MySQL-002new EURUSD,M1: 表 `test_table` 无法创建。错误:Aucune base n'a n'a s?

0 12:51:40.565 MySQL-002new EURUSD,M1:断开连接。脚本已完成!

0 12:51:40.565 MySQL-002new EURUSD,M1: uninit reason 0

0 12:51:40.565 脚本 MySQL-002new EURUSD,M1:删除

 

你好,尤金尼-卢戈沃伊

非常感谢你的实用项目。

我试图从一个表中读取一个字符串字段,它大约有 3000 个字符,我是这样使用 "MySqlGetFieldAsString "的:


if (Cursor >= 0)

{

Rows = MySqlCursorRows(Cursor);

for (int i=0; i<Rows; i++)

if (MySqlCursorFetchRow(Cursor))

{

Get_Setting = MySqlGetFieldAsString(Cursor, 4);

}

.....

但问题是 Get_String 只返回 1025 个字符、

我需要完整读取该字段。

你能帮我解决这个问题吗?

谢谢

 
FX. MDA7:

你好,尤金尼-卢戈沃伊

非常感谢你的实用项目。

我试图从一个表中读取一个字符串字段,它大约有 3000 个字符,我是这样使用 "MySqlGetFieldAsString "的:


if (Cursor >= 0)

{

Rows = MySqlCursorRows(Cursor);

for (int i=0; i<Rows; i++)

if (MySqlCursorFetchRow(Cursor))

{

Get_Setting = MySqlGetFieldAsString(Cursor, 4);

}

.....

但问题是 Get_String 只返回 1025 个字符、

我需要完整读取该字段。

你能帮我解决这个问题吗?

问题

是的,我将字符数据的最大长度设置为 1024 个字符。我可以更改这个限制并重建 DLL。顺便问一下,您在数据库中使用的列的数据类型是什么?
 
peg:

我按照您的建议输入了表名和MySqlExecute(DB, "USE mt4") 命令,但仍收到错误信息:

0 12:51:40.534 脚本 MySQL-002new EURUSD,M1: 载入成功

0 12:51:40.549 MySQL-002new EURUSD,M1: 已初始化

0 12:51:40.549 MySQL-002new EURUSD,M1:MQLMySQL v2.0 演示 Copyright © 2014, FxCodex Laboratory

0 12:51:40.549 MySQL-002new EURUSD,M1: Host:, User: , Database:

0 12:51:40.549 MySQL-002new EURUSD,M1:连接...

0 12:51:40.565 MySQL-002new EURUSD,M1:已连接!DBID#0

0 12:51:40.565 MySQL-002new EURUSD,M1: 表 `test_table` 无法创建。错误:Aucune base n'a n'a s?

0 12:51:40.565 MySQL-002new EURUSD,M1:断开连接。脚本已完成!

0 12:51:40.565 MySQL-002new EURUSD,M1: uninit reason 0

0 12:51:40.565 脚本 MySQL-002new EURUSD,M1: 删除

为什么版本"MQLMySQL v2.0"?
 

出色!

使用 MQL5 为 MQL4 生成数据。

一切都运行得很好,除了我必须去掉查询命令中 tablename 周围的单引号

Query ="SELECT Symbol,Composite,Pattern FROM summarytable";

工作正常

 
Ingvar Engelbrecht:

出色!

使用 MQL5 为 MQL4 生成数据。

一切都运行得很好,除了我必须去掉查询命令中 tablename 周围的单引号

Query ="SELECT Symbol,Composite,Pattern FROM summarytable";

运行正常

是的,如果不打算用大/小写(mysql 区分大小写)和特殊符号命名表,可以不加引号。顺便说一下,不是单引号"'",而是"`"。

所以你的查询也可以是Query ="SELECT `Symbol`,`Composite`,`Pattern` FROM `summarytable`";

如果您想将列命名为Symbol,而不是 symbol SYMBOL

 

你好,尤金尼、

感谢您的模块,非常有帮助。您能帮我添加获取字段名称的函数 吗?

 

how are you !

system win10 64x, Unable to connect to the database ,can you help me ?