Hola Colegas,
Tengo algo parecido, si me pueden dar ideas o ayudar para optimizar el tiempo que demora en llenar una tabla access.
(Vi algo que ya se trato en otro hilo con una respuesta buena, pero no lo encuentro)
Necesito crear una tabla access con datos de otras tablas access que se encuentran en un servidor, hasta aquí todo bien, lo que sucede es que se
demora mucho tiempo al poblar la nueva tabla.
Son como 10.000 registros los que necesito extraer.
Quiero decir que no puedo utilizar otro tipo de BD, por que el cliente ya tiene todo montado en access (desafortunadamente).
Pego el código de como lo hago; creo que de una u otra forma se puede optimizar, pero para ello necesito de su ayuda e ideas.
Gracias de antemano.
NeoNew
Código Delphi
[-]
ADOTablePedido.Filter := 'FechaRegistro > '+DateToStr(myDate);
ADOTablePedido.Filtered := True;
while not ADOTablePedido.Eof do
begin
if Not(ADOTablePedido.FieldByName('AnularPedido').AsBoolean) then
begin
stPedidoNumero := QuotedStr(ADOTablePedido.FieldByName('PedidoNumero').AsWideString);
ADOTablePedido2.Filter := 'PedidoNumero = ' + stPedidoNumero;
ADOTablePedido2.Filtered := True;
while not ADOTablePedido2.Eof do
begin
if (ADOTableProdTerminado.Locate('NumeroOrdenCompra;CodigoItem',VarArrayOf([ADOTablePedido2.FieldByName('PedidoNumero').AsString,ADOTablePedido2.FieldByName('CodigoProducto').A sString]), [])) then
begin
stNumLote := QuotedStr(ADOTableProdTerminado.FieldByName('NumLote').AsWideString);
stFechaSalida := QuotedStr(Copy(ADOTableProdTerminado.FieldByName('FechaRegistro').AsString,1,10));
end;
if (ADOTableListaDetalles.Locate('CodigoPT',ADOTablePedido2.FieldByName('CodigoProducto').AsString, [])) then
begin
stNombreDetalle := QuotedStr(ADOTableListaDetalles.FieldByName('Nombre').AsString);
stSolvente := QuotedStr(Trim(ADOTableListaDetalles.FieldByName('Solvente').AsString));
end;
cadena := 'INSERT INTO ListaPedidos(.........)';
cadena := cadena + 'VALUES (stPedidoNumero,stNumLote,stNombreDetalle...';
cadena := cadena + ')';
ADOQueryPedidos.SQL.Clear;
ADOQueryPedidos.SQL.Text := cadena;
ADOQueryPedidos.ExecSQL;
ADOTablePedido2.Next;
end;
end;
ADOTablePedido.Next;
end;