Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 16-01-2019
Bolox Bolox is offline
Miembro
 
Registrado: 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:
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.

Última edición por Bolox fecha: 16-01-2019 a las 15:00:48.
Responder Con Cita
  #2  
Antiguo 16-01-2019
Bolox Bolox is offline
Miembro
 
Registrado: 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.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Leer fichero ini en memoria oscjae OOP 7 10-12-2015 01:07:22
como leer la memoria cyberagl Varios 0 14-03-2007 07:22:56
Como poder leer la memoria de un dispositivo ? ozrics OOP 2 03-09-2006 19:43:50
Leer BBDD de Access en Delphi, pero "ampliamente" Pandre Conexión con bases de datos 2 23-01-2004 13:36:56
Leer direccion de memoria brandolin Varios 8 25-09-2003 16:29:22


La franja horaria es GMT +2. Ahora son las 15:50:47.


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