Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Grabar un campo calculado en una tabla (https://www.clubdelphi.com/foros/showthread.php?t=72212)

Nacho5 03-02-2011 17:38:52

Grabar un campo calculado en una tabla
 
¡ Antes que nada, quiero agradecer la ayuda que me puedan ofrecer dado que estoy muy perdido con este asunto !

Soy novato en esto del manejo del delphi y me gustaría saber. ¿ Teniendo una simpla tabla con 3 campos tipo currency en donde, los 2 primeros son los nº que se solicitan, y el tercer campo, es el que almacena la suma de los otros dos ?. ¿ Me podrían indicar las formas posibles de hacerlo ?. ¿Se puede hacer sin campo calculado ?¿ Y con un campo calculado, como añadiríamos a la tabla con campo suma el resultado de dicha operación calculada ?.

Muchas gracias.

rgstuamigo 03-02-2011 17:54:36

Hola Nacho5 te damos la bienvenida y como eres nuevo te recomendamos en primer lugar leer nuestra guía de estilo para conocer ciertas reglas del foro.
Sobre tu pregunta te puedo decir que personalmente creo que te es más que suficiente tener solo dos campos a tu tabla, ya que el tercero se lo puede optener a partir de ellos con una consulta similar a ésta:
Código SQL [-]
Select Campo1,Campo2, (Campo1+Campo2) as Campo_Calculado from MyTabla;
De esa manera puedes mostrar al usuario el tercer campo que en éste caso es calculado, por lo cual no es necesario tener ni guardar un tercer campo en tu tabla;)
Saludos...:)

Nacho5 04-02-2011 07:00:53

Grabar un campo calculado.
 
¡ Muchísimas gracias por tratar de ayudarme rgstuamigo !. Tras volver nuevamente a leer mi mensaje veo que no he sido muy claro. Disculpas por este error. Me explicaré otra vez :

Poseo una tabla llamada Suma.db, en la cual tengo 3 campos : los dos primeros( Num1 y Num2 ) deben ser introducidos por la persona, y el tercero( resultado ), debe de guardar en la tabla la información que los dos anteriores produzcan al realizarse una operación matemática del tipo suma... Quisiera saber cómo se hace a través de un campo calculado( campo con nombre calculado ), o sea, cómo asigno el valor calculado a mi tercer campo( todos son de tipo currency ) en la tabla suma. Necesito poder guardar el dato calculado en la tabla suma.db, dado que no será para uso de una consulta simple en un instante determinado, sino que se aprovechará en un futuro para encontrar un determinado registro que contenga a sus vez otros datos. He utilizado este simil... de "la suma" porque creo que es el que más se parece a lo que busco sin tener que explicar el desarrollo de la aplicación para la que estoy trabajando. No obstante, les indico de que se trata de hacer una B.D con todos los gastos pormenorizados mes a mes que provienen de distintos lugares... y cómo dichos gastos suman un monto total que debe ser guardado tras haber echo los cálculos oportunos sumas, etc...

Muchas gracias encarecidamente... !!! Hasta pronto !!!

rgstuamigo 04-02-2011 14:18:02

Ok...ya voy entendiendo la cosa...pero antes de poder darte alguna sugerencia me gustaría que nos comentaras(mejor si pones código) de qué manera estas insertando hasta el momento los registros a tu tabla? ¿que componentes estas usando?,etc...:)
Saludos...:)

Nacho5 04-02-2011 16:55:37

Grabar un campo calculado.
 
¡ Hola de nuevo !

Código lo que se dice código, no hay mucho. Dado que no tengo mucha base para ello. El que hay es el que implementa Delphi a la hora de diseñar la aplicación. Pero para que veas lo que tengo sería esto :
_________________________________________________________________
Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, DB, DBTables, StdCtrls, Mask, DBCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    Table1: TTable;
    DataSource1: TDataSource;
    Table1Num1: TCurrencyField;
    Table1Num2: TCurrencyField;
    Table1Suma: TCurrencyField;
    Table1calculado: TCurrencyField;
    Label1: TLabel;
    DBEdit1: TDBEdit;
    Label2: TLabel;
    DBEdit2: TDBEdit;
    Label4: TLabel;
    DBEdit4: TDBEdit;
    DBNavigator1: TDBNavigator;
    procedure Table1CalcFields(DataSet: TDataSet);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation


