Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Coloboración Paypal con ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #18  
Antiguo 21-04-2008
rolandoj rolandoj is offline
Miembro
 
Registrado: abr 2007
Posts: 395
Poder: 20
rolandoj Va por buen camino
Comentarios a FieldByName

Hola,

Respecto a la solución basada en FieldByName, ciertamente también funciona; pero , ya que nuestro amigo está empezando, creo conveniente efectuar algunos comentarios acerca de su uso.

FieldByName es un método que devuelve automáticamente el objeto, descendiente de TField que el respectivo TDataset tiene para el campo que se la pasa como único parámetro. En ese orden de ideas, si el campo se llama Field, y el Query, Query1, como en el ejemplo, eso es, en principio, lo mismo que crear el objeto Query1Field y escribir Query1Field.AsFloat. Sin embargo, hay varias diferencias.

A efectos de simples operaciones sumatorias, como el caso presente, FieldByName es más versatil que el método que yo mencioné antes, ya que el nombre del campo puede pasarse como parámetro a tiempo de ejecución, y es por tanto la solución adecuada cuando los nombres de los campos pueden ser diferentes a tiempo de ejecución.

Por contra, es bastante ineficiente frente al método de crear el campo permanente, ya que cada vez que se llame a FieldByName, este debe realizar una busqueda entre la lista de campos del Query. Si el Query tiene muchos campos y encima hay muchos registros, esto significa muchas operaciones innecesarias extras.

A lo anterior agrega que es bastante más complicado de manejar cuando se requiere usar otras funcionalidades, tales como campos calculado y eventos OnGetText y OnSetText

Una alternativa para el ejemplo actual es obtener el objeto TField deseado antes de efectuar el While. Veamos :

Código Delphi [-]
Var
Suma: Double;
ElCampo:  TField; 
Begin
     Suma:=0;
     Try
        With query1 Do Begin
             DisableControls;
             ElCampo := fieldbyname('Field');
             First;
             While Not EoF Do Begin
                   Suma := Suma + ElCampo.AsFloat;
                   Next;
             End;
        End;
     Finally
        query1.EnableControls;
     End;
     Edit1.Text:=Floattostr(Suma);
End;

También es de anotar que FieldByName genera una excepción si el campo no existe. Para controlar eso, puede usarse FindField que es lo mismo que FieldByName excepto que si el campo no existe, en lugar de genear un error devuelve el valor Nil, permitiendo así que el programador pueda analizar el error.

Como verás, aún en este caso sencillo hay muchas cosas por anotar. Por eso mi consejo de que dediques un tiempó a leer libros de Delphi o mirar artículos en Internet. Creo que te darán una visión más amplia.

Última edición por rolandoj fecha: 21-04-2008 a las 19:13:09.
Responder Con Cita
 



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
sumar la columna de un dbgrid pharaonhx Varios 3 12-06-2008 15:27:27
sumar una columna DBGrid cancerbero Conexión con bases de datos 5 11-08-2006 18:49:37
Sumar en DBgrid Migpal Varios 2 18-11-2005 18:02:48
Como extraer datos de un DBgrid a otro DBgrid mickey Conexión con bases de datos 13 29-01-2004 05:05:30
Sumar columnas de un DBGRID magm2000 Varios 3 27-09-2003 00:40:06


La franja horaria es GMT +2. Ahora son las 00:46:33.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi