Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 12-01-2007
Gangster Gangster is offline
Miembro
 
Registrado: nov 2006
Posts: 36
Poder: 0
Gangster Va por buen camino
Question Problema dbGrid y Query

Hola es mi segundo problema que me enfrento en este delphi 7 y ademas mi sgeundo post se me hace aqui que me han ayudado muy bien, lo que tengo es una forma con un dbgrid apuntando su datasource a una tabla tipo detail, etonces en el dbgrid tengo columnas de precio unitario y cantidad de articulos y lo mando a la columna total que es una columna del dbgrid , el dbgrid lo pongo en modo edit porque a manera que le usuario de una cantidad de articulos de un producto, esta se multiplica por el precio del producto y se pone como registro de la columna total la multiplicacion de estos lo que quiero es como hago que estos registros de la columna total y quiero sumarlos todos y le hago un total de la sumatoria, ya hice un query que es este

select sum(FacTotal) from FacDetail.db

donde "factotal" es el nombre de la columna de la tabla de la base de datos "FacDetail" pero al ponerlo en el evento que hago la multiplicacion de la cantidad por el precio del producto que es el evento "ColMOve" del dbgrid, se dispara ese evento la cosa es que el sum del query que esta dentro de este evento, no me da ningun valor entonces como funciona un query en una tabla detail y ademas que es con cache update la tabla, entonces el query lo quiero hacer en el momento de que ellos estan haciendo ahi su factura para que se vaya visualizando la suma total de los registros de la columna importe osea que me lo de el showmessage ya sabre yo donde lo echo si a un edit o en un dialog pero primero empezar que me vaya dando bien la suma.

Gracias y ojala y se me entienda es dificil explicar siempre sin codigo pero la verdad ahi poco codigo en mi forma hecha y lo mas importante es esta parte ya la suma total de su factura de algun cliente.
Responder Con Cita
  #2  
Antiguo 12-01-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Creo que deberías usar el evento OnCalcFields del propio dataset para hacer las sumas; El ttable tiene otra propiedad relacionada con CalcFields de tipo Boolean.

Antes de hacer los cálculos, pregunta por los valores de los campos implicados en la suma, ya que uno de ellos puede estar en blanco y la suma no se lleve a cabo. Recuerda que cualquier operación con un campo que tenga el valor NULL, el resultado será NULL (mira la ayuda, hay alguna excepción).

Otra opción es lanzar tu consulta de suma, en el evento BeforePost de la tabla detail. Si, suena un poco raro pero no es así. Al grabar una linea, se dispara la suma, se actualiza el campo total de la tabla maestra, se guarda la tabla maestra, y por último se continúa grabando la tabla detalle.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #3  
Antiguo 12-01-2007
Avatar de TrUnkS
TrUnkS TrUnkS is offline
Miembro
 
Registrado: dic 2005
Posts: 93
Poder: 19
TrUnkS Va por buen camino
Yo lo hice de la siguiente manera: Supongamos que tienes en el DBGrid los siguientes campos de tu tabla detalles: CANTIDAD, DETALLE, PRECIO UNITARIO, TOTAL en este mismo orden, y quieres que la suma de todos los totales pasen a un label. En el evento OnKeyPress del DBGrid pones

Código Delphi [-]
if Key = #13 then  //  Si se pulsa la tecla ENTER en el Grid
  begin
   if DBGrid1.Fields[0].Value = Null then
    DBGrid1.Fields[0].AsFloat := 1; // CANTIDAD
   if DBGrid1.Fields[2].Value = Null then
    DBGrid1.Fields[2].AsFloat := 0; // PRECIO UNITARIO
   DBGrid1.Fields[3].AsFloat := DBGrid1.Fields[0].AsFloat * DBGrid1.Fields[2].AsFloat; // TOTAL
   LabelSumaTotal.Caption:='0'; // 
   TDetalles.First; // primer registro tabla Detalles
   While TDetalles.Eof=False do
    begin
     DBGrid1.Fields[3].AsFloat := DBGrid1.Fields[0].AsFloat * DBGrid1.Fields[2].AsFloat;
     LabelSumaTotal.Caption:=FloatToStr(DBGrid1.Fields[3].AsFloat + StrToFloat(LabelSumaTotal.Caption));
     LabelImpuesto.Caption:=FloatToStr(StrToFloat(LabelSumaTotal.Caption) * 0.19);  // 0.19 es el impuesto
     LabelTotal:=FloatToStr(StrToFloat(Label1SumaTotal.Caption) + StrToFloat(LabelImpuesto.Caption));
     TDetalles.Next; // siguiente registro tabla Detalles
    end;
   DBGrid1.Fields[1].FocusControl; // El cursor se posiciona en columna Detalles de la tabla Detalles
  end;

Con esto cuando el usuario vaya ingresando datos sabras a cada instante los totales. Saludos

Última edición por TrUnkS fecha: 12-01-2007 a las 17:10:22.
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
Query con DBgrid Pskotler C++ Builder 0 10-08-2006 15:48:38
Problema con DBGrid y Query...Ayuda por favor! AFilth Varios 2 03-11-2005 16:42:17
columna en dbgrid con un query davidgaldo SQL 2 25-08-2004 19:15:33
Actualizar Query-Dbgrid Walter SQL 5 13-06-2003 05:21:58
DBGrid y Query dvdjr SQL 13 19-05-2003 17:32:37


La franja horaria es GMT +2. Ahora son las 22:56:47.


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