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

 

谢谢你的新方法!我尝试过不同的解决方案,但这个看起来是目前最好的。我在您的库中做了一个小补充,使用 mysql_num_fields 返回 SELECT 查询的字段数,这样我就知道在 MQL 端需要处理和返回多少字段了。再次感谢你将这些信息整合在一起,真的很有帮助

MQL 代码:

int fields = MySqlNumFields(cursor);
for (int j=0; j<fields;j++)
{
    data[j] = MySqlGetFieldAsString(cursor, j);
}
 
sokramm:

谢谢你的新方法!我尝试过不同的解决方案,但这个看起来是目前最好的。我在您的库中做了一个小补充,使用 mysql_num_fields 返回 SELECT 查询的字段数,这样我就知道在 MQL 端需要处理和返回多少字段了。再次感谢你把这些信息整合在一起,真的很有帮助!"!

感谢您的赞誉。这是一个基本解决方案,它保留了我实际使用的一般功能

在开发这个解决方案的过程中,我遵循了以下原则:稳健、易于学习、使用简单、支持最少。

当然,您也可以根据自己的项目需要更改本项目并添加任何附加功能。

祝你好运

尤金

 

朋友们,你们好、

如果你喜欢这个解决方案,并想在实际项目 中使用它(而不只是为了好玩),我有一个更新。

我开始撰写新的文章,介绍如何使用不同的数据库,如 MS SQL Server、MS Access、Oracle、IBM DB/2、PostgreSQL。

该决定将像这篇文章一样强大且易于使用,但我没有时间来完成它。

因此,如果您想支持这个项目,可以通过支付宝为我汇入几美元: e.a.lugovoy@gmail.com

金额多少并不重要,我只是想知道这样的决定是否真的需要完成。

谢谢大家、

尤金

 

你好,EugeniyLugovoy~


我想知道为什么' MySqlGetFieldAsDouble(Cursor, 3);'不能将其值写入 data[i]?


Print("data[i]",data[3]);--always displa 0.0.



for (i=0; i<Rows; i++)
if (MySqlCursorFetchRow(Cursor))

{

double data[] ;

ArrayResize(data,Rows);

data[i]= MySqlGetFieldAsDouble(Cursor, 3);

Print("data[i]",data[3]);
}

Person - schema.org
  • schema.org
PropertyExpected TypeDescription Properties from Person The Global Location Number (GLN, sometimes also referred to as International Location Number or ILN) of the respective organization, person, or place. The GLN is a 13-digit number used to identify parties and physical locations. A count of a specific user interactions...
 
elugovoy:

朋友们,你们好、

如果您喜欢这个解决方案,并在实际项目中尝试使用它(而不只是为了好玩),我有一个更新。

我开始撰写新的文章,介绍如何使用不同的数据库,如 MS SQL Server、MS Access、Oracle、IBM DB/2、PostgreSQL。

该决定将像这篇文章一样强大且易于使用,但我没有时间来完成它。

因此,如果您想支持这个项目,可以通过支付宝为我汇入几美元: e.a.lugovoy@gmail.com

金额多少并不重要,我只是想知道这样的决定是否真的需要完成。

谢谢大家、

Eugene

有时,数组是必要的--例如,我们需要将数据匹配到指定的日期(tick)--这可能与算法有关,用数组比用 MYSQL 更方便。
 
illman:

你好,EugeniyLugovoy~

我想知道为什么'MySqlGetFieldAsDouble(Cursor, 3);'不能将其值写入 data[i]?

Print("data[i]",data[3]);--always displa 0.0.

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

if (MySqlCursorFetchRow(Cursor))

{

double data[] ;

ArrayResize(data,Rows);

data[i]= MySqlGetFieldAsDouble(Cursor, 3);

Print("data[i]",data[3]);
}

您试图在循环中每次定义数组并打印空数组项。

试试这个:

// 我想,在采用这种变通方法之前,行数就已经得到了。
double data[];
ArrayResize(data, Rows);  

for (i=0; i<Rows; i++)
    {
     if (MySqlCursorFetchRow(Cursor))
        {
          data[i]= MySqlGetFieldAsDouble(Cursor, 3);
        }
    }

// 在这里,你将得到已填充的数组 "data"
Print("data[",3,"]",data[3]);

所以,你必须在获取循环之前定义一次数组,然后调整大小,然后编写获取数据的例程。

顺便说一下,MySqlGetFieldAsDouble(Cursor, 3); 中的数字 3 表示 SELECT 列表中的第 4 列,因为数字从 0 开始,即 SELECT Open, High, Low, Close FROM ...表示 0 - Open, 1 - High, 2 - Low 和 3 - Close

希望对您有所帮助。

希望对您有所帮助、

尤金

 
elugovoy:

您试图每次循环定义数组并打印空数组项。

试试这个:

因此,你必须在获取循环数据之前定义一次数组,然后调整大小,再编写获取数据的例程。

顺便说一下,MySqlGetFieldAsDouble(Cursor, 3); 中的数字 3 表示 SELECT 列表中的第 4 列,因为数字从 0 开始,即 SELECT Open, High, Low, Close FROM ...表示 0 - Open, 1 - High, 2 - Low 和 3 - Close

希望对您有所帮助。

希望对您有所帮助、

尤金

Thanks for helping sir ,我已经解决了关于数组的问题。You did a good job on mysql-mql indeed~!

 
对于 MetaTrader5 x64,请使用以下库(附在讨论中):
附加的文件:
 

你好elugovoy

文章很棒,库也很棒。

我正试图在 MT5 下使用您的示例,但却出现了这个错误:

2014.12.15 15:44:16.387 MySQL-001 'C:\Users\....\AppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075\MQL5\libraries\MQLMySQL.dll' is not 64-bit version

你是在 32 位环境下运行 MT5 吗?

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

非常感谢!

Carmine Marrone.

 
carmine.marrone:

你好elugovoy

文章很棒,库也很棒。

我正试图在 MT5 下使用您的示例,但却出现了这个错误:

2014.12.15 15:44:16.387 MySQL-001 'C:\Users\....\AppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075\MQL5\libraries\MQLMySQL.dll' is not 64-bit version

你是在 32 位环境下运行 MT5 吗?

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

非常感谢!

Carmine Marrone.

你好,卡迈恩

上面讨论的问题我已附上 x64 的项目,请查看和/或从本帖下载。

希望对您有所帮助。

谢谢、

尤金

附加的文件: