Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 04-06-2006
Choclito Choclito is offline
Miembro
 
Registrado: jul 2004
Posts: 169
Poder: 20
Choclito Va por buen camino
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
Responder Con Cita
  #2  
Antiguo 04-06-2006
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
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.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #3  
Antiguo 04-06-2006
celades1 celades1 is offline
Miembro
 
Registrado: ago 2005
Posts: 116
Poder: 19
celades1 Va por buen camino
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
Responder Con Cita
Respuesta



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
sumar la columna de un dbgrid pharaonhx Varios 3 12-06-2008 15:27:27
sumar columnas en stringgrid Choclito Varios 1 11-05-2006 15:26:59
Sumar en DBgrid Migpal Varios 2 18-11-2005 18:02:48
Sumar columnas en Rave Reports martita Impresión 0 18-11-2005 17:14:12
Sumar columnas de un DBGRID magm2000 Varios 3 27-09-2003 00:40:06


La franja horaria es GMT +2. Ahora son las 02:15:34.


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
Copyright 1996-2007 Club Delphi