記事"MQL5 (MQL4)から MySQL データベースにアクセスする方法"についてのディスカッション - ページ 24

 
キャッシュ_sha2_passwordのサポートについてはどうですか?それともmysql_native_passwordをインストールすればいいのでしょうか?
 
Dmitri Custurov:
キャッシュ_sha2_passwordのサポートについてはどうですか?それともmysql_native_passwordをインストールするだけですか?

このソリューションで本当にsha2のサポートが必要な人はいるのでしょうか?

では、データベースサーバーはローカルにあるわけでも、vpn下にあるわけでもないのですね?

 

エウゲニー・ルゴヴォイ、ご苦労様!

現在のバージョンの実装では、(AUTO_INCREMENTカラムを持つテーブルの)INSERT操作後に "LAST_INSERT_ID "を取得する方法はありますか?

よろしくお願いします。)
 
arsenico42:

エウゲニー・ルゴヴォイ、ご苦労様!

現在のバージョンの実装では、(AUTO_INCREMENTカラムを持つテーブルの)INSERT操作後に "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側でこれらを組み合わせて関数にすることができます。

あくまで実システムでの例です。

 
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を実行していますか?

助けていただけますか?

ありがとうございました!

カーマイン・マローネ

こんにちは、カーマイン。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]

"Cannot call 'ReadIni', '..﹑libraries﹑MQLMySQL.dll'がロードされていません"
 
MARCOS DALCIN ALVES DINIZ:

エウゲニィ・ルゴヴォイ、まずはコミュニティへの貢献に感謝するよ。


私はここで立ち往生しています:

"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 ◆D0E8209F77CF37AD8BF550E51FF075Agent-127.0.0.1-3000 ◆MQL5 ◆libraries" にあることを確認してください。

TesterモードでMQLプログラムを実行している場合、libsへのパスが異なることがわかります(UACのため)。

 

複数挿入エラー

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\');";
      

複数ステートメントのエラー:MySQLサーバーのバージョンに対応するマニュアルを参照してください



 
SQLコマンドの変更に対応していますか?
 
Yu Zhang:

マルチインサートがエラーになる。

複数ステートメントのエラー:MySQLサーバーのバージョンに対応するマニュアルを参照してください。



データベース接続の開始時に複数ステートメントクライアントフラグが設定されていることを確認してください。

int ClientFlag = CLIENT_MULTI_STATEMENTS; // マルチステートメント・フラグの設定
int DB; 

DB = MySqlConnect(Host, User, Password, Database, Port, Socket, ClientFlag); // データベースへの接続