Ver Mensaje Individual
  #4  
Antiguo 22-06-2004
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Reputación: 24
guillotmarc Va por buen camino
Hola.

Cita:
Empezado por argami
Cita:
Empezado por guillotmarc
Por ejplo. puedes vaciar el ClientDataset cada 1000 registros, cerrandolo y volviendolo a abrir vacío (para ello debe tener una cláusula where del tipo codigo = -1).
He echo esta prueba y me resulta en lo mismo no me ayuda en nada.
El SQLQuery debe tener : select * from tabla where codigo = -1

Entonces cuando aplicas los cambios (cada 1000 registros), debes abrir un clientdataset vacío :

Código Delphi [-]
    if J = 1000 then begin
     CDSMenor.ApplyUpdates(-1);
     J:=0;
     CDSMenor.Close;
     CDSMenor.Open; // El ClientDataset no tendrá ningún registro

NOTA: Si miras el consumo de memória de tu aplicación, deberias observar como ahora se mantiene constante.

Cita:
Empezado por argami
Tienes razon y van muy rapido pero el planteamiento de programa es en 3 capas
1- Datos (DBExpress)
2- Accesso (TClientDataSet, TDataSetProvider)
3- Pantallas

Por lo cual el acceso desde las pantallas es solo a travez de los client dataset y los providers. por lo que me surge la duda de como hacer cuando no sea una modificacion masiva si no mas bien un acceso solo para pasar por ejemplo un movimiento a un histrorico de 500000 registros
Aunque nunca he utilizado el ClientDataset de esta forma, creo que puedes poner una sentencia INSERT INTO en el CommandText del ClientDataset, y ejecutarla mediante el Execute (y no el ApplyUpdates).

Cita:
Empezado por argami
Esto me gustaria que me lo explicaras porque trabajando con dbexpress no veo como hacer lo de la transaccion (si estuviera con IBComponents no diria nada)
Puedes manejar transacciones en los componentes dbExpress. Es decir el SQLConnection tiene los métodos BeginTrans y CommitTrans. Dado que puedes tener más de una transacción abierta para la misma conexión, deberias consultar su sintaxis en la ayuda de Delphi. Esta transacción, mientras esté abierta, afectará a todos los componentes dbExpress que se ejecuten (SQLQuerys, SQLStoredProcs, ...).

NOTA: En la capa de cliente (los ClientDatasets) no sé que se puedan manejar transacciones.

Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).

Última edición por guillotmarc fecha: 22-06-2004 a las 16:20:23.
Responder Con Cita