Gracias ecfisa, el escenario general es este, se generan varios archivos Access con la misma estructura por una aplicacion antigua cuyo contenido es un registro de entrada de un puerto serial, y con mi app leo los registros de todos ellos con ADO y los inserto en el ClientDataSet, llegando hasta 300 mil registros.
La estructura la genero de la siguiente manera:
Código Delphi
[-]
procedure TdmData.DataModuleCreate(Sender: TObject);
begin
with cdsLog.FieldDefs do begin
Add('ID' , ftAutoInc);
Add('Num1' , ftFloat);
Add('Num2' , ftFloat);
Add('Num3' , ftFloat);
Add('Flag' , ftString, 1);
Add('IsNav' , ftBoolean);
Add('Comment' , ftString, 255);
Add('TimeStamp', ftDateTime);
Add('Num4', ftInteger);
end;
cdsLog.CreateDataSet;
end;
Y para llenarlo con registros, repito el proceso por cada archivo Access que el usuario seleccione con un diálogo Open con seleccion múltiple, como nota, el campo Comment, el 98% de las veces está vacío:
Código Delphi
[-]
ADOTable.Open;
while not ADOTable.Recordset.EOF do begin
cdsLog.Append;
try
for RecNum := 0 to ADOTable.FieldCount - 1 do
cdsLog.FieldByName(ADOTable.Fields[RecNum].FieldName).Value := ADOTable.Recordset.Fields[RecNum].Value;
cdsLog.Post;
except
cdsLog.Cancel;
raise;
end;
ADOTable.Recordset.MoveNext;
end;
Al terminar de anexarlos todos, inmediatamente intento leer ya sea el ChangeCount o el Delta y aqui es donde tarda muchisimo tiempo. Es en este punto donde no entiendo el porqué de la tardanza cuando son 235K registros agregados de un solo golpe, si le agrego 17K la respuesta es casi inmediata.