Diskussion zum Artikel "SQL und MQL5: Mit der SQLite Datenbank arbeiten" - Seite 2

 

Aufgrund von Änderungen in der Kopierstruktur - korrigierte ByteImg.mqh-Datei zur Verwendung von Union

laden Sie die neue FastFile in ihrer Veröffentlichung herunter https://www.mql5.com/ru/forum/6291#comment_4967832
Dateien:
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 gibt immer 0 aus. Wenn die Abfrage jedoch direkt in die Datenbank eingegeben wird, gibt sie den richtigen Wert aus.

Und wenn man statt COUNT irgendeine Spalte einträgt und sich dann die Arraygröße ArraySize(tbl.m_data) ansieht, ist alles gut. D.h. count funktioniert nicht. Ich weiß es nicht, vielleicht mache ich etwas falsch.....

 
ist es besser, das Jahr zu überstehen.
 
die cvera selbst funktioniert. Entweder bekomme ich das Ergebnis von der falschen Stelle oder die Klasse, die die Abfrage an die Datenbank übergibt, funktioniert nicht richtig.
 

Bei mir tritt dieser Fehler gerade auf. Kann mir jemand helfen?

Dateien:
Immagine.jpg  268 kb
 
d.bignotti:

Ich erlebe gerade diesen Fehler, kann mir jemand helfen?

Danke für den Beitrag

Korrektur im Archiv

 

Forum über Handel, automatisierte Handelssysteme und das Testen von Handelsstrategien

Diskussion über den Artikel "SQL und MQL5: Arbeiten mit der SQLite Datenbank"

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 gibt immer 0 aus. Obwohl, wenn Sie die Abfrage direkt in die Datenbank eingeben, gibt sie den richtigen Wert aus.

Und wenn man statt COUNT irgendeine Spalte einträgt und dann die Arraygröße ArraySize(tbl.m_data) anschaut, ist alles gut. D.h. count funktioniert nicht. Ich weiß nicht, vielleicht mache ich etwas falsch.....


Das Gleiche - COUNT gibt 0 aus, aber wenn man das Skript von SQLiteStuido aus ausführt, wird alles gezählt.

Praktisch wurde festgestellt, dass dies bei Tabellen mit ~10000>Anzahl der Anschläge passiert. Außerdem, wenn die erhaltene Tabelle tbl, wie im obigen Beispiel, gedruckt wird (durch eine Funktion in den Code eingebaut) - Spalten vom Typ INTEGER werden 0 gedruckt, obwohl sie nicht 0 sind, natürlich. Und im gleichen Ausdruck wird DOUBLE korrekt ausgegeben.

Irgendetwas scheint mit ints falsch zu sein (ich hatte noch keine Zeit, es zu testen).

 

Forum über Handel, automatisierte Handelssysteme und das Testen von Handelsstrategien

Diskussion des Artikels "SQL und MQL5: Arbeiten mit der SQLite Datenbank"

BeforeFlight, 2017.08.31 07:55 AM


Gleiche Sache - COUNT gibt 0 aus, aber wenn ich ein Skript von SQLiteStuido ausführe - zählt alles.

Praktisch festgestellt, dass dies auf Tabellen mit ~10000>Anzahl der Anschläge passiert. Außerdem, wenn die erhaltene Tabelle tbl, wie im obigen Beispiel, gedruckt wird (durch eine Funktion in den Code eingebaut) - die Spalten vom Typ INTEGER werden 0 gedruckt, obwohl sie nicht 0 sind, natürlich. Und im gleichen Ausdruck wird DOUBLE korrekt ausgegeben.

Irgendetwas scheint mit ints falsch zu sein (ich hatte noch keine Zeit, es zu testen).


Ich habe es gefunden - in der Datei "Include\MQH\Ctrl\ByteImg.mqh":

statt:

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

anscheinend gemeint:

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

Danach ist alles korrekt mit COUNT und dem Ausdruck der Tabellen. Zumindest bestehen meine Tests.

@o_o @Denis Kanapis

 
BeforeFlight:

Ich habe es gefunden - in der Datei "Include\MQH\Ctrl\ByteImg.mqh":

statt:

anscheinend gemeint:

Danach ist alles korrekt mit COUNT und dem Ausdruck der Tabellen. Zumindest bestehen meine Tests.

@o_o @Denis Kanapis


Wollte dich nur auf diesen Fehler hinweisen, du warst mir voraus :). Für INT-Werte wurde immer der Wert 0 angegeben.

 

Sie haben einen Fehler für SD beschrieben, denn __int ist union

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

und der Unterschied zwischen

__int d; d.v=0;

и

__int d={0};

sollte es keinen Unterschied zwischen und geben.

Das Codefragment, das Sie zeigen, versteht überhaupt nicht, wie es Ihr COUNT beeinflusst.

weil die ViewInt-Funktion nicht schreibt, sondern genau das Gegenteil - sie liest die Zahl in d.v. Und sie kümmert sich nicht um den aktuellen Wert von d.v.

-----

Ich habe die von Ihnen vorgeschlagene Änderung zu ByteImg hinzugefügt, damit Sie sich wohler fühlen.


Aber bitte lokalisieren Sie diesen Fehler und stellen Sie einen Nachdruck zur Verfügung. Denn bis jetzt sieht es nach einem Fehler aus, aber definitiv nicht nach einem Fehler der Lib.