Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 08-06-2004
chele chele is offline
Miembro
 
Registrado: feb 2004
Posts: 83
Poder: 21
chele Va por buen camino
problema tdbgrid

Buenas, tengo que hacer una cosa y no tengo ni idea, por mas que pienso no se me ocurre como hacerlo, a ver si me podeis dar la idea de pro donde tirar.

Es un tdbgrid con 3 campos.

A B C
500 100 100
500 100 300

A seria siempre el maximo.
B seria lo que queda de restar lo que pongo en C menos A menso B.

El unico valor que yo meto es C , A nunca cambia y B es el que me tiene que cambiar automatico.

La primera vez meto en C 100 entonces me queda B 400
La segunda vez meto en C 300 entonecs me queda en B 100

Cuadno meto una nueva va perfect, el problema es cuando meto por ejemplo una mas que sea 110, ahora la suma es 510 y no debe dejarme, ya que es mayor que A, el problema es como hago la suma, ya que si lo hago sobre el actual recordset me suma solo la fila, y si sumo por el total de datos de la base de datos tampoco por que el valor 110 todavia no se ha guardado ya que es erroneo y no me deja guardarlo ... uf no se si me explico.

El problema es que tengo que sumarlos dentro del tdbgrid antes de guardarlo en la base de datos, y yo hasta ahora hacia todos los calculos via base de datos y en este caso no puedo .... ¿alguna idea?.

Gracias anticipadas.
Responder Con Cita
  #2  
Antiguo 08-06-2004
Avatar de __marcsc
__marcsc __marcsc is offline
Miembro
 
Registrado: may 2003
Ubicación: Girona
Posts: 577
Poder: 22
__marcsc Va por buen camino
Cita:
Empezado por chele
El problema es que tengo que sumarlos dentro del tdbgrid antes de guardarlo en la base de datos, y yo hasta ahora hacia todos los calculos via base de datos y en este caso no puedo .... ¿alguna idea?.

Gracias anticipadas.
Esta frase me hace dudar. A qué te refieres con que tienes que hacerlo en el Grid antes que en la base de datos?

A mi me parece un problema que puede resolverse fácilmente con los eventos OnValidate y OnChange de los campos de la tabla/query a la que está asociado el grid. Cuando estás trabajando de este modo, los datos con los que trabajas no están aún en la base de datos, al menos hasta que hagas el post de la tabla.

Saludos.
Responder Con Cita
  #3  
Antiguo 08-06-2004
chele chele is offline
Miembro
 
Registrado: feb 2004
Posts: 83
Poder: 21
chele Va por buen camino
Yo ahora cuando cambio de columna hago unos calculos y le meti esto :

Código Delphi [-]
      while not qryautorizaciones.Eof do
      begin
      sumaimporte := sumaimporte + qryautorizacionesAutdto.value;
      sumaimporte1 := sumaimporte1 + qryautorizacionesDescMan.value;
      qryautorizaciones.next;
      end;

sumatotal := sumaimporte + sumaimporte1;


if (sumatotal - qryautorizacionesImporte1.value) > 0 then
raise exception.create('La cantidad autorizada supera la pendiente');

pero se me vuelve todo loco, esto es lo que quiero que haga pero se me vuelve loco el dbgrid

Última edición por __marcsc fecha: 08-06-2004 a las 18:31:53. Razón: uso de etiqueta delphi ;)
Responder Con Cita
  #4  
Antiguo 08-06-2004
chele chele is offline
Miembro
 
Registrado: feb 2004
Posts: 83
Poder: 21
chele Va por buen camino
Necesito poder recorrer todo el dbgrid y sumar dos columnas, en mi caso sumar todo C

¿Como hago esto?. Por que si lo hago con la base de datos se me vuelve todo loco ....
Responder Con Cita
  #5  
Antiguo 08-06-2004
Avatar de __marcsc
__marcsc __marcsc is offline
Miembro
 
Registrado: may 2003
Ubicación: Girona
Posts: 577
Poder: 22
__marcsc Va por buen camino
Cita:
Empezado por chele
Necesito poder recorrer todo el dbgrid y sumar dos columnas, en mi caso sumar todo C

¿Como hago esto?. Por que si lo hago con la base de datos se me vuelve todo loco ....
Cuando dices hacerlo con la base de datos te refieres por ejemplo a lanzar un "select sum"??

Puedes intentar tener otro DataSet ligado a la misma tabla física (o sea, a la misma a que apunta el DataSet con el que está enlazado el grid) y recorrer este DataSet. Te sirve?
Responder Con Cita
  #6  
Antiguo 08-06-2004
chele chele is offline
Miembro
 
Registrado: feb 2004
Posts: 83
Poder: 21
chele Va por buen camino
Uf te entiendo pero no se como hacerlo te lo juro.

Me podrais poner un ejemplo sencillo y ya me baso en el, es uqe no entiendo como leer todos los datos desde el onvalidate.

Ahora mismo tengo el onvalidate del campo pero cuando hago la pasada leyendo otra vez se me vuelve todo loco ....
Responder Con Cita
  #7  
Antiguo 08-06-2004
Avatar de __marcsc
__marcsc __marcsc is offline
Miembro
 
Registrado: may 2003
Ubicación: Girona
Posts: 577
Poder: 22
__marcsc Va por buen camino
Hola,

pues como te comento, yo creo que lo mejor sería que utilizaras los eventos de campos. Eso solo lo puedes hacer si tienes los campos agregados estáticamente a la tabla.

Una vez has echo esto, tienes cuatro eventos disponibles para cada campo.

Cuando tu estás navegando por tu DBGrid, en realidad lo que ves es una copia (caché) de los datos físicos.

El evento OnValidate se dispara cuando se escribe un nuevo valor para un registro de los que tienes en tu caché. Dentro de este evento, como su nombre indica, puedes validar si los datos que tiene en este momento el campo son correctos o no. Si no lo son, puedes lanzar una excepción.

El evento OnChange se dispara cada vez que hay un nuevo valor en el campo. Si antes tenías un 100 y le pones un 200, se disparará este evento, pero posteriormente a OnValidate.

Por qué te meto todo este rollo de la caché? Pues porqué hasta que la tabla que contiene los campos no haga n post o confirmación del registro, estos datos solo están en la caché, no en la BD.

Yo creo que con esto puedes solucionar el problema

Suerte.
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


La franja horaria es GMT +2. Ahora son las 04:39:28.


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