No soy un programador de Delphi, pero tengo una aplicación antigua de Delphi 7 que necesito corregir y está usando ADO.¿Cómo evitar que Delphi ADO cargue toda la tabla en la memoria?
La tabla de la base de datos (MS Accesss) contiene +100,000 filas y cuando configuro el ADOTableable.Active = true, comienza a cargar toda la tabla en la memoria RAM y eso requiere mucha memoria y tiempo.
¿Cómo puedo evitar que ADO cargue toda la tabla? Traté de configurar los MaxRecords pero no ayuda.
Básicamente todo lo que hacemos es att inicio del programa:
// Connect to database
DataModule.MyADOConnection.Connected:=true;
DataModule.MeasurementsADOTable.MaxRecords:=1;
// Open datatables
DataModule.MeasurementsADOTable.Active:=true;
Después de ajustar Activo = true que empieza a cargar las mediciones completas en la RAM y se necesita tiempo!
Estamos utilizando el proveedor MSDASQL.1. Tal vez no es compatible con la propiedad MaxRecords?
¿Cómo agrego alguna consulta de limitación en este objeto de datos para solo "cargar TOP 1 * desde las mediciones"?
cómo conecto el TClientDataSet con mi MSACCESS? ¿Tienes algún código de muestra que puedas compartir? – Vlad
@Vlad: El proceso es siempre el mismo: conecte TClientDataset (CDS) con un TDatasetProvider (DSP), después de ese punto la propiedad DSP.DataSet de propiedad a la ADOQuery está trayendo los datos. En la sección Delphi en About.com puedes encontrar miles de ejemplos y también en el docwiki de embarcadero. –
Gracias, intentaré hacer un proyecto de muestra, pero aún una demostración con el "Servidor (ubicación del cursor?) El cursor OpenForwardOnly y un TCLientDataset con PacketRecords establecido en un valor distinto de cero" sería genial. ;) – Vlad