Ver Mensaje Individual
  #2  
Antiguo 20-07-2006
[pepon386] pepon386 is offline
Miembro Premium
 
Registrado: ene 2005
Ubicación: Valencia
Posts: 68
Reputación: 20
pepon386 Va por buen camino
Vamos por partes:

Cita:
Empezado por PatrickM

Estoy con una aplicación que trabaja con tablas muy grandes 30 columnas por 20000 filas, algunas de ellas con campos blob.
Eso no son tablas muy grandes, mas bien normalitas .

Cita:
Empezado por PatrickM
Utilizo SQLDataSet -> TDataSetProvider -> TClientDataSet para conectarme a dichas tablas i necesito editar campos puntuales de la tabla (sin utilizar una consulta). En teoria se podria hacer directamente con el ClientDataSet pero me carga TODOS los registros cuando abro la tabla para editarla. Esto hace que reserve memoria para unas 300 MB.
Eso te pasa porque en la propiedad PacketRecord del ClientDataSet tienes el valor -1, que hace que te devuelva todos los registros, los cuales almacena en memoria.

Cita:
Empezado por PatrickM
A priori el tema se soluciona poniendo la propiedad PacketRecords con un valor mayor que zero para que solo se carguen algunos registros y no toda la tabla. Pero entonces me carga todos los campos cuando le hago el FindKey.
Esto es porque el FindKey recorre toda la tabla, y para ello se trae todos los paquetes de datos que necesita hasta tenerla toda en memoria. Nuevamente tienes todos los datos en el ClientDataSet.

Cita:
Empezado por PatrickM
He probado de poner PacketRecords = 0 y entonces no me encuentra el registro con el FindKey.
Porque poniendo ese valor te devuelve sólamente la estructura de las tablas.

Cita:
Empezado por PatrickM
Estoy desesperado ya no se que probar mas. El BDE no me daba estos problemas de memoria. Aunque se me ha pasado por la cabeza no voy a volver al BDE, pero me extraña que no haya una solucion a mi problema trabajando con los componentes de DBExpress.

A ver si alguien me hecha una mano, y asi a mi no me hechan a mi del trabajo.

un saludo.
Claro que la hay: Tienes que filtrar la información que te va a devolver la aplicación. Para ello tienes que acotar correctamente los datos que quieres obtener de la base de datos (clausula WHERE de la sentencia SQL).
Responder Con Cita