Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Go Back   Foros Club Delphi > Principal > SQL
Register FAQ Members List Calendar Guía de estilo Search Today's Posts Mark Forums Read

Reply
 
Thread Tools Search this Thread Display Modes
  #1  
Old 16/01/2019
Bolox Bolox is offline
Miembro
 
Join Date: Jul 2018
Posts: 14
Poder: 0
Bolox Va por buen camino
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:
Code:
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;
Code:
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.

Last edited by Bolox : 16/01/2019 at 15:00.
Reply With Quote
  #2  
Old 16/01/2019
Bolox Bolox is offline
Miembro
 
Join Date: Jul 2018
Posts: 14
Poder: 0
Bolox Va por buen camino
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.
Reply With Quote
Reply


Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump

Similar Threads
Thread Thread Starter Forum Replies Last Post
Leer fichero ini en memoria oscjae OOP 7 10/12/2015 01:07
como leer la memoria cyberagl Varios 0 14/03/2007 07:22
Como poder leer la memoria de un dispositivo ? ozrics OOP 2 03/09/2006 19:43
Leer BBDD de Access en Delphi, pero "ampliamente" Pandre Conexión con bases de datos 2 23/01/2004 13:36
Leer direccion de memoria brandolin Varios 8 25/09/2003 16:29


All times are GMT +2. The time now is 23:07.


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