Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Guardar resultado de dos campos de una base de datos en un tercer campo (https://www.clubdelphi.com/foros/showthread.php?t=89195)

ezerusso 14-10-2015 01:44:47

Guardar resultado de dos campos de una base de datos en un tercer campo
 
hola quisiera saber como puedo hacer para que los resultados de dos campos [INICIO] [FINAL] se guarden en la base de datos access en un tercer campo llamado [CONSUMO], utilize la query para realizar la resta y mostrarla en una dbgrid pero quisiera que esos resultados se guarden en la db. gracias!!

ecfisa 14-10-2015 02:47:34

Hola ezerusso, bienvenido a los foros de Club Delphi :)

Y como a todos los que se inician te invitamos a que leas nuestra guía de estilo.

No has indicado ni el gestor de BD ni los componentes con que estas trabajando, pero la opción mas simple es dejar que la propia BD se encargue de la tarea.

Ejemplificando, en Firebird podrías hacer:
Código SQL [-]
CREATE TABLE TU_TABLA (
  ...
  INICIO DOUBLE PRECISION,
  FINAL DOUBLE PRECISION,
  CONSUMO DOUBLE PRECISION COMPUTED BY (INICIO + FINAL)
)

Saludos :)

Casimiro Notevi 14-10-2015 08:55:17

No sé si access tendrá "computed by".
Tampoco sé si tiene triggers, me temo que tampoco.
A las malas, algo así:
Código SQL [-]
update tabla set consumo = inicio+final

ecfisa 14-10-2015 14:33:12

Cita:

Empezado por ezerusso (Mensaje 497892)
...se guarden en la base de datos access en un tercer campo llamado [CONSUMO], utilize la query...

Cita:

Empezado por ecfisa (Mensaje 497896)
...No has indicado ni el gestor de BD...

Sin palabras... :o

Creo que lo que te ha dicho Casimiro es la opción indicada para Access. Usa un ADOQuery que ejecute, mediante el método ExecSQL, la sentencia que te puso en su mensaje.

Saludos y disculpas por la distracción :)

ezerusso 14-10-2015 16:15:53

hola gracias por la respuesta no consigo solucionarlo, mira te explico mas de detalladamente lo que tengo,.. es algo sencillo lo que quiero hacer

-Por una parte realice una tabla en access de tres campos INICIO, FINAL , CONSUMO, los 3 tipo numéricos.

en delphi accedí a ADOconection, datasource y un ADOquery para realizar la consulta y mostrarla en una dbgrid, conecte todo y hasta ahí todo bien, puse este código en el ADOquery:

Código SQL [-]
 SELECT inicio , final (final- inicio) as consumo FROM tabla1

pero solo estoy mostrando el inicio, final y los resultados de la resta en el campo consumo del dbgrid y a lo que quiero llegar es que se guardan esos resultados en el campo consumo de la tabla de la base de datos.

gracias.. :)

ecfisa 14-10-2015 16:46:49

Hola ezerusso.

Es que no estas usando la sentencia SQL que te indicó Casimiro, deberías hacer algo como esto:
Código Delphi [-]
procedure TForm1.btnUpdateClick(Sender: TObject);
begin
  ADOQuery1.Close;
  ADOQuery1.SQL.Text := 'UPDATE TABLA1 SET CONSUMO = FINAL - INICIO';
  ADOQuery1.ExecSQL;
end;

Saludos :)

ezerusso 14-10-2015 17:13:56

gracias pude guardar los resultados insertando la sentencia en un btn.. pero ahora tengo el problema que la dbgrid se queda en blanco al oprimir el btn..:mad: ya veré cual es el problema

muchas gracias!! :)

ecfisa 14-10-2015 18:36:42

Hola ezerusso.

Si estas usando el mismo componente query para mostrar y para actualizar, podrías hacer:
Código Delphi [-]
var
  tmp: string;
begin
  tmp := ADOQuery1.SQL.Text;  // salvar cadena SQL previa

  ADOQuery1.Close;
  ADOQuery1.SQL.Text := 'UPDATE TABLA1 SET CONSUMO = FINAL - INICIO';
  ADOQuery1.ExecSQL;

 
  ADOQuery1.Close;
  ADOQuery1.SQL.Text := tmp; // restaurar cadena SQL previa
  ADOQuery1.Open;
end;

Saludos :)

olbeup 15-10-2015 08:48:21

Cita:

Empezado por ezerusso (Mensaje 497922)
hola gracias por la respuesta no consigo solucionarlo, mira te explico mas de detalladamente lo que tengo,.. es algo sencillo lo que quiero hacer

-Por una parte realice una tabla en access de tres campos INICIO, FINAL , CONSUMO, los 3 tipo numéricos.

en delphi accedí a ADOconection, datasource y un ADOquery para realizar la consulta y mostrarla en una dbgrid, conecte todo y hasta ahí todo bien, puse este código en el ADOquery:

Código SQL [-] SELECT inicio , final (final- inicio) as consumo FROM tabla1


pero solo estoy mostrando el inicio, final y los resultados de la resta en el campo consumo del dbgrid y a lo que quiero llegar es que se guardan esos resultados en el campo consumo de la tabla de la base de datos.

gracias.. :)

Hola ezerusso,

Lo que no entiendo es por que quieres poner un campo mas en la tabla que ocupa sitio, cuando sólo es un dato que se saca de otros datos mediante una resta.

Si tienes que cambiar el inicio o el final, también tienes que cambiar el consumo, si por el contrario, es un campo calculado seria mejor, porque cuando cambias el inicio o final el campo consumo se actualiza sólo.

Respecto a la SQL que has puesto te falta una coma (,) después de: final, (final - inicio) as consumo

Código SQL [-]
SELECT inicio , final, (final- inicio) as consumo FROM tabla1
Un saludo.


La franja horaria es GMT +2. Ahora son las 20:56:32.

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