Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Coloboración Paypal con ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #4  
Antiguo 18-02-2009
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Aquí yo primero me cuestionaría el porqué guardar un campo calculado en la base de datos. Es decir, si el valor de un campo puede ser calculado a partir de otros campos, entonces ¿para qué guardarlo si siempre se puede recalcular?

Delphi ofrece soporte para campos calculados que puedes añadir a un dataset y en los cuales haces el cálculo correspondiente, mismo que se muestra como cualquier otro campo aunque realmente no exista en la tabla física.

Vamos a ejemplificar suponiendo que tienes campos campo1 y campo2 de tipo entero en tu tabla y que quieres mostrar un campo resultado con la suma de ambos campos, pero que tal campo no existe en tu tabla.

En el editor de campos del dataset añades todos los campos y luego escoges la opción New field:





En las propiedades del nuevo campo escribes el nombre que desees darle y dejas seleccionada la opción Calculated:





Finalmente, en el evento OnCalcFields del dataset pones:


Código Delphi [-]
procedure TForm1.Table1CalcFields(DataSet: TDataSet);
begin
  DataSet.FieldByName('Resultado').AsInteger :=
    DataSet.FieldByName('campo1').AsInteger +
    DataSet.FieldByName('campo2').AsInteger;
end;

Con esto, tu dbgrid mostrará el campo Resultado como si fuera otro campo de tu tabla y su valor se calculará en automático conforme coloques valores a los otros dos campos.

-----------------------------------

Ahora bien; si por cualquier razón debes guardar el campo como parte de tu tabla, entonces tienes que hacer los cálculos tú mismo.

Para empezar, no pongas el campo Resultado como ReadOnly porque entonces no te dejará modificarlo de ninguna manera. Usa mejor la columna del dbgrid para hacerlo de sólo lectura.

Asigna un mismo evento OnChange a los otros campos y coloca ahí el código
de la fórmula (suma en este ejemplo):

Código Delphi [-]
procedure TForm1.CampoChanged(Sender: TField);
begin
  Table1.FieldByName('resultado').AsInteger :=
    Table1.FieldByName('campo1').AsInteger +
    Table1.FieldByName('campo2').AsInteger;
end;

// Saludos
Responder Con Cita
 


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Celdas de un DBgrid jzk OOP 6 14-12-2004 14:13:31
Stringrid y sus celdas .... elbilla Varios 0 04-10-2004 18:40:15
Celdas en DBGrids karocs Conexión con bases de datos 1 31-08-2004 13:24:13
bloquear celdas en un stringgrid ciscu Gráficos 1 18-12-2003 18:34:50
bloquear celdas en un stringgrid ciscu Varios 1 13-12-2003 04:41:54


La franja horaria es GMT +2. Ahora son las 13:58:46.


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