Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Problemas con memoria al leer BBDD (https://www.clubdelphi.com/foros/showthread.php?t=93695)

Bolox 16-01-2019 14:57:07

Problemas con memoria al leer BBDD
 
Hola a todos, llego aquí a ver si me podéis dar algún consejito.
Os cuento un poco mi problema.
Tengo una Base de datos bastante extensa (según que tablas contienen entre 50.000 y 350.000 registros) y necesito hacer un servicio que exporte estos registros en JSON para hacer copias de seguridad periodicas.
Mi problema es el siguiente, recorro la primera tabla y la segunda y veo que cada vez tarda más en recorrer el bucle for y cuando llega a la tercera tabla la recorre un poco y luego me suelta esto:

"Project web.exe raised exception class $C00000005 with message 'access violation at 0x00655bac: read of address 0x000000278".

Lo único que hago es leer los registros, los almaceno en un string JSON y escribo en un campo de la base de datos para saber que está procesado y cuando en el JSON hay 1000 registros lo envío y vuelvo a ejecutar el bucle.
Uso ADOquery para las conexiones y las consultas.

SQL:
Código:

sqlStrQUERY := 'SELECT TOP 1000 Campos FROM tabla where procesado is null';
Almacenamiento:
jsonQuery := jsonquery + coma + '{"Codigo": "' + ADOQuery.FieldByName('Codigo').AsString +'",'+{y los demás campos}

Para el for hago lo siguiente.
Saco el valor del control con una ADOQUERY->select count(*) AS contador from tabla where procesado is null;
Código:

Control := adoquery.fieldbyname('contador').toInteger;
//realmente lo convierto a un extend y luego lo trunco y lo vuelvo entero.
Control := trunc(control/1000);
for i=0 to control
begin
//ejecuto las querys
//escribo el valor 1 en el campo procesado de la BBDD.
end;

El código que os paso no está completo, es solo para que os hagáis una idea de que estoy haciendo más o menos a ver si me podéis ayudar.
Ahora se salta las dos primeras tablas porque el campo procesado no es nulo, sin embargo en la tercera tabla me sigue dando el mismo error.
Muchas gracias y un saludo.

Bolox 16-01-2019 15:42:01

Ya he identificado el problema. Era un ADOQuery.free para liberar memoria y ver si así ejecutaba más rápido las Querys, os lo dejo por si a alguien le sirve.

Un saludo.


La franja horaria es GMT +2. Ahora son las 05:04:50.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi