Discussione sull’articolo "SQL e MQL5: Lavorare con il database SQLite" - pagina 2

 

A causa delle modifiche apportate alla struttura di copiatura, il file ByteImg.mqh è stato corretto in modo da utilizzare l 'unione.

scaricare il nuovo FastFile nella sua pubblicazione https://www.mql5.com/ru/forum/6291#comment_4967832
File:
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 produce sempre 0. Tuttavia, se la query viene inserita direttamente nel database, produce il valore corretto.

E se invece di COUNT si inserisce una colonna e poi si guarda alla dimensione dell'array ArraySize(tbl.m_data), tutto va bene. Cioè il conteggio non funziona. Non so, forse sto sbagliando qualcosa.....

 
è meglio arrivare a fine anno.
 
il cvera stesso funziona. O sto ottenendo il risultato dal posto sbagliato o la classe che passa il querier al database non funziona correttamente.
 

Attualmente sto riscontrando questo errore, qualcuno può aiutarmi?

File:
Immagine.jpg  268 kb
 
d.bignotti:

Attualmente sto riscontrando questo errore, qualcuno può aiutarmi?

grazie per aver postato

correzione nell'archivio

 

Forum sul trading, sui sistemi di trading automatico e sulla verifica delle strategie di trading

Discussione dell'articolo "SQL e MQL5: lavorare con il database 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 produce sempre 0. Anche se se inserisci la query direttamente nel database, produce il valore corretto.

E se invece di COUNT metto qualche colonna e poi guardo la dimensione dell'array ArraySize(tbl.m_data), tutto va bene. Cioè il conteggio non funziona. Non so, forse sto sbagliando qualcosa.....


La stessa cosa - COUNT produce 0, ma quando si esegue lo script da SQLiteStuido - tutto conta.

In pratica si è visto che questo accade su tabelle con ~10000>numero diStrokes. Inoltre, se la tabella tbl ottenuta, come nell'esempio precedente, viene stampata (da una funzione integrata nel codice) - le colonne di tipo INTEGER verranno stampate a 0, anche se non sono 0, ovviamente. E nella stessa stampa DOUBLE viene stampato correttamente.

Sembra che ci sia qualcosa di sbagliato con gli ints(non ho ancora avuto il tempo di verificarlo).

 

Forum sul trading, sui sistemi di trading automatico e sulla verifica delle strategie di trading

Discussione dell'articolo "SQL e MQL5: lavorare con il database SQLite"

BeforeFlight, 2017.08.31 07:55 AM


Stessa cosa - COUNT emette 0, ma quando si esegue uno script da SQLiteStuido - tutto conta.

Praticamente ho scoperto che questo accade su tabelle con ~10000>numero diStrokes. Inoltre, se la tabella tbl ottenuta, come nell'esempio precedente, viene stampata (da una funzione integrata nel codice) - le colonne di tipo INTEGER verranno stampate a 0, anche se non sono 0, ovviamente. E nella stessa stampa DOUBLE viene stampato correttamente.

Sembra che ci sia qualcosa di sbagliato con gli ints(non ho ancora avuto il tempo di verificarlo).


L'ho trovato - nel file "Include\MQH\Ctrl\ByteImg.mqh":

invece di:

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

apparentemente significava:

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

dopo di che tutto è corretto con COUNT e la stampa delle tabelle. Almeno i miei test passano.

@o_o @Denis Kanapis

 
BeforeFlight:

Trovato: nel file "Include\MQH\Ctrl\ByteImg.mqh":

invece di:

apparentemente significava:

dopo di che, tutto è corretto con COUNT e la stampa delle tabelle. Almeno i miei test passano.

@o_o @Denis Kanapis


Volevo solo dirti di questo errore, sei stato più avanti di me :). Per i valori INT il valore 0 è sempre stato dato.

 

hai descritto un bug per SD, perché __int è un'unione

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

e la differenza tra

__int d; d.v=0;

и

__int d={0};

non dovrebbe esserci alcuna differenza tra e

Il frammento di codice che mostrate non capisce affatto come questo influisca sul vostro COUNT.

perché la funzione ViewInt non scrive, ma esattamente il contrario - legge il numero in d.v. E non si cura del valore corrente di d.v.

-----

Ho aggiunto la modifica suggerita a ByteImg per farti sentire più a tuo agio.


Ma per favore localizzate e fornite una ristampa di questo bug. Poiché finora tutto sembra un bug, ma sicuramente non un bug della libreria.