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

 
感谢作者,我在本地修改了这个项目,从而可以使用 MySQL 数据库代码页 UTF8 中存储的非英语单词。
 
Amy Liu:
感谢作者,我在本地修改了这个项目,这样我就可以使用 MySQL 数据库代码页 UTF8 中存储的非英语单词了。

嗨,艾米。很好,我没有时间自己做。如果你不介意的话,能否与社区分享一下源代码?

 

大家好!

不幸的是,我没有时间支持这个项目,也没有时间在社区中度过,所以请原谅我没有回答的问题和我的沉默。

但我在这里看到了一些有经验的人,他们可以帮助其他人,这真的很棒。

感谢大家使用我的程序库,扩展其功能 并获得自己的经验。

祝大家项目顺利!


最诚挚的问候

尤金

 
dragossh:

你好,尤金尼-卢戈沃伊、

首先,感谢您抽出时间来做这个项目。

我一直在寻找如何将交易账户中的所有开仓/平仓交易导入/更新到 MySQL 表中(如果可能的话,实时导入/更新)的方法。

非常感谢。

德拉戈斯

你好,Dragos!

当然,您可以使用该库创建 EA,将数据插入 Mysql 数据库并保持更新(接近实时更新)。

请注意,MT4/5 中的平仓订单只有在历史选项卡中列出时,才能以编程方式使用。因此,如果在 "历史记录 "中设置 "最近 3 天 "过滤器,则只能访问在此期间处理的交易。

这并不依赖于这个库,它只是 MQL-MT4 的基础结构。

谢谢、

尤金

 

读取"\MQL4\libraries\MQLMySQL.dll "中 0x000003B0 的访问违规行为

你能告诉我去哪里查吗?

操作系统 win 10, mariadb 5.5.59
 

尤金、

又是了不起的工作,因为这很容易就能实现。

我很好奇,您或其他任何人是否尝试过让它在策略测试仪 上运行?我已经在实时环境中将脚本演进到了一个独立服务器上,一切正常,但在回溯测试环境中却没有任何进展。


br 乔治

 
Eugeniy Lugovoy:

嗨,艾米。很好,我没有时间自己做。那么,如果您不介意的话,能和我们分享一下资料来源吗?

你好,尤金尼、

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

// 返回字段值的字符串表示
// 应在 MySqlCursorFetchRow() 之后调用
// pCursorID - CURSOR IDENTIFIER
// pField - SELECT 列表中字段的编号(从 0 开始) - 0,1,2 等等。
MT4_EXPFUNC wchar_t* __stdcall cMySqlGetRowField(int pCursorID, unsigned int pField)
{
        SCOPE_LOCK_MUTEX(g_mutex.get());
        ClearCursorErrors(pCursorID);
        if ((pCursorID >= 0) && (pCursorID < MAX_CURSORS) && (Cursors[pCursorID].Id!=-1))
        {
                if ((pField >= 0) && (pField < mysql_num_fields(Cursors[pCursorID].RecordSet)))
                {
                        // 预算-缓冲区中宽字节的长度
                        int unicodeLen = MultiByteToWideChar(CP_UTF8, 0, Cursors[pCursorID].CurrentRow[pField], -1, nullptr, 0);
                        if (unicodeLen<=1024)
                        {
                                // 开始向缓冲区转换字节
                                MultiByteToWideChar(CP_UTF8, 0, Cursors[pCursorID].CurrentRow[pField], -1, Cursors[pCursorID].Value, unicodeLen);
                                return(Cursors[pCursorID].Value);
                        }
                        //sprintf_s(Cursors[pCursorID].Value, "%s", Cursors[pCursorID].CurrentRow[pField]);
                        //swprintf(Cursors[pCursorID].Value, 1024, L"%S", Cursors[pCursorID].CurrentRow[pField]);
                        //return (Cursors[pCursorID].Value);
                }
                else
                {
                        Cursors[pCursorID].CursorErrorNumber = -4;
            swprintf(Cursors[pCursorID].CursorErrorDescription, 32, L"Wrong number of field.\x00");
                }
        }
        else
        {
                CursorErrorNumber = -5;
                swprintf(CursorErrorDescription, 32, L"Wrong CURSOR identifier.\x00");
        }
        return (WideNull);
}
 

同事们好,我有一个问题:

当 Expert Advisor 在一个终端上运行时,没有任何问题,但当我在另一个终端上运行相同的 Expert Advisor 时,却不断写入以下错误:

Cursor #0 closing error:-5: Wrong CURSOR identifier.

问题出在哪里?

 
Dmitry Melnichenko:

同事们好,我有个问题:

当 Expert Advisor 在一个终端上运行时,没有任何问题,但当我在另一个终端上运行同一个 Expert Advisor 时,却不断写入这样的错误:

Cursor #0 closing error:-5: Wrong CURSOR identifier.

问题出在哪里?

尝试使用不同的凭据进行连接。即使用 MySQL 的其他登录名/密码。也就是说,创建另一个具有适当数据库权限的登录名。

并在事务模式下工作。


 
Maxim Kuznetsov:

尝试用不同的凭据连接。也就是说,使用 MySQL 的其他登录名/密码。也就是说,在该处另设一个具有适当数据库权限的登录名。

并在事务模式下工作。


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