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

 
Pavel Kolchin:

这意味着什么?

当执行我这一行的代码时。

if(DB==-1){DB=MySqlConnect(Host, User, Password, Database, Port, Socket, ClientFlag);}

res = MySqlCursorOpen(DB, "SELECT id, account, symbol FROM `current` WHERE account="+account);

在 MQL 中,所有字符串都是 Unicode 字符串,而你传递的是 ANSI 字符串。

这就是 dllka 崩溃的原因。

 
MetaQuotes Software Corp.:

在 MQL 中,所有字符串都是 Unicode 字符串,而您传递的是 ANSI 字符串。

这就是 dll 崩溃的原因。

如果我删除条件,一切都能正常工作,总的来说,你可以用不同的方法重做,我只是不明白为什么会崩溃。

//if(DB==-1){

DB=MySqlConnect(Host, User, Password, Database, Port, Socket, ClientFlag);

//}

res = MySqlCursorOpen(DB, "SELECT id, account, symbol FROM `current` WHERE account="+account);

 
MetaQuotes Software Corp.:

在 MQL 中,所有字符串都是 Unicode 字符串,而您传递的是 ANSI 字符串。

这就是 dll 崩溃的原因。

在 DLL 中进行重新编码
 
Pavel Kolchin:

如果我删除条件,一切正常,一般来说,你可以用不同的方法重做,只是不明白为什么会崩溃。

//if(DB==-1){

DB=MySqlConnect(Host, User, Password, Database, Port, Socket, ClientFlag);

//}

res = MySqlCursorOpen(DB, "SELECT id, account, symbol FROM `current` WHERE account="+account);

这段代码之前有连接吗?在条件之前,DB 等于多少?如果 DB 变量没有初始化,可能就是因为这个原因。

在最后一个示例中,您正常打开了与数据库的连接,因此游标也能正常工作。

DLL 附带的脚本是否有效?
 

尤金,你好!

感谢您提供的脚本。我决定在我的项目 中使用它。但在测试你附在项目中的脚本时,我发现了一个不清楚的错误。ReadIni 不工作。也许我做错了什么,但它总是从 ini 返回空值。原因可能是什么?我怀疑它没有在指定路径上找到文件,但我检查了不同的目录,一切都正确无误。

如果我直接在代码中为连接指定数据,则一切正常。

我使用的是 mt4。
 
还有一个问题:俄文文本插入到了 karakaziaby 中。当然,我知道 dll 正在重新编码,但我的数据库是 UTF-8。怎样才能插入可读的俄文文本?
 
Anton Gaisin:

尤金,你好!

感谢您提供的脚本。我决定在我的项目中使用它。但在测试你附在项目中的脚本阶段,我发现了一个不清楚的错误。ReadIni 不工作。也许我做错了什么,但它总是从 ini 返回空值。原因可能是什么?我怀疑它没有在指定路径上找到文件,但我检查了不同的目录,一切都正确无误。

如果我直接在代码中为连接指定数据,则一切正常。

我使用的是 mt4。

你应该检查路径...UAC 很可能会有影响。你设置的 INI 路径是什么?终端目录还是数据?

 
Anton Gaisin:
还有一个问题:俄文文本插入到了 karakaziaby 中。当然,我知道 dll 正在重新编码,但我的数据库是 UTF-8。我应该怎么做才能插入可读的俄文文本呢......?

是的,ASCII 转换正在进行中,中国同事对此也有评论。一旦我有时间,我会尽快解决这个问题。

 
Eugeniy Lugovoy:

您需要检查路径...UAC 可能会影响它。你为 INI 设置的路径是什么?终端目录还是数据?

你的档案中有一些示例......在这些示例中,我保留了所有内容。我只是修改了 INI。

问题解决了。我自己也很蠢。之前,MT4 文件夹和数据文件夹是放在一起的。现在,数据文件夹存储在 Windows 的一个特殊区域。现在,使用TerminalInfoString(TERMINAL_DATA_PATH) 而不是 TerminalPath() 来设置路径是正确的。

 
Anton Gaisin:

您的档案中有一些示例......在这些示例中,我保留了原来的一切。只是更改了 ini。

问题就解决了。我自己也很蠢。以前,MT4 文件夹和数据文件夹是放在一起的。现在,数据文件夹存储在 Windows 的一个特殊区域。现在,使用 TerminalInfoString(TERMINAL_DATA_PATH) 而不是 TerminalPath() 来设置路径是正确的。

嗯...如果我没记错的话,我已经在最新版本(已在讨论中发布)中修正了它:)

好吧,UTF 问题依然存在,如果我没有过度疲劳的话,我会在本周到周末尝试解决这个问题。