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

 

感谢您的文章!有多少解决方案没有尝试过同样的事情无处不在,如果你不打扰请看看日志,我不能理解什么....

MySQL 服务器:

  • 服务器: localhost via TCP/IP
  • 服务器版本:5.6.10
  • 协议版本:10
  • 用户:root@localhost
  • MySQL 编码:UTF-8 Unicode (utf8 )
  • InnoDB 数据库,UTF8-General-Ci

MT5 版本 1035

操作系统:Win8.1 x64

附加的文件:
log_.txt  19 kb
 

您好。

您使用的是 x64 操作系统,您确定使用的是 64 位版本的动态链接库吗?

它们附在一篇讨论文章中(mqlmysql_for_mql5_x64.zip1264 kb)。

文章中的库仅适用于 x86 操作系统。

顺便问一下,存档中的测试示例能用吗?

<<稍后>>.

这一行令人困惑:添加的测试文件:libraries/MQLMySQL.dll。已加载 89626 字节

x64 文件MQLMySQL.dll 的原始大小= 89600 字节,而不是 89626。

你用的是什么杀毒软件?

 

你好。

我喜欢这个概念。应该会有很大帮助

但我遇到了一些问题。我使用的是 64 位 nd,我下载了它们,并开始编写测试脚本,看看它是如何工作的。

但在 MySQLGetFieldAsxxxxx 中崩溃了

2015.01.09 21:32:09.535 testsql(AUDNZD,H1)000000013F81347A 488BF2 mov rsi, rdx
2015.01.09 21:32:09.535 testsql (AUDNZD,H1)000000013F813476 4883EC20 sub rsp, 0x20
2015.01.09 21:32:09.535 testsql (AUDNZD,H1)000000013F813475 57 push rdi
2015.01.09 21:32:09.535 testsql (AUDNZD,H1)000000013F813470 4889742418 mov [rsp+0x18],rsi
2015.01.09 21:32:09.535 testsql (AUDNZD,H1) Access violation at 0x000000013F8134B3 read to 0x0000000000000001
2015.01.09 21:32:09.535 testsql (AUDNZD,H1) +++++++++++++0
2015.01.09 21:32:09.535 testsql (AUDNZD,H1) 2 row(s) selected.
20152015.01.09 21:32:09.425 testsql (AUDNZD,H1) Connected
2015.01.09 21:31:18.135 testsql (AUDNZD,H1) x 0 y


Sorce:

#include <FXCM\PairsInfo.mqh>
#include <FXCM\MQLMySQL.mqh>

//--- 输入参数
input string   MySQLURL="yyyyyyyyyyyyyy";
input string   MySQLDB = "forex";
input string   MySQLParms = "tradeparms";
input string   MySQLUser="Ingvar";
input string   MySQLPW="xxxxxxxxxxxx";
input int      MySQLPort=3306;
input string   GroupID= "Groupxxx";

PairsInfo prms;

//+------------------------------------------------------------------+
//| 脚本程序启动功能|
//+------------------------------------------------------------------+
void OnStart()
  {
//---
  string SQLString = "";
  string Q;
  string C = ",";
  StringSetCharacter(Q,0,34);
  
  string query;
  int Cursor;
  int DB;
  int rows;
  
  DB = MySqlConnect(MySQLURL, MySQLUser, MySQLPW, MySQLDB, MySQLPort, "0", 0);
  if (DB == -1) 
    {
      Print ("Connection failed! Error: "+MySqlErrorDescription); 
      return;
    }

    Print ("Connected");
    
  // query = "Select * From tradeparms";
    
  // query = "Select * FROM tradeparms WHERE TradeType = 2";
    
    query = "SELECT Pair, TradeType, SetupID FROM tradeparms WHERE TradeType = 2 AND Pair = 'USDJPY'";
     
     
   Cursor = MySqlCursorOpen(DB,query);
   if(Cursor <  0)
    {
      Print("Cursor error");
      return;
    }


   string pair= "x";
   int tradetype = 0;
   string setupid = "y";
   
   rows = MySqlCursorRows(Cursor);
   Print (rows, " row(s) selected.");
   
   for(int i=0;i<rows;i++)
    {
     if (MySqlCursorFetchRow(Cursor))  
       {
        Print("+++++++++++++" + i);
    pair = MySqlGetFieldAsString(Cursor, 0);                    << crashes here.   
   // tradetype = MySqlGetFieldAsInt(游标,1);
   // setupid = MySqlGetFieldAsString(游标,2);
       }
     }  
      
   Print(pair + "  " + DoubleToString(tradetype,0) + "  " + setupid);
   
   MySqlCursorClose(Cursor);
 
  
 } 
 

