Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   en que evento del dbgrid puedo hacer un operacion matematica . . . (https://www.clubdelphi.com/foros/showthread.php?t=23673)

Shidalis 25-07-2005 16:44:19

en que evento del dbgrid puedo hacer un operacion matematica . . .
 
Hola a todos, me pregunto en que evento del dbgrid puedo hacer un operacion matematica y mostrar el resultado en una columna determinada

ContraVeneno 25-07-2005 17:01:12

en teoría lo puedes hacer en cualquier evento :D :D
habría que definir en cual de todos es más conveniente, podrías usar el evento OnCellClick.

Shidalis 25-07-2005 21:23:50

disculpen si no me explico bien lo que yo quiero hacer es una operacion como por ejemplo del campo cantidad (4) * el campo precio unitario (3) y que el resultado lo coloque en el campo total. Mi pregunta en que evento puedo colocar el codigo porque en el evento OnCellClick no funciona ya he probado cada uno de los eventos pero el resultado no lo muestra en el campo.
Si pueden ayudarme se los agradeceria.

ContraVeneno 25-07-2005 21:28:38

lo que necesitas es hacer desde la base de datos

algo así como
Código SQL [-]
select cantidad, precio, (cantidad * precio) as total
from TuTabla

y esa consulta ligarla al dbgrid atraves de TQuery.... de esta manera el dbgrid ya te mostrara lo que quieres :D
En fin, las palabras claves que deberías buscar son, TQuery y Campos Calculados

AGAG4 25-07-2005 22:15:09

Checa esto....
 
Cuando quieras mostrar algún Resultado, en este caso la Multiplicación de Cantidad por Precio, te recomiendo que lo hagas antes de accesar al campo Resultante, es decir si capturas la Cantidad en una Celda del dbGrid al Presionar un ENTER ó TAB pasas a la Celda Resultante (si es que lo tienes de esta forma), la operación la pudieras hacer en el OnColExit de la Celda donde capturas la Cantidad. ejemplo:
Código Delphi [-]
procedure Tforma.dbgridColExit(Sender: TObject);
....
//Si estoy posicionado en la Celda Cantidad
if dbGrid.SelectedIndex = 2 then begin
  Importe : = Cantidad * Prec_Unitario;
....
end;

Espero me haya explicado....

Saludos....

Shidalis 25-07-2005 23:55:09

Muchas Gracias por su ayuda, ya me funciono!!!!!

vtdeleon 26-07-2005 01:03:02

Saludos

Si entendi bien, sugiero ll siguiente.

El evento OnCalcField del dataset se implementa para esto:D
Código Delphi [-]
procedure TForm1.Table1CalcFields(DataSet: TDataSet);
 begin
   with Table1 do begin
     FieldByName('Total').AsFloat:=FieldByName('Cantidad').Asfloat*FieldByName('Costo').AsFloat;
   end;
 end;
:D

el_barto 26-08-2005 20:51:31

Cita:

Empezado por vtdeleon
Saludos

Si entendi bien, sugiero ll siguiente.

El evento OnCalcField del dataset se implementa para esto:D
Código Delphi [-]
procedure TForm1.Table1CalcFields(DataSet: TDataSet);
begin
with Table1 do begin
FieldByName('Total').AsFloat:=FieldByName('Cantidad').Asfloat*FieldByName('Costo').AsFloat;
end;
end;
:D

Por que cuando coloco esta instruccion compilo mi programa y coloco por ejemplo en mi campo cantidad el numero 2, sebloquea totalmente el programa.

Esto me pasa despues de colocar esta instruccion.(Obviamente con los campos que uso)

Gracias

vtdeleon 26-08-2005 21:19:20

Saludos

Que error te da?

el_barto 26-08-2005 21:25:39

Ninguno, pero hice una tabla de prueba con los campos: campo1, campo2, campo3, campo4, en donde campo4 es la multiplicacion de los campos3 y campo2

Compilo coloco por ejemplo:

campo1 campo2 campo3 campo4
1 10 80

pero en el campo4 no pasa nada, doy tab paso a la sihuiente columna y ni aun asi pasa nada, :confused: pense que solo era colocar esta instruccion pero ya veo que no :confused:, entonces que es lo que me hace falta

el_barto 26-08-2005 21:26:32

esta es la instruccion usada:

Código Delphi [-]
 
procedure TForm1.IBDataSet1CalcFields(DataSet: TDataSet);
begin
with IBdataset1 do begin
     FieldByName('campo4').AsInteger:=FieldByName('campo2').AsInteger+FieldByName('campo3').AsInteger;
   end;
end;

vtdeleon 26-08-2005 21:40:31

Saludos

No veo nada anormal.:confuced:

Hagamos pruebas
Mostrando los datos de cada campo con un ShowMessage.
Código Delphi [-]
procedure TForm1.IBDataSet1CalcFields(DataSet: TDataSet);
begin
with IBdataset1 do begin
Showmessage(IntToStr(FieldByName('campo2').AsInteger));
Showmessage(IntToStr(FieldByName('campo3').AsInteger));
FieldByName('campo4').AsInteger:=FieldByName('campo2').AsInteger+FieldByName('campo3').AsInteger;
end;
Chequea a ver si contiene datos

el_barto 26-08-2005 22:15:53

chanfleeee nunca pasa por hay, por eso nunca calcula nada

el_barto 26-08-2005 22:25:06

Hola vt mira lo que lei en un foro viejo de trucomania:

Doble click sobre la tabla, y alli te sale el editor de campos.

Haces click con el boton derecho y escoges 'New Field'

Defines el campo y lo pones como tipo Calculado
y seguidamente use el codigo que posteaste en este hilo y funciona bien(por decirlo asi), lo que pasa es que no lo guardaria directamente en el campo4 si no que tendria que asignarlo en un evento del Dataset como por ejemplo beforeinsert. Asi lo hice yo, pero la verdad es que no he podido hacerlo, como tu dices.


La franja horaria es GMT +2. Ahora son las 05:49:31.

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