記事"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に付属しているスクリプトは動作しますか?
 

ユージン、こんにちは!

スクリプトをありがとう。私のプロジェクトに 導入することにしました。しかし、プロジェクトに添付されたスクリプトをテストしている段階で、1つのバグがあります。ReadIniが機能しないのです。何か間違っているのかもしれませんが、いつもiniから空の値を返します。何が原因なのでしょうか?指定されたパスにファイルが見つからないのではと思うのですが、別のディレクトリからチェックしたところ、すべて正しく配置されていました。

接続用のデータを直接コードに記述すれば、すべてうまくいきます。

私はmt4を使っています。
 
ロシア語のテキストがkarakaziabyに挿入されるのです。もちろんdllが再コード化していることは理解していますが、私のデータベースはUTF-8です。可読性のあるロシア語テキストを挿入するにはどうしたらいいでしょうか?
 
Anton Gaisin:

ユージン、こんにちは!

スクリプトをありがとう。私のプロジェクトに導入することにしました。しかし、プロジェクトに添付されたスクリプトをテストしている段階で、1つのバグがあります。ReadIniが機能しないのです。何か間違っているのかもしれませんが、いつもiniから空の値を返します。何が原因なのでしょうか?指定されたパスにファイルが見つからないのではと思うのですが、別のディレクトリからチェックしたところ、すべて正しく配置されていました。

接続用のデータを直接コードに記述すれば、すべてうまくいきます。

私はmt4を使っています。

パスを確認する必要があります。UACが影響している可能性が高いです。INIにどのパスを設定していますか?ターミナルディレクトリかDataか?

 
Anton Gaisin:
ロシア語のテキストがkarakaziabyに挿入されるのです。もちろんdllが再コード化していることは理解していますが、私のデータベースはUTF-8です。可読性のあるロシア語テキストを挿入するにはどうしたらいいでしょうか?

はい、ASCIIへの変換は進行中で、中国の同僚からもそれについての発言がありました。時間があり次第、修正しようと思います。

 
Eugeniy Lugovoy:

パスをチェックする必要がある...。UACが影響していると思われます。INIにどのパスを設定していますか?ターミナル・ディレクトリーかDataか?

あなたのアーカイブにサンプルがあります...その中で私は全てをそのままにしています。INIを変更しただけです。

問題は解決した。私自身が愚かでした。以前はMT4のフォルダとデータのフォルダは一体化していました。今はデータのフォルダはWindowsの特別なセクションに保存されている。パスはTerminalPath()ではなく、TerminalInfoString(TERMINAL_DATA_PATH)を取るのが正しい。

 
Anton Gaisin:

あなたのアーカイブに例があります...その中で私はすべてをそのままにしておきました。iniを変えただけだ。

問題は解決した。私自身が愚かでした。以前はMT4のフォルダとデータのフォルダは一体化していました。今はデータのフォルダはWindowsの特別なセクションに保存されている。パスはTerminalPath()ではなく、TerminalInfoString(TERMINAL_DATA_PATH)を取るのが正しい。

うーん...。私の記憶が正しければ、それは古いライブラリのどこかにあり、最新バージョン(ディスカッションに投稿)では修正しました :)

OK.じゃあUTFの問題はまだ残っているね。 今週、週末までに解決してみるよ。