文章 "如何从 MQL5 (MQL4) 访问 MySQL 数据库" - 页 24 1...1718192021222324252627282930 新评论 Dmitri Custurov 2020.05.06 11:33 #231 对缓存_sha2_password 的支持如何?有没有办法解决这个问题,或者我是否应该安装 mysql_native_password? Eugeniy Lugovoy 2020.05.09 09:26 #232 Dmitri Custurov: 对缓存_sha2_password 的支持如何?有什么办法可以解决这个问题,或者直接安装 mysql_native_password? Hy 目前只支持本机。有人真的需要这个解决方案支持 sha2 吗? 您的数据库服务器不在本地,甚至不在 vpn 下? arsenico42 2020.05.17 16:30 #233 你好 @EugeniyLugovoy,感谢你的辛勤工作!在您当前版本的实现中,是否有办法在 INSERT 操作(在带有 AUTO_INCREMENT 列的表中)后检索 "LAST_INSERT_ID"? 在此先表示感谢,祝您愉快 :) Eugeniy Lugovoy 2020.05.24 10:12 #234 arsenico42:你好 @EugeniyLugovoy,感谢你的辛勤工作!在您当前版本的实现中,是否有办法在 INSERT 操作(在带有 AUTO_INCREMENT 列的表中)后检索 "LAST_INSERT_ID"? 在此先表示感谢,祝您愉快 :) 您好 arsenico42,您可以尝试在一个查询中进行插入操作,然后在另一个查询中选择 LAST_INSERT_ID,但我不推荐这种方法,因为 LAST_INSERT_ID 是返回全局数据库变量的函数,在您最初插入操作和选择 LAST_INSERT_ID 之间的另一个插入操作(来自另一个用户,同时运行)会影响 LAST_INSERT_ID 的值。 这并不取决于库,而是 mysql/mariadb 的工作方式。 不过,我可以建议你在数据库侧创建一个函数,插入所需的值,选择 LAST_INSERT_ID,并将此 ID 作为函数值返回: CREATE FUNCTION `import_funds_add`( `p_file_name` varchar(64), `p_full_path` varchar(2000), `p_status` VARCHAR(10), `p_error` VARCHAR(2000) ) RETURNS bigint(20) LANGUAGE SQL NOT DETERMINISTIC MODIFIES SQL DATA BEGIN declare id bigint; INSERT INTO import_funds(`file_name`, `full_path`, `status`, `error`, `creation_date`) VALUES (p_file_name, p_full_path, p_status, p_error, now()); SELECT LAST_INSERT_ID() INTO id; RETURN(id); END;; 在 MQL 中,您必须打开游标进行查询: qry="SELECT import_funds_add('bonuses.csv','c:\\broker imports\\XXX-FX','NEW','No errors') as last_id"; 然后从通常的游标中获取值并关闭游标。 因此,与其在 MQL 中分别使用这些命令,还不如在 DB 端将它们合并到函数中。 这只是实际系统中的一个例子。 Eugeniy Lugovoy 2020.05.27 13:08 #235 Carmine Marrone:你好,埃卢戈沃伊很棒的文章和很棒的图书馆。我试图在 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,你可以从 github 上的源代码下载 x64 版本。 https://github.com/elugovoy/MQLMySQL-Project/tree/master/MQLMySQL/x64/Release MARCOS DALCIN ALVES DINIZ 2020.05.29 09:11 #236 嘿 @Eugeniy Lugovoy,首先感谢你为社区做出的贡献。 我卡在这里了: "Cannot load 'C:\Users\Admin\AppData\Roaming\MetaQuotes\Tester\D0E8209F77C8CF37AD8BF550E51FF075\Agent-127.0.0.1-3000\MQL5\libraries\MQLMySQL.dll'" [126] "Cannot call 'ReadIni', '..\libraries\MQLMySQL.dll'没有加载" Eugeniy Lugovoy 2020.05.29 10:17 #237 MARCOS DALCIN ALVES DINIZ:嘿 @Eugeniy Lugovoy,首先感谢你为社区做出的所有贡献 我卡在这里了: "Cannot load 'C:\Users\Admin\AppData\Roaming\MetaQuotes\Tester\D0E8209F77C8CF37AD8BF550E51FF075\Agent-127.0.0.1-3000\MQL5\libraries\MQLMySQL.dll'" [126]"Cannot call 'ReadIni', '..\libraries\MQLMySQL.dll'没有加载" 确保你的 MQLMySQL.dll 和 MQLMySQL.def 文件位于 "C:\Users\Admin\AppData\Roaming\MetaQuotes\Tester\D0E8209F77C8CF37AD8BF550E51FF075\Agent-127.0.0.1-3000\MQL5\libraries\" 文件夹中。 正如你所看到的,如果你在 Tester 模式下运行 MQL 程序,通向 libs 的路径会有所不同(因为 UAC 的原因) Yu Zhang 2020.06.02 11:49 #238 多重插入时出错。 Query = "INSERT INTO `test_table` (id, code, start_date) VALUES (1,\'EURUSD\',\'2014.01.01 00:00:01\');"; Query = Query + "INSERT INTO `test_table` (id, code, start_date) VALUES (2,\'EURJPY\',\'2014.01.02 00:02:00\');"; Query = Query + "INSERT INTO `test_table` (id, code, start_date) VALUES (3,\'USDJPY\',\'2014.01.03 03:00:00\');"; 多语句错误:您的 SQL 语法有误;请查看 与您的 MySQL 服务器版本相对应的手册,了解附近使用的正确语法 ... Yu Zhang 2020.06.02 15:59 #239 它支持修改 sql 命令吗? Eugeniy Lugovoy 2020.06.05 11:30 #240 Yu Zhang:多重插入出错。多语句错误:您的 SQL 语法有误;请查看与您的 MySQL 服务器版本相对应的手册,了解附近使用的正确语法 ... 确保在打开数据库连接时设置了多语句客户端标志。 int ClientFlag = CLIENT_MULTI_STATEMENTS; // 设置多语句标志 int DB; DB = MySqlConnect(Host, User, Password, Database, Port, Socket, ClientFlag); // 连接到数据库 1...1718192021222324252627282930 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
对缓存_sha2_password 的支持如何?有什么办法可以解决这个问题,或者直接安装 mysql_native_password?
Hy 目前只支持本机。有人真的需要这个解决方案支持 sha2 吗?
您的数据库服务器不在本地,甚至不在 vpn 下?
你好 @EugeniyLugovoy,感谢你的辛勤工作!
在您当前版本的实现中,是否有办法在 INSERT 操作(在带有 AUTO_INCREMENT 列的表中)后检索 "LAST_INSERT_ID"?
在此先表示感谢,祝您愉快 :)你好 @EugeniyLugovoy,感谢你的辛勤工作!
在您当前版本的实现中,是否有办法在 INSERT 操作(在带有 AUTO_INCREMENT 列的表中)后检索 "LAST_INSERT_ID"?
在此先表示感谢,祝您愉快 :)您好 arsenico42,您可以尝试在一个查询中进行插入操作,然后在另一个查询中选择 LAST_INSERT_ID,但我不推荐这种方法,因为 LAST_INSERT_ID 是返回全局数据库变量的函数,在您最初插入操作和选择 LAST_INSERT_ID 之间的另一个插入操作(来自另一个用户,同时运行)会影响 LAST_INSERT_ID 的值。
这并不取决于库,而是 mysql/mariadb 的工作方式。
不过,我可以建议你在数据库侧创建一个函数,插入所需的值,选择 LAST_INSERT_ID,并将此 ID 作为函数值返回:
在 MQL 中,您必须打开游标进行查询:
qry="SELECT import_funds_add('bonuses.csv','c:\\broker imports\\XXX-FX','NEW','No errors') as last_id";然后从通常的游标中获取值并关闭游标。
因此,与其在 MQL 中分别使用这些命令,还不如在 DB 端将它们合并到函数中。
这只是实际系统中的一个例子。
你好,埃卢戈沃伊
很棒的文章和很棒的图书馆。
我试图在 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,你可以从 github 上的源代码下载 x64 版本。
https://github.com/elugovoy/MQLMySQL-Project/tree/master/MQLMySQL/x64/Release
嘿 @Eugeniy Lugovoy,首先感谢你为社区做出的贡献。
我卡在这里了:
"Cannot load 'C:\Users\Admin\AppData\Roaming\MetaQuotes\Tester\D0E8209F77C8CF37AD8BF550E51FF075\Agent-127.0.0.1-3000\MQL5\libraries\MQLMySQL.dll'" [126]
嘿 @Eugeniy Lugovoy,首先感谢你为社区做出的所有贡献
我卡在这里了:
"Cannot load 'C:\Users\Admin\AppData\Roaming\MetaQuotes\Tester\D0E8209F77C8CF37AD8BF550E51FF075\Agent-127.0.0.1-3000\MQL5\libraries\MQLMySQL.dll'" [126]
确保你的 MQLMySQL.dll 和 MQLMySQL.def 文件位于 "C:\Users\Admin\AppData\Roaming\MetaQuotes\Tester\D0E8209F77C8CF37AD8BF550E51FF075\Agent-127.0.0.1-3000\MQL5\libraries\" 文件夹中。
正如你所看到的,如果你在 Tester 模式下运行 MQL 程序,通向 libs 的路径会有所不同(因为 UAC 的原因)
多重插入时出错。
多语句错误:您的 SQL 语法有误;请查看 与您的 MySQL 服务器版本相对应的手册,了解附近使用的正确语法 ...
多重插入出错。
多语句错误:您的 SQL 语法有误;请查看与您的 MySQL 服务器版本相对应的手册,了解附近使用的正确语法 ...
确保在打开数据库连接时设置了多语句客户端标志。