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

 
Dmitry Melnichenko:

我创建了一个新用户,尝试用他的信息进行连接,但无济于事!

那么这不太可能是 MySQL 或数据库组织的问题,也就是说,EA/脚本或接口库中显然存在某些错误。

您能给我一个能最大限度减少这种情况的例子吗? 这样我就可以演示一个简短的代码,并在论坛主题中找出它的问题所在。

 
Maxim Kuznetsov:

那么不太可能是 MySQL 或数据库组织的问题,也就是说,很明显是 EA/脚本或接口库中的某个错误。

您能举个例子来说明如何尽量减少这种情况吗? 这样您就可以演示一段简短的代码,然后在这里的论坛主题中找出问题所在。

if(connect >= 0)
   {
      string sql = SelectNewOrdersSQL();
      
      int Cursor1 = MySqlCursorOpen(connect, sql);
      
      if(Cursor1 >= 0)
      {
         int Rows = MySqlCursorRows(Cursor1);
         
         for(int i = 0; i < Rows; i++)
         {
            ResetLastError();
            
            if(MySqlCursorFetchRow(Cursor1))
            {
               int ticket = MySqlGetFieldAsInt(Cursor1, 0);
               string s = MySqlGetFieldAsString(Cursor1, 1);
               int order_type = MySqlGetFieldAsInt(Cursor1, 2);
               double lot = MySqlGetFieldAsDouble(Cursor1, 3);
               double open_price = MySqlGetFieldAsDouble(Cursor1, 4);
               
               string symbol = GetSymbol(s);
               
               Print(ticket);
               
               int digits = (int)SymbolInfoInteger(symbol, SYMBOL_DIGITS);
               int open_ticket = -1;
               if((open_ticket = OrderSend(symbol, order_type, NormalizeDouble(lot, 2), NormalizeDouble(open_price, digits), 150, 0, 0, (string)ticket)) <= 0)
               {
                  Print(symbol, ": 开仓失败。错误", GetLastError());
               }
               else
               {
                  MySqlExecute(connect, SqlModifyClient(ticket, open_ticket));
               }
            }
         }
         
         MySqlCursorClose(Cursor1);
      }
   }
string SelectNewOrdersSQL()
{
   string res = "SELECT Ticket, Symbol, OrderType, Lot, OpenPrice, StopLoss, TakeProfit ";
   res += "FROM orders (WHERE Client2 = 0 AND HistoryMaster = 0 AND Account = " + (string)MasterAccount;
   res += " AND Magic = " + (string)MasterMagic + ")";
   
   return res;
}
 
您使用的是 MQL4 还是 5?
 
Maxim Kuznetsov:
您使用的是 MQL4 还是 5?
MQL4
 
Dmitry Melnichenko:
MQL4
只有在关闭游标时才会出错,也就是说,所有记录都是正常调出的,但最后却出现了这样的错误?
 
Maxim Kuznetsov:
只有在关闭游标时才会出错,也就是说,所有记录都是正常调出的,但最后却出现了这样的错误?
是的,它写入了所选行的数量(打印),但在关闭游标时却写入了这个错误。
 
Amy Liu:

你好,尤金尼、

抱歉回复晚了。以下是我对您的代码所做的修改。我只是修改了一个函数 cMySqlGetRowField,使其使用 MultiByteToWideChar。为便于比较,原始代码已作注释。

谢谢你们的帮助。我尝试了您的代码,但不要忘了包括宽字符头,否则将无法工作。

#include <wchar.h>



 

老师你好,我用的是mt4软件,本地的win10系统使用ea连接mysql都可以正常使用,但是放到win2008服务器就不行,一直提示'..\libraries\MQLMySQL.dll' is not loaded...这样的错误,

我在上面把各个版本包括mt4,mt5,64位,32位的都下载了,但都还是用不了。请教一下该怎么办?

 

你好,我已经在库文件夹中加载了 dll,但它却报错 " "Cnnot call 'cMySqlVersion', '....\Libraries\MQLMySQL.dll' is not loaded"。

这怎么可能?

 
GreenKobra:

你好,我已经在库文件夹中加载了 dll,但它报告了一个错误 " "Cnnot call 'cMySqlVersion', '....\Libraries\MQLMySQL.dll' is not loaded

这怎么可能?

我遇到了和你一样的问题。

使用 MT5,Windows 10 - 64 位。