我把我那台装有 Win32 系统的旧笔记本电脑翻出来,在上面安装了 32 位版本,并用 32 位库和包含编译了相同的源代码。

运行正常。问题出在 64 位版本上

 
ingvar_e:

我把我那台装有 Win32 系统的旧笔记本电脑翻出来,在上面安装了 32 位版本,并用 32 位库和包含编译了相同的源代码。

运行正常。问题出在 64 位版本上

好的,我会检查一下。

终端版本是什么?MT4/MT5?

 
elugovoy:

好的,我会检查一下。

终端版本是什么?MT4/MT5?

终端 MT5 Build 1035 在 W7 64 上运行崩溃

终端 MT5 Build 1035 在 XP 32 上运行正常

非常感谢。我正在开发一个多币种、多方法(类似)EA,目前使用一个输入文件。为了灵活测试不同的输入文件,我正在将其转换为 MySQL

 
ingvar_e:

终端 MT5 Build 1035 在 W7 64 上运行崩溃

终端 MT5 Build 1035 在 XP 32 上运行正常

非常感谢。我正在开发一个多币种、muli 方法(类似)的 EA,目前使用一个输入文件。为了灵活测试不同的输入文件,我正在将其转换为 MySQL。

我已在 x64 操作系统、MT5 1035 版本上进行了测试。您说得完全正确。

我做了一些检查,发现输入到 DLL 的数据运行正常。问题在于从 DLL函数 接收 STRING 数据类型。

此外,我还测试了自己的脚本,这些脚本是用以前的 MT5 x64 版本编译的 - 运行正常。

但在重新编译版本 1035 后,使用相同 DLL 的相同脚本却出现了此类错误。

最后,我认为问题不在于 DLL 或 MQLMySQL 项目,而在于 MT5 x64 编译器。我已就此问题向服务台提交了案例。

谢谢、

尤金

 
ingvar_e:

终端 MT5 Build 1035 在 W7 64 上运行崩溃

终端 MT5 Build 1035 在 XP 32 上运行正常

非常感谢。我正在开发一个多币种、muli 方法(类似)的 EA,目前使用一个输入文件。为了灵活测试不同的输入文件,我正在将其转换为 MySQL。

仅用于测试,您可以使用发布包中包含的我的脚本。

更改 INI 文件中的数据库凭据,然后运行脚本。

尝试重新编译并再次运行。

您会发现,第一次运行时,它们运行正常,但重新编译后,它们会出现与您相同的错误。

问题出现在 MT5 x64 b1035 终端/编译器中

 
elugovoy:

您可以使用我的脚本进行测试,脚本包含在发布软件包中。

更改 INI 文件中的数据库凭据,然后运行脚本。

尝试重新编译并再次运行。

您会发现,第一次运行时它们运行正常,但重新编译后它们会出现与您相同的错误。

问题出现在 MT5 x64 b1035 终端/编译器中

>问题出在 MT5 x64 b1035 中

所以我们被卡住了?

我的旧 32 位笔记本电脑今天死机了。完全死机。

我想知道是否可以在 64 位机器上安装 32 位 windows,这是否真的有帮助。或者在 Windows 7 64 位机器上安装 32 位 MT5/MQL5

稍后:

找到这个 尝试一下。

 
ingvar_e:

>问题出现在 MT5 x64 b1035 中

我们被卡住了?

我的旧 32 位笔记本电脑今天死机了。完全死机了。

我想知道是否可以在 64 位机器上安装 32 位 Windows,这样是否真的有帮助。或者在 Windows 7 64 位机器上安装 32 位 MT5/MQL5

稍后:

找到这个 尝试一下。

  • 要在 64 位操作系统中安装 32 位版本,应使用 /32 密钥启动安装程序。例如 c:\>mt5setup.exe /32。
  • ,SYMBOL_TRADE_TICK_VALUE)

    返回 0;

    也许在 Windows 64 位机器上运行 32 位 MT5 不是个好主意。还有其他故障迹象。下一次尝试是在我的 64 位计算机上安装 32 位操作系统。

    这些弯路总是让你偏离主航线很远:-(

    看来我不得不放弃这个工具,转而使用 MySQL。安装新的 Windows XP 太麻烦了,而且没有 W7 密钥。