Discusión sobre el artículo "SQL y MQL5: Trabajando con la base de datos SQLite" - página 2

 

Debido a los cambios en la estructura de copia - corregido ByteImg.mqh archivo para utilizar la unión

descargar el nuevo FastFile en su publicación https://www.mql5.com/ru/forum/6291#comment_4967832
Archivos adjuntos:
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 siempre da 0. Aunque si la consulta se introduce directamente en la base de datos, da el valor correcto.

Y si en vez de COUNT se pone alguna columna y luego se mira el tamaño del array ArraySize(tbl.m_data), todo va bien. Es decir, count no funciona. No sé, a lo mejor estoy haciendo algo mal.....

 
es mejor pasar el año.
 
el propio cvera funciona. O estoy obteniendo el resultado del lugar equivocado o la clase que pasa el querier a la base de datos no funciona correctamente.
 

Actualmente estoy experimentando este error, ¿alguien puede ayudarme?

Archivos adjuntos:
Immagine.jpg  268 kb
 
d.bignotti:

Actualmente estoy experimentando este error, ¿alguien puede ayudarme?

gracias por publicar

arreglar en el archivo

 

Foro sobre trading, sistemas automatizados de trading y prueba de estrategias de trading

Discusión del artículo "SQL y MQL5: trabajar con base de datos 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 siempre sale 0. Aunque si introduces la consulta directamente en la base de datos, sale el valor correcto.

Y si en vez de COUNT pones alguna columna y luego miras el tamaño del array ArraySize(tbl.m_data), todo va bien. Es decir, count no funciona. No sé, tal vez estoy haciendo algo mal.....


Lo mismo - COUNT da 0, pero cuando se ejecuta el script desde SQLiteStuido - todo cuenta.

Prácticamente se comprobó que esto ocurre en tablas con ~10000>número deStrokes. Además, si la tabla obtenida tbl, como en el ejemplo anterior, se imprime (por una función incorporada en el código) - las columnas de tipo INTEGER se imprimirán 0, aunque no son 0, por supuesto. Y en la misma impresión DOUBLE sale correctamente.

Parece que algo falla con los ints(aún no he tenido tiempo de probarlo).

 

Foro sobre trading, sistemas automatizados de trading y prueba de estrategias de trading

Discusión del artículo "SQL y MQL5: trabajo con base de datos SQLite"

BeforeFlight, 2017.08.31 07:55 AM


Lo mismo - COUNT salidas 0, pero cuando se ejecuta una secuencia de comandos de SQLiteStuido - todo cuenta.

Prácticamente comprobado que esto ocurre en tablas con ~10000>número deStrokes. Además, si la tabla obtenida tbl, como en el ejemplo anterior, se imprime (por una función incorporada en el código) - las columnas de tipo INTEGER se imprimirá 0, aunque no son 0, por supuesto. Y en la misma impresión DOUBLE sale correctamente.

Algo parece estar mal con los ints(todavía no he tenido tiempo de probarlo).


Lo he encontrado - en el fichero "Include\MQH\Ctrl\ByteImg.mqh":

en lugar de:

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

aparentemente significaba:

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

después de que todo es correcto con COUNT, y la impresión de las tablas. Al menos mis pruebas pasan.

@o_o @Denis Kanapis

 
BeforeFlight:

Lo encontré... en el archivo "Include\MQH\Ctrl\ByteImg.mqh":

en lugar de:

aparentemente significaba:

después de eso, todo es correcto con COUNT, y la impresión de las tablas. Al menos mis pruebas pasan.

@o_o @Denis Kanapis


Sólo quería comentarte este error, te me has adelantado :). Para los valores INT se daba siempre el valor 0.

 

has descrito un bug para SD, porque __int es unión

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

y la diferencia entre

__int d; d.v=0;

и

__int d={0};

no debería haber diferencia entre y

El fragmento de código que muestras no entiende en absoluto cómo afecta a tu CUENTA

porque la función ViewInt no escribe, sino todo lo contrario - lee el número en d.v. Y no le importa el valor actual de d.v.

-----

He añadido la edición que sugeriste a ByteImg para que te sientas más cómodo.


Pero por favor, localiza y proporciona una reimpresión de este bug. Ya que hasta ahora parece un bug, pero definitivamente no es un bug de la lib.