Discussion de l'article "SQL et MQL5 : Travailler avec la base de données SQLite" - page 2

 

En raison de changements dans la structure de copie, le fichier ByteImg.mqh a été corrigé pour utiliser l'union.

télécharger le nouveau FastFile dans sa publication https://www.mql5.com/ru/forum/6291#comment_4967832
Dossiers :
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 produit toujours 0. Cependant, si la requête est saisie directement dans la base de données, elle produit la valeur correcte.

Et si, au lieu de COUNT, on met une colonne et qu'on regarde la taille du tableau ArraySize(tbl.m_data), tout va bien. En d'autres termes, count ne fonctionne pas. Je ne sais pas, peut-être que je fais quelque chose de mal.....

 
il est préférable de passer le cap de l'année.
 
le cvera lui-même fonctionne. Soit j'obtiens le résultat au mauvais endroit, soit la classe qui transmet le querier à la base de données ne fonctionne pas correctement.
 

Je suis actuellement confronté à cette erreur, quelqu'un peut-il m'aider ?

Dossiers :
Immagine.jpg  268 kb
 
d.bignotti:

Je suis actuellement confronté à cette erreur, quelqu'un peut-il m'aider ?

merci de poster

correction dans l'archive

 

Forum sur le trading, les systèmes de trading automatisés et les tests de stratégies de trading

Discussion autour de l'article "SQL et MQL5 : Travailler avec la base de données 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 sort toujours 0. Bien que si vous entrez la requête directement dans la base de données, elle sort la valeur correcte.

Et si au lieu de COUNT mettre une certaine colonne et ensuite regarder la taille du tableau ArraySize(tbl.m_data), tout est bon. En d'autres termes, count ne fonctionne pas. Je ne sais pas, peut-être que je fais quelque chose de mal.....


Même chose - COUNT produit 0, mais lorsque vous exécutez le script à partir de SQLiteStuido - tout compte.

En pratique, on a constaté que cela se produisait sur des tables avec ~10000>nombre de frappes. De plus, si la table tbl obtenue, comme dans l'exemple ci-dessus, est imprimée (par une fonction intégrée au code) - les colonnes de type INTEGER seront imprimées à 0, bien qu'elles ne soient pas à 0, bien sûr. Et dans la même impression, DOUBLE s'affiche correctement.

Il semble qu'il y ait un problème avec les ints(je n'ai pas encore eu le temps de le tester).

 

Forum sur le trading, les systèmes de trading automatisés et les tests de stratégies de trading

Discussion autour de l'article "SQL et MQL5 : Travailler avec une base de données SQLite"

BeforeFlight, 2017.08.31 07:55 AM


Même chose - COUNT sort 0, mais lors de l'exécution d'un script à partir de SQLiteStuido - tout compte.

Pratiquement trouvé que cela se produit sur les tables avec ~10000>nombre deStrokes. De plus, si la table tbl obtenue, comme dans l'exemple ci-dessus, est imprimée (par une fonction intégrée au code), les colonnes de type INTEGER seront imprimées à 0, bien qu'elles ne soient pas à 0, bien sûr. Et dans la même impression, DOUBLE s'affiche correctement.

Il semble qu'il y ait un problème avec les ints(je n'ai pas encore eu le temps de le tester).


Je l'ai trouvé dans le fichier "IncludeMQH\Ctrl\ByteImg.mqh" :

au lieu de :

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

apparemment signifiait :

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

après cela, tout est correct avec COUNT, et l'impression des tableaux. Au moins mes tests passent.

@o_o @Denis Kanapis

 
BeforeFlight:

Je l'ai trouvé dans le fichier "IncludeMQH\Ctrl\ByteImg.mqh" :

au lieu de :

apparemment voulait dire :

après cela, tout est correct avec COUNT, et l'impression des tableaux. Au moins mes tests passent.

@o_o @Denis Kanapis


Je voulais juste vous signaler cette erreur, vous m'avez devancé :). Pour les valeurs INT, la valeur 0 était toujours donnée.

 

vous avez décrit un bogue pour SD, car __int est union

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

et la différence entre

__int d; d.v=0;

и

__int d={0};

il ne devrait pas y avoir de différence entre et

Le fragment de code que vous montrez ne comprend pas du tout comment cela affecte votre COUNT.

parce que la fonction ViewInt n'écrit pas, mais tout le contraire - elle lit le nombre dans d.v. Et elle ne se préoccupe pas de la valeur actuelle de d.v.

-----

J'ai ajouté la modification que vous avez suggérée à ByteImg pour que vous vous sentiez plus à l'aise.


Mais vous pouvez localiser et fournir une réimpression de ce bogue. Puisque jusqu'à présent cela ressemble à un bug, mais certainement pas à un bug de la librairie.