PDA

Ver la Versión Completa : Problemas con el DBGrid


Shidalis
06-12-2005, 19:44:15
Hola, como estan???

Quisiera que alguno de uds. me dijera como puedo multiplicar o realizar operaciones matematicas entre dos o mas campos de un DBGrid o por lo menos como sacar el valor de determinado campo del DBGrid a una variable.

De antemano muchas gracias.

El nuevo de Delphi :D

roman
06-12-2005, 20:29:30
El DBGrid estará enlazado a un dataset, por ejemplo un Table. Basta entonces que uses Table.FieldByName('campo').AsInteger o Table.FieldByName('campo').AsFloat, dependiendo del tipo de datos, para extraer el valor del registro actual- que será el seleccionado en el DBGrid.

Como comentario lateral, si estás haciendo cálculos entre campos de un mismo registro quizá te convenga considerar el uso de campos calculados, ya sea en la parte del cliente (añadiendo un campo calculado en el editor de campos del dataset y asignando el valor del cálculo en el evento OnCalcFields) o del lado del servidor (usando un Query y haciendo el cálculo en la sentencia SELECT).

Al hacer esto, puedes consultar el valor del campo calculado como con cualquier otro campo, usando FieldByName.

// Saludos

Shidalis
06-12-2005, 20:43:55
Ok ya tengo los campos calculados, aunque no los hice en el evento OnCalField, ya tengo los valores que necesito, solo necesito saber como introducir el valor calculado (q esta en una variable) en una columna que he creado en el dbgrid :rolleyes:

roman
06-12-2005, 21:00:12
Ok ya tengo los campos calculados, aunque no los hice en el evento OnCalField, ya tengo los valores que necesito, solo necesito saber como introducir el valor calculado (q esta en una variable) en una columna que he creado en el dbgrid

Pues ¿dónde, entonces, es que tienes los campos calculados? :confused:

Si vienen de una consulta SQL entonces aparecerán en el DBGrid (a menos que no los hayas incluido en el editor de campos). Y si no están en la consulta entonces justamente un campo calculado del lado del cliente y el evento OnCalcFields hacen que aparezca ya la columna en el DBGrid.

// Saludos

Shidalis
06-12-2005, 21:39:29
Gracias por la respuesta pero no estoy trabjando de esa manera, estoy trabajando " A Pie " tengo la consulta sql pero solo la muestro en el dbgrid posteriormente quiero calcular 2 campos que son cantidad * precio, los cuales ya los tengo calculados en una variable Total pero esta fuera de la consulta, ahora lo que quiero saber es si existe la manera de que pueda introducir el valor de Total dentro de una columna del DBGrid que esta vacia. O si existe otra forma mas facil (seguro que la hay pero no la se) de trabajar te agradeceria que me la explicaras ;)

roman
06-12-2005, 21:52:22
O si existe otra forma mas facil (seguro que la hay pero no la se) de trabajar te agradeceria que me la explicaras ;)

Pero si es justo lo que he estado haciendo !! Pero dices que de esa forma no estás trabajando. Entonces ¿qué es lo que quieres?

Para lo que describes bastaría que hagas una consulta


select *, campo*precio as total from tabla


y ya tienes tu DBGrid con la columna que muestra el total en cada registro.

Si quieres meter arbitrariamente un valor en una celda de un DBGrid en el momento que quieras pues no, eso no es posible. Un DBGrid no es como un StringGrid en el que pueden llenarse directamente las celdas. El DBGrid siempre tomará sus datos de un DataSet. Si los datos no están en el DataSet entonces nunca aparecerán en el grid.

// Saludos

Shidalis
06-12-2005, 22:24:44
Muchas gracias por tu ayuda, no he podido hacer la consulta pero ahi estoy :cool:

ContraVeneno
06-12-2005, 23:54:06
¿porque no se pudo con la consulta? ¿te marca algún error?

Como menciona Roman, la mejor manera de hacer lo que pides es con las dos opciones que ya te mencionó, campos calculados o directo en la consulta. Si no estas haciendolo de ninguna de esas dos formas, le estarías dando muchas vueltas a un asunto sencillo.

Shidalis
07-12-2005, 15:53:50
Tenian razon, me estaba matando la cabeza por nada, lo que pasa es que no sabia utilizar el evento OnCalcFields, pero ya aprendi y es mucho mas sencillo de lo que esperaba :rolleyes: