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

 
Eugeniy Lugovoy:

MT4 build 890 x32 を確認しました。すべて動作しています。

テストスクリプトの実行ログ:

みんな、明確にしてください:

1.どのような操作で"Access violation read " となりますか??

2.MySQL-001スクリプトを実行する際、エキスパートタブに表示されるMQLMySQLのバージョンは何ですか?MQLMySQL v2.2 x32 Copyright © 2014, FxCodex Laboratory.

3.MySQL データベースのバージョンは?

4.MySQLはローカルまたはリモートホストで使用されていますか?

5.ターミナルは どのオペレーティングシステムで実行 しますか?

エラーが再現できないので、確認して報告してください。

同じような環境を作ってテストしてみます。

MT4(950)を使用しています。記事に添付されているアーカイブからファイルを取りました。MySQL-001 EURUSD,M1: MQLMySQL v2.0 Demo Copyright © 2014, FxCodex Laboratory.

設定ファイルからデータを読みません。

 
Sergey Deynego:

MT4(950)を使っています。私は記事に添付されたアーカイブからファイルを取りました。MySQL-001 EURUSD,M1: MQLMySQL v2.0 Demo Copyright © 2014, FxCodex Laboratory.

設定ファイルからデータを読みません。

はい、v2.0は古いです。新しいバージョンはすでに記事のディスカッションに掲載しました。

これから添付します。

MQLMySQL v2.2 - x64およびx86用DLLプロジェクト ソース

これを試してみてください。最新版のようです。

ファイル:
MQLMySQL_v2.2.zip  4801 kb
MQL4_x32.zip  1073 kb
MQL5_x32.zip  1073 kb
MQL5_x64.zip  1076 kb
 
Eugeniy Lugovoy:

ログにあるエラーに基づくと、次のようになります。0 11:09:37.742 MySQL-002 EURUSD,H1: テーブル `table` を作成できません。

table "という名前を使用していますが、これはmysqlデータベースのキーワードであり、テーブル名として使用することはできません。

接続後すぐに "USE database_name "コマンドを実行することができます。

例えば、私のデータベースが "mysql "である場合:

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

if (DB ==-1) { Print ("接続に失敗しました!エラー: "+MySqlErrorDescription); } else { Print ("接続されました!DBID#",DB);}。

MySqlExecute(DB, "USE mysql");

さて、テーブルの名前とMySqlExecute(DB, "USE mt4") コマンドについてはあなたの提案に従いましたが、まだエラーメッセージが表示されます:

0 12:51:40.534 スクリプト MySQL-002new EURUSD,M1: 正常にロードされました。

0 12:51:40.549 MySQL-002new EURUSD,M1: 初期化されました。

0 12:51:40.549 MySQL-002new EURUSD,M1:MQLMySQL v2.0 デモ Copyright © 2014, FxCodex Laboratory

0 12:51:40.549 MySQL-002new EURUSD,M1: Host:ユーザー: , データベース:

0 12:51:40.549 MySQL-002new EURUSD,M1:接続中...

0 12:51:40.565 MySQL-002new EURUSD,M1: 接続中!接続されました!DBID#0

0 12:51:40.565 MySQL-002new EURUSD,M1: テーブル `test_table` を作成できません。エラー:エラー: Aucune base n't?

0 12:51:40.565 MySQL-002new EURUSD,M1:切断されました。スクリプトは終了しました!

0 12:51:40.565 MySQL-002new EURUSD,M1: uninit reason 0

0 12:51:40.565 スクリプト MySQL-002new EURUSD,M1:削除されました

 

こんにちは、Eugeniy Lugovoy

有用なプロジェクトをありがとうございます。

私はテーブルから約3,000文字の文字列フィールドを読み込もうとしており、このように「MySqlGetFieldAsString」を使用しました:


if (Cursor >= 0)

{

Rows = MySqlCursorRows(Cursor);

for (int i=0; i<Rows; i++)

if (MySqlCursorFetchRow(Cursor))

{

Get_Setting = MySqlGetFieldAsString(Cursor, 4);

}

.....

しかし、問題は Get_String が 1025 文字しか返さないことです、

そのフィールドを完全に読み取る必要があります。

この問題を解決する方法を教えてください。

よろしくお願いします。

 
FX. MDA7:

こんにちは、Eugeniy Lugovoy

有用なプロジェクトをありがとうございます。

私はテーブルから約3,000文字の文字列フィールドを読み込もうとしており、このように「MySqlGetFieldAsString」を使用しました:


if (Cursor >= 0)

{

Rows = MySqlCursorRows(Cursor);

for (int i=0; i<Rows; i++)

if (MySqlCursorFetchRow(Cursor))

{

Get_Setting = MySqlGetFieldAsString(Cursor, 4);

}

.....

しかし、問題は Get_String が 1025 文字しか返さないことです、

そのフィールドを完全に読み取る必要があります。

この問題を解決する方法を教えてください。

回答

はい、文字データの最大長を1024文字に設定しました。この制限を変更して、DLLを再構築することができます。ところで、DB側でそのカラムに使用しているデータ型は何ですか?
 
peg:

テーブルの名前とMySqlExecute(DB, "USE mt4") コマンドについては、あなたの提案に従いましたが、まだエラーメッセージが表示されます:

0 12:51:40.534 スクリプト MySQL-002new EURUSD,M1: 正常にロードされました。

0 12:51:40.549 MySQL-002new EURUSD,M1: 初期化されました。

0 12:51:40.549 MySQL-002new EURUSD,M1:MQLMySQL v2.0 デモ Copyright © 2014, FxCodex Laboratory

0 12:51:40.549 MySQL-002new EURUSD,M1: Host:ユーザー: , データベース:

0 12:51:40.549 MySQL-002new EURUSD,M1:接続中...

0 12:51:40.565 MySQL-002new EURUSD,M1: 接続中!接続されました!DBID#0

0 12:51:40.565 MySQL-002new EURUSD,M1: テーブル `test_table` を作成できません。エラー:エラー: Aucune base n't?

0 12:51:40.565 MySQL-002new EURUSD,M1:切断されました。スクリプトは終了しました!

0 12:51:40.565 MySQL-002new EURUSD,M1: uninit reason 0

0 12:51:40.565 スクリプト MySQL-002new EURUSD,M1: 削除されました。

なぜバージョンは"MQLMySQL v2.0"なのか?
 

素晴らしい!

MQL4用のデータを生成するためにMQL5を使用。

クエリ・コマンドでtablenameを囲むシングルクォートを削除しなければならなかったことを除けば、すべてが見事に機能しました。

Query ="SELECT Symbol,Composite,Pattern FROM summarytable";

うまくいった

 
Ingvar Engelbrecht:

素晴らしい!

MQL4用のデータを生成するためにMQL5を使用。

クエリ・コマンドでtablenameを囲むシングルクォートを削除しなければならなかったことを除けば、すべてが見事に機能しました。

Query ="SELECT Symbol,Composite,Pattern FROM summarytable";

これでOK

大文字と小文字を区別する)テーブル名や特殊な記号を使用しないのであれば、引用符なしで使用することも可能です。ちなみに、シングルクォート記号は「'」ではなく「`」です。

ですから、クエリも次のようになります:Query ="SELECT `Symbol`,`Composite`,`Pattern` FROM `summarytable`";

カラム名をSymbolに したいが、 symbolでも SYMBOLでも ない場合

 

こんにちは、Eugeniy、

あなたのモジュールに感謝します。フィールド名を取得する関数を 追加する方法を教えてください。

 

お元気ですか!

システム win10 64x, データベースに接続できません。