FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
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. |
#2
|
||||
|
||||
Cita:
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. |
#3
|
|||
|
|||
Yo ahora cuando cambio de columna hago unos calculos y le meti esto :
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 ;) |
#4
|
|||
|
|||
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 .... |
#5
|
||||
|
||||
Cita:
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? |
#6
|
|||
|
|||
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 .... |
#7
|
||||
|
||||
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. |
|
|
|