{$R *.dfm}

procedure TForm1.Table1CalcFields(DataSet: TDataSet);
begin
       DataSet['calculado']:= DataSet['Num1']+DataSet['Num2'];
end;

_________________________________________________________________
En la tabla( que denominé Suma.db tiene a su vez un campo Suma ) que debe registrar el valor del campo calculado( llamado calculado ). No sé como hacerlo por más que he intentado de una y otra forma. He leído cosas en este foro que me ha llevado a saber plantear un campo calculado viendo lo del :
Código Delphi [-]
procedure TForm1.Table1CalcFields(DataSet: TDataSet);
begin
       DataSet['calculado']:= DataSet['Num1']+DataSet['Num2'];
end;
pero no sé continuar... ni he visto por ahora algo que me ayude a seguir un paso más. Muchas gracias nuevamente, por vuestro interés!!!.

Nacho5 08-02-2011 06:14:41

Grabar un campo calculado.
 
¿ Hay alguien que me pueda echar un capote con esta mi duda universal ?. Muchas gracias.

rgstuamigo 08-02-2011 14:35:52

Bueno... personalmente como te comenté anteriormente no me parece muy práctico que guardes el campo calculado en tu Base de datos ya que como bien dice el término es un campo "calculaaado", osea se lo puede calcular;) y básicamente solo sirve para mostrar al usuario datos en pantalla, por tal motivo no le veo muy útil guardarlo.;)
Un ejemplo práctico que te puedo dar de todo ésto, por decir un tabla "Empleado" que tengas por ejemplo los siguientes campos o columnas:
Cita:

Tabla Empleado
ID,Nombre,Fecha_Nacimiento,Edad,etc...
Si analizamos un poco los campos de la tabla "Empleado" nos vamos a dar cuenta que exiten campos que están por demás y hay información redundante,¿Qué campo es? dirán uds. pues la respuesta es el campo "Edad";), ¿pero porqué el campo "Edad" es redundante?...pues por que tranquilamente se puede obtener la edad de un empleado atraves de su fecha de nacimiento ;), en otras palabras ya tenemos o podemos obtener ese dado, por tanto concluimos que no es necesario tener un campo edad.;).
Entonces ahora la pregunta es: ¿Es necesario guardar un dato cuando lo puedo obtener de otra parte?:confused:
Saludos...:)

Nacho5 11-02-2011 23:04:47

Grabar un campo calculado.
 
Disculpa la tardanza en darte nuevamente las gracias. Pero la verdad es que no he podido conectarme antes. La razón de querer guardar el dato calculado no es otra que la de pensar que el cálculo se haga en una sola ocasión, y así poder ahorrar tiempos de recalculo de todos los registros de la base de datos cada vez que se plantee una consulta posterior en donde se conozca ese dato absoluto que sería el campo suma, por ejemplo. ¡ Muchas gracias por toda tu ayuda !.
;):)

ecfisa 12-02-2011 00:32:59

Hola Nacho5.

Lo que te está sugiriendo rgstuamigo es la opción correcta.

Si tu preocupación es la velocidad, quedate tranquilo, el tiempo de cálculo es despreciable. Requiere muchísimo más tiempo traer un dato de la tabla a memoria por ejemplo. Por otro lado usando un campo calculado, tenés la ventaja que no tenés datos redundantes en la tabla.

De todos modos si todavía queres guardarlo como campo; podrías hacer desde Delphi el calculo y la asignación en algún evento, o mediante un trigger desde la base de datos.

Un saludo.

Nacho5 12-02-2011 21:00:30

Grabar un campo calculado.
 
Muchas gracias también a tí ecfisa. Al final, he seguido los cosejos de rgstuamigo. Y estoy empezando a montar la aplicación. Tardaré un poco... bastante... pero con vuestras ayudas el camino será más fácil. Gracias. :)


La franja horaria es GMT +2. Ahora son las 03:59:42.

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