Ver Mensaje Individual
  #14  
Antiguo 15-11-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Reputación: 28
Lepe Va por buen camino
Cuando le das doble clic a un TTable, aparece la ventana editor de campos, botón derecho y Add All Fields.

A eso se le llama campos persistentes porque en tu Form aparece:
Código Delphi [-]

Type TForm1 = Class(TForm)

  query1NombreCliente :TStringField;
Al crear la ventana, se crea ese campo como si se tratara de un panel, un edit, etc.

Al usar FieldbyName esto es lo que ocurre:
Código Delphi [-]
function TFields.FieldByName(const FieldName: WideString): TField;
begin
  Result := FindField(FieldName);
  if Result = nil then DatabaseErrorFmt(SFieldNotFound, [FieldName], DataSet);
end;

Y aquí está la madre del borrego:

function TFields.FindField(const FieldName: WideString): TField;
var
  I: Integer;
begin
  for I := 0 to FList.Count - 1 do  Un bucle por todos los campos que tiene la tabla
  begin
    Result := FList.Items[i];
    if WideCompareText(Result.FFieldName, FieldName) = 0 then Exit;
  end;
  Result := nil;
end;
Si tu tabla tiene 10 campos, al usar FieldByName:
- En el mejor de los casos, lo encuentras al primer intento de ese bucle.
- En el peor de los casos, tendrás que dar 10 vueltas en ese bucle For

Al usar campos persistentes, tienes ese campo como si fuera un panel o un Edit, no hay que realizar bucle alguno.

En el caso que nos ocupa, nosotros tenemos otro bucle más:
while not frmfactura.MDtemporal.Eof do

si tenemos 20 registros en la tabla, 10 campos, usamos 2 veces fieldbyname dentro de nuestro bucle:
-En el peor de los casos, 390 ciclos
-En el mejor de los casos: 60 ciclos

Usando campos persistentes: 20 ciclos

No hay que meterse en paranoias , pero si tenemos los campos persistentes, es preferible usarlos .

Petolansa: Si no entiendes algo de ese código usa la tecla F1, es la única forma de aprender, si aún así tienes dudas, avisa.


Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita