文章 "SQL 与 MQL5: 与 SQLite 数据库集成" - 页 2

 

由于复制结构的变化 - 更正了 ByteImg.mqh 文件以使用联合体

在其出版物中下载新的 FastFilehttps://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();


如果将查询直接输入数据库,则会输出正确的值。

如果不输入 COUNT,而是输入某个列,然后查看数组大小 ArraySize(tbl.m_data),则一切正常。也就是说,count不起作用。我不知道,也许我做错了什么.....。

 
最好能熬过这一年。
 
cvera 本身也能正常工作。要么是我从错误的地方获取了结果,要么是将查询器传递给数据库的类没有正常工作。
 

我现在遇到了这个错误,有人能帮我吗?

附加的文件:
Immagine.jpg  268 kb
 
d.bignotti:

我现在遇到了这个错误,有人能帮我吗?

感谢发布

存档中的修复

 

关于交易、自动交易系统和交易策略测试的论坛

讨论文章 "SQL 和 MQL5:使用 SQLite 数据库"

Denis Kanapis, 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>number ofStrokes 的表中。此外,如果像上例中那样打印得到的表tbl(通过代码中内置的函数),INTEGER 类型的列将被打印为 0,当然它们并不是 0。而在同样的打印输出中,DOUBLE 的 输出是正确的。

ints 似乎出了问题(我还没来得及测试)。

 

关于交易、自动交易系统和交易策略测试的论坛

讨论文章 "SQL 和 MQL5:使用 SQLite 数据库"

BeforeFlight, 2017.08.31 07:55 AM


同样的事情 - COUNT 输出为 0,但从 SQLiteStuido 运行脚本时 - 一切都计数。

实际发现,这种情况发生在具有 ~10000>number ofStrokes 的表上。此外,如果打印(通过代码中内置的函数)所获得的表tblINTEGER 类型的列将被打印为 0,当然它们并不是 0。而在同样的打印输出中,DOUBLE 的 输出是正确的。

ints 似乎出了问题(我还没来得及测试)。


我在文件 "Include\MQH\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:

找到了,在 "Include\MQH\Ctrl\ByteImg.mqh" 文件里:

而不是

显然是指

之后,COUNT 和表格的打印输出一切正常。至少我的 测试通过了。

@o_o @Denis Kanapis


我只是想告诉你这个错误,你比我更早知道:)。对于 INT 值,一直都是 0。

 

你描述了 SD 的一个错误,因为__int union

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

__int d; d.v=0;

и

__int d={0};

您所展示的代码片段完全不理解它是如何影响您的 COUNT 的。

因为 ViewInt 函数不会写入,而是恰恰相反--它会读取d.v. 中的数字。它并不关心 d.v 的当前值。

-----

我在 ByteImg 中添加了您建议的编辑,让您感觉更舒适。


但请您将此错误本地化并提供重印本。因为到目前为止,一切看起来都像是一个错误,但绝对不是程序库的错误。