libmysql.dllだけでは、selectの結果をMetatrader4で扱えない?
libmysql.dllをインポートしてMySQLに作成したテーブルからデータを取得し、MQLプログラム中で扱おうとしたが上手くいかない。
create tableは実行できたので、おそらく実行結果を適切な型で扱わないといけないと思われるが、libmysql.dllだけでは出来ないのではないかと思っている。
//SQLの定義 string query="select * from metatrade"; int query_res = mysql_real_query(mysql,query,StringLen(query)); //SQLの実行 int result = mysql_store_result(mysql); int numOfRows = mysql_num_rows(result); //取得行数の確認 Print("numOfRows="+numOfRows); //クエリの実行結果 string row; row = mysql_fetch_row(result); //1行ずつ表示したいが、これでは駄目。 for (int i=0;i<numOfRows;i++) { Comment(i); Print("row:"+row); }
実行してエキスパートタブでメッセージを確認すると表示がおかしい。
バイナリを表示しようとしているようだ。
mysqlのリファレンスを確認すると、
mysql_fetch_row()の戻り値の型は、MYSQL_ROW構造体。
MySQL_ROWの説明を読むと次のようにある。
・MYSQL_ROW
1 行のデータのタイプセーフな表現。現在は、バイト文字列の配列として実装されている(フィールドにはバイナリデータが格納される場合があり、そのようなデータでは内部的にヌルバイトが使用される可能性があるので、バイト文字列をヌル終端文字列として扱うことはできない)。レコードを取得するには、mysql_fetch_row() を呼び出す。
C言語では、この構造体を扱えるだろうが、Metatraderでは直接扱えないため、C言語で作成したインターフェースを用意してあげないといけないのかなぁと・・・。