Ver Mensaje Individual
  #6  
Antiguo 22-06-2011
NeoNew NeoNew is offline
Miembro
 
Registrado: mar 2009
Ubicación: Bogotá
Posts: 49
Reputación: 0
NeoNew Va por buen camino
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;
__________________
Pre-Alpha
Responder Con Cita