Delphi - .AsString & FieldByName

 
Vista:

.AsString & FieldByName

Publicado por crapo (4 intervenciones) el 21/04/2003 04:24:25
Otra vez molestando.
¿Qué diferencia existe entre usar la propiedad NombreTablaNombreCampo.AsString y FieldByName('NombreCampo').Value?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:.AsString & FieldByName

Publicado por Ernesto De Spirito (706 intervenciones) el 21/04/2003 10:20:35
NombreTablaNombreCampo se usa cuando has creado los campos en tiempo de diseño, mientras que NombreTabla.FieldByName('NombreCampo') devuelve una referencia al campo aunque no esté creado en tiempo de diseño. El primer formato es más rápido, pues la referencia al campo está allí, mientras que el método FieldByName debe buscar en la lista de campos uno cuyo nombre sea la cadena que se pasa como parámetro (eso insumirá varios ciclos de CPU).

Respecto de lo segundo, Value y AsString se aplican al campo, ya sea que se lo haya referenciado como NombreTablaNombreCampo o como NombreTabla.FieldByName('NombreCampo'). La diferencia es que Value establece o devuelve el valor como un Variant, mientras que AsString lo hace como cadena, AsInteger lo hace como entero, AsCurrency como moneda, AsDate como fecha, etc. Normalmente no se usa Value o AsVariant sino que se usa la propiedad específica del el tipo de dato del campo para evitar conversiones innecesarias (el trabajo con Variant es un poco lento en comparación con los tipos de datos básicos), pero hay casos particulares en los que resulta práctico usar los variants.

Espero me hayas entendido.

Ernesto De Spirito
http://www.latiumsoftware.com/es/index.php
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:.AsString & FieldByName

Publicado por Delfino (1216 intervenciones) el 21/04/2003 14:09:21
Solo añadir q usar .value ralentiza mucho el proceso de procesamiento de Delphi y es desaconsejable usar esta propiedad o la pripiedad .FieldValues..
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:.AsString & FieldByName

Publicado por Delfino (1216 intervenciones) el 21/04/2003 19:12:25
Ademas en la ayuda de Delphi dicen q el metodo FndField es mejor q FieldByName, aqui un extracto de la ayuda.

FindField is the same as the FieldByName method, except that it returns nil (Delphi) or NULL (C++) rather than raising an exception when the field is not found.

with Table1 do
begin
{ This is the safe way to change 'CustNo' field }
FindField('CustNo').AsString := '1234';
{ This is *not* the safe way to change 'CustNo' field }
Fields[0].AsString := '1234';
end;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:.AsString & FieldByName

Publicado por Ernesto De Spirito (706 intervenciones) el 22/04/2003 10:06:16
En la ayuda no dice exactamente que FindField sea mejor que FieldByName, sino que simplemente explica las diferencias entre uno y otro, y la decisión respecto de cual es mejor para una circumstancia determinada queda a criterio del programador.

FindField y FieldByName buscan un campo en la lista de campos por su nombre (cadena que se pasa como parámetro), y la diferencia es que cuando un campo no se encuentra, el primero devuelve NIL mientras que el segundo lanza una excepción. El segundo se implementa como una llamada al primero, más una comprobación del valor de retorno.

¿Qué es mejor? ¿Recibir el NIL o lanzar la excepción? Si estamos completamente seguros que el campo existe, lo mejor es usar FindField, pues nos ahorarramos unos clocks de CPU, que por lo general suelen no ser tan relevantes, así que para principiantes que pueden equivocarse, siempre en mis ejemplos uso FieldByName en vez de FindField, pues es más "bonita" una excepción que una AV cuando meten la pata al escribir el nombre del campo, además que la primera tiene mensaje en español si han instalado los respectivos recursos de Delphi...

Ernesto De Spirito
http://www.latiumsoftware.com/es/index.php
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar