PDA

Ver la Versión Completa : Insertar campo calculado con Clientdataset


JJMR2009
18-06-2011, 20:41:29
Buenas Soy Nuevo en Delphi, mi problema es que tengo una tabla de memoria con clientdataset, y tengo campos calculados Total es igual a precio x cantidad, en el grid me los muestra pero en el momento de guardar a la tabla todos los registros guardan menos el de total que es el campo calculado.

Como puedo guardar el valor de dicho campo. este es mi código para guardar en la tabla


With ADOCONNECTION1 do
begin
Connected := True;
With ADOTABLE1 do
begin
Active := True;
CDS.ApplyUpdates(0);
Active := False;
end;


Gracias de antemano

ecfisa
18-06-2011, 21:16:24
Hola JJMR2009.

Precisamente la idea del campo calculado es que no resida fisicamente en la en la consulta/tabla, permitiendo ahorrar espacio de almacenamiento y evitando redundancias. Un ejemplo típico de este, es una tabla donde tenemos los campos: Nombre y Apellido y deseamos mostrar nombre completo. Usamos el campo calculado para concatenar Nombre + Apellido.

Si tenés necesidad de que el resultado del campo calculado este en la tabla, deberías crear un campo físico para el mismo, pero no me parece buena idea.

¿Por que motivo queres guardarlo ?

Saludos.

Nota: Por favor cuando pongas código Delphi encerralo entre las etiquetas , gracias.

JJMR2009
18-06-2011, 21:59:27
Deseo guardar el campo calculado porque estoy tratando de hacer una lista de pedidos mediante un dbgrid conectado a clientdataset, adotable1, datasetprovider, al ingresar una linea debo calcular el total precio x cantidad y almacenar el total, para luego saber cuanto compró un cliente en particular.

También necesitaba algo parecido para descontar del inventario....
Gracias... Buen día para todos.

ecfisa
18-06-2011, 22:23:14
Hola.

al ingresar una linea debo calcular el total precio x cantidad y almacenar el total, para luego saber cuanto compró un cliente en particular.

Segun entiendo en cada línea el campo calculado corresponde al subtotal de cantidad x precio de un comprobante (factura por ej.) y al finalizar querés obtener la sumatoria de los subtotales como el total de la compra realizada.

Si es así, te podrías valer de una variable para ir acumulando los subtotales o calcularlo al terminar la emisión de líneas y luego guardarlo.

Como implementes eso dependerá de como esté organizada la información, las líneas que mencionas ¿ Corresponden a una tabla detalle del comprobante ?

Saludos.

JJMR2009
18-06-2011, 22:48:06
Hola.



Segun entiendo en cada línea el campo calculado corresponde al subtotal de cantidad x precio de un comprobante (factura por ej.) y al finalizar querés obtener la sumatoria de los subtotales como el total de la compra realizada.

Si es así, te podrías valer de una variable para ir acumulando los subtotales o calcularlo al terminar la emisión de líneas y luego guardarlo.

Como implementes eso dependerá de como esté organizada la información, las líneas que mencionas ¿ Corresponden a una tabla detalle del comprobante ?

Saludos.


Si tengo una tabla "Ventas", donde quiero almacenar el cliente, el articulo, cantidad, Precio, y total. de cada una de la lineas de la factura. Todo me guarda bien pero no logro guardar el total de precio x cantidad. por lo que comentaba antes que el campo total es un campo calculado en un clientdataset...

Creo que si es como tu dices, sólo que no se el codigo para hacerlo...

Gracias por tus respuestas.

ecfisa
18-06-2011, 23:14:49
Hola.

Creo que no estoy entendiendo como tenes organizada la información...

¿ Podrías especificar someramente la estructura de la tabla cabecera (cliente, total, etc) y la de detalle (producto, cantidad, precio, subtotal) ?


Saludos.

JJMR2009
18-06-2011, 23:50:58
Ok: Tengo un dbgrid asociado a un clientdataset, DatasetProvider, Datasorse, y una tabla Ventas...

Voy ingresando lineas al Dbgrid así:

with CDS do
begin
Append;
FieldByname('Cantidad').AsFloat := strtofloat(cant.Text);
FieldByname('Articulo').AsString := Articulo.Text;
FieldByname('Precio').AsString := Precio.Text;
Post;


El problema es que si cambio la cantidad, lógicamente el subtotal debe cambia en esa linea. Bien eso en pantalla lo hago con un campo calculado del clientdataset.

Los campos de esta tabla "Ventas" son documento, Articulo, Precio, Cantidad, Total, fecha. Estoy Trabajando con access... Disculpa mi ignorancia... Gracias

JJMR2009
19-06-2011, 00:38:01
Hola.

Creo que no estoy entendiendo como tenes organizada la información...

¿ Podrías especificar someramente la estructura de la tabla cabecera (cliente, total, etc) y la de detalle (producto, cantidad, precio, subtotal) ?


Saludos.


GRACIASSSS....Por la aclaración , ya pude solucionar mi problema. Si era como Ud decía. No había necesidad de grabar ese campo calculado. Ya en una consulta aparte se calcula