記事"SQL と MQL5:SQLite データベースとの連携"についてのディスカッション - ページ 2

 

コピー構造体の変更に伴い、ByteImg.mqhファイルをユニオンを 使用するように修正。

新しいFastFileをパブリケーションでダウンロードするhttps://www.mql5.com/ru/forum/6291#comment_4967832
ファイル:
ByteImg.mqh  6 kb
 
 string query="SELECT COUNT(*) FROM '"+table+"' WHERE low<"+lowLevel+" AND high>"+highLevel+" AND date>'"+TimeToString(time)+"'";

if(sql3.Query(tbl,query)!=SQLITE_DONE)

        {

         Print(sql3.ErrorMsg());

         return 0.0;

        }

      sql3.Disconnect();

      CSQLite3Cell cell;

      tbl.Cell(0,0,cell);

      int gg=cell.GetInt64();


ggは常に0を出力します。しかし、クエリを直接データベースに入力すると、正しい値を出力します。

また、COUNTの代わりにカラムを指定し、配列のサイズ ArraySize(tbl.m_data)を見ると、すべてうまくいきます。つまり、countは機能しません。何か間違っているのでしょうか?

 
今年を乗り切った方がいい。
 
cvera自体は動作する。私が間違った場所から結果を得ているか、クエリアをデータベースに渡すクラスが正しく動作していないかのどちらかだ。
 

現在、このエラーが発生しています。

ファイル:
Immagine.jpg  268 kb
 
d.bignotti:

現在このエラーが発生しています。

投稿ありがとうございました。

アーカイブの修正

 

取引、自動取引システム、取引戦略のテストに関するフォーラム

記事 "SQLとMQL5:SQLiteデータベースでの作業 "についての議論

デニス・カナピス, 2017.06.11 15:28

 string query="SELECT COUNT(*) FROM '"+table+"' WHERE low<"+lowLevel+" AND high>"+highLevel+" AND date>'"+TimeToString(time)+"'";

if(sql3.Query(tbl,query)!=SQLITE_DONE)

        {

         Print(sql3.ErrorMsg());

         return 0.0;

        }

      sql3.Disconnect();

      CSQLite3Cell cell;

      tbl.Cell(0,0,cell);

      int gg=cell.GetInt64();


データベースに直接クエリを入力すると正しい値が出力されますが、ggは常に0を出力します。

また、COUNTの代わりにカラムを指定し、配列サイズArraySize(tbl.m_data)を見ると、すべてがうまくいきます。つまり、countは機能しません。何か間違っているのでしょうか?


COUNTは0を出力しますが、SQLiteStuidoからスクリプトを実行すると、すべてがカウントされます。

実際、これは~10000>ストロークのテーブルで起こることがわかりました。さらに、上記の例のように得られたテーブルtblを(コードに組み込まれた関数によって)印刷すると、INTEGER 型の列は0と 印刷されます。そして、同じ出力ではDOUBLEは 正しく出力されます。

intsでは 何かが間違っているようだ(まだテストする時間がない)。

 

取引、自動取引システム、取引戦略のテストに関するフォーラム

記事 "SQLとMQL5:SQLiteデータベースでの作業 "についての議論

ビフォアフライト, 2017.08.31 07:55 AM


COUNTは0を出力しますが、SQLiteStuidoからスクリプトを実行すると、すべてがカウントされます。

実際、これは~10000>ストローク数のテーブルで発生することがわかりました。さらに、上記の例のように得られたテーブルtblを(コードに組み込まれた関数によって)印刷すると、INTEGER 型の列は0と 印刷されます。しかし、INTEGER型の列は0と出力されます。

INTEGER 型の列は0と表示されますが、もちろん0ではありません。


見つけたのは、"IncludeMQH¦Ctrl¦ByteImg.mqh "というファイルだ:

の代わりに

int ViewInt() { __int d; d.v=0; ViewArray(d.b,0,4); return(d.v); }

という意味らしい:

int ViewInt() { __int d={0}; ViewArray(d.b,0,4); return(d.v); }

その後、COUNTとテーブルのプリントアウトはすべて正しくなった。少なくとも僕の テストはパスした。

o_o @Denis Kanapis

 
BeforeFlight:

IncludeMQH EthernetByteImg.mqh "ファイルにあった:

の代わりに

という意味らしい:

その後、COUNTとテーブルのプリントアウトはすべて正しくなった。少なくとも私の テストはパスした。

デニス・カナピス


このエラーについて君に伝えたかったんだ。)INT値には常に0が与えられていました。

 

intは ユニオン であるため、SDのバグを説明しています。

union __int { int v; uchar b[4]; };

__int d; d.v=0;

и

__int d={0};

と__intの間に違いはないはずです。

あなたが示したコードの断片は、それがあなたのCOUNTにどのように影響するのか全く理解していません。

なぜなら、ViewInt関数は書き込むのではなく、その逆だからですそして、d.v.の現在値を気にしません。

-----

ByteImgにあなたが提案した編集を加えました。


しかし、このバグのローカライズと再版をお願いします。今のところ、すべてがバグのように見えますが、間違いなく lib のバグではありません。