Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   sumar columnas en un dbgrid (https://www.clubdelphi.com/foros/showthread.php?t=32376)

Choclito 04-06-2006 04:43:52

sumar columnas en un dbgrid
 
hola amigos del foro comentarles q queria editar datos (que esten en un dbgrid) de un query eso lo hice con un query y update hasta ahi todo bien
el problema es q ahi tengo dos columnas una del debe y haber y cuando el usuario registre solo una de ellas tiene q ser mayor a cero y la otra cero

Como controlo para q solo una de ellas sea mayor a cero cuando se registre?

Otra consulta es que quiera q mientras vaya registrando las cantidades tanto en el debe y haber en el dbgrid me muestre una sumatoria en edit q esten abajo del dbgrid tanto del debe y haber
Muchas gracias por la ayuda que me brinden

marcoszorrilla 04-06-2006 11:52:17

Respondiendo a la primera. En el evento AfterPost, de ambos campos compruebas no que son mayor a 0, que también hay números negativos,

If MiCampo <> 0 then
MiOtroCampo = 0


Un Saludo.

celades1 04-06-2006 11:55:39

Hola

Yo no trabajo con query sino con tfibdataset pero para el caso creo sera lo mismo.

Para lo primero i lo segundo tienes el evento onsettext de los field del query
Suponiendo que debe1,haber1,edit1 son los tdbedit donde enseñas el sumatorio del debe,haber y saldo

Código Delphi [-]
procedure TForm1.queryDEbeSetText(Sender: TField;const Text: String);
var valor,valor1,old_debe : double;
begin
  if (trim(text)<>'') and (queryhaber.asfloat<>0) then
  raise Exception.Create( 'Haber no es 0 ' ) 
  else begin
  old_debe:= sender.asfloat;
  sender.asfloat:=strtofloat(text);
  valor:=strtofloat(edit1.text);
  valor1:=strtofloat(debe1.text);
  valor:=valor+sender.asfloat-old_debe;
  valor1:=valor1+sender.asfloat-old_debe;
  edit1.text:=formatflot('0.##',valor);
  debe1.text:=formatflot('0.##',valor1);
  end;
end;
 
procedure TForm1.queryghaberSetText(Sender: TField;const Text: String);
var valor,valor1,old_haber : double;
begin
  if (trim(text)<>'') and (querydebe.asfloat<>0) then
  raise Exception.Create( 'El Debe no es 0 ' ) 
  else begin
  old_haber:=sender.asfloat;
  sender.asfloat:=strtofloat(text);
  valor:=strtofloat(edit1.text);
  valor1:=strtofloat(haber1.text);
  valor:=valor-sender.asfloat+old_haber;
  valor1:=valor1+sender.asfloat-old_haber;
  edit1.text:=formatflot('0.##',valor);
  haber1.text:=formatflot('0.##',valor1);
  end;
end;



o bien otra manera de hacer seria esta



Código Delphi [-]
procedure TForm1.queryDEbeSetText(Sender: TField;const Text: String);
var valor,valor1,valor2,old_debe : double;
begin
   if (trim(text)<>'')  then begin
   old_debe:=sender.asfloat;
   sender.asfloat:=strtofloat(text);
   valor:=strtofloat(edit1.text);
   valor1:=strtofloat(debe1.text);
   valor:=valor+sender.asfloat-old_debe;
   valor1:=valor1+sender.asfloat-old_debe;
   debe1.text:=formatflot('0.##',valor1);
         if (queryhaber.asfloat<>0) then begin
         valor2:=strtofloat(haber1.text);
         valor:=valor+queryhaber.asfloat;
         valor2:=valor2-queryhaber.asfloat;
         queryhaber.asfloat:=0;
        haber1.text:=formatflot('0.##',valor2);
         end;
   edit1.text:=formatflot('0.##',valor);
   end;
end;
 
 
procedure TForm1.queryHaberSetText(Sender: TField;const Text: String);
var valor,valor1,valor2,old_haber : double;
begin
   if (trim(text)<>'')  then begin
   old_haber:= sender.asfloat;
   sender.asfloat:=strtofloat(text);
   valor:=strtofloat(edit1.text);
   valor1:=strtofloat(haber1.text);
   valor:=valor-sender.asfloat+old_haber;
   valor1:=valor1+sender.asfloat-old_haber;
   haber1.text:=formatflot('0.##',valor1);
         if (querydebe.asfloat<>0) then begin
         valor2:=strtofloat(debe1.text);
         valor:=valor-querydebe.asfloat;
         valor2:=valor2-querydebe.asfloat;
         querydebe.asfloat:=0;
         debe1.text:=formatflot('0.##',valor2);
         end;
   edit1.text:=formatflot('0.##',valor);
   end;
end;


Creo que deberia funcionar pero no lo he probado, supongo abra errores de sintaxis y algun signo erroneo ya que lo he escrito sobre la marcha.
Sino tambien tienes el evento on change de los fields o el oncalcfields del query

Saludos


La franja horaria es GMT +2. Ahora son las 00:26:19.

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