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