Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Pasar un campo calculado a un campo del mismo DbGrid (https://www.clubdelphi.com/foros/showthread.php?t=31599)

maravert 11-05-2006 19:29:47

Pasar un campo calculado a un campo del mismo DbGrid
 
Hola a todos, espero me ayuden en esto.


Tengo dos tabla (pedidos.db y productos.db), en la tabla pedidos lo tengo en DBgrid, en el se tiene los campos (cantidad, precio, e importe (este es el campo calculado)),¿ Como paso el campo calculado importe a otro campo de la misma tabla? y claro grabo todo el registro.

Tambien si me pueden ayudar en esto:

¿Como obtengo la suma de todos los campos calculados (importe) y los paso a una variable?


¿Como pasar de una celda a otra usando la tecla Enter?


Gracias de antemano por sus ayudas


Cordialmente

Alemar

freelance 11-05-2006 22:19:51

Pues ...
 
No te hace falta hacer tal cosa.

En el evento onBeforePost del Dataset haz el mismo cálculo que haces en el evento OnCalcFields sobre el campo calculado pero usando el campo de la tabla en donde quieres dejar el valor de dicho calculo.

De todas maneras, desde mi punto de vista, es un error el almacenar el total de la suma de las lineas detail en la master, ya que si lo haces, redundas información y "eso va contra las buenas costumbres".
Claro, es cómodo tener el "valor" disponible en la master para ser fácilmente mostrado, pero no es un buen sistema.
El sistema correcto es que cada vez que necesites mostrar el valor de la suma de las líneas detalle utilizes el sistema de "campo calculado" en la master y que sea en el método onCalcFields de dicha master dónde sumes cada una de las lineas detalle sobre dicho campo calculado, recorriendo una a una las líneas detalle para ir sumando. Además en esa suma puedes utilizar el campo calculado de las líneas detalle (el que te calcula el total de la línea) o realizar el cálculo de cada línea nuevamente.
Eso sí, debes hacerlo utilizando otro Dataset de lineas detail diferente al asociado al master para realizar el cálculo pues si no, al ir avanzando en los registros de dicho Dataset provocaras que se refresquen los controles DB del formulario que tengan asociado dicho Dataset o un Datasource del mismo.
Recuerda que ese Dataset "auxiliar" que utilices, debe tamiben tener asociado como MasterSource el Datasource de la Master, o bien, utilizar SetRange para delimitar los registros que intervienen en la suma.

Tambíen es buena idea (ya que tendrás que utilizar ese "total de suma de líneas detail es más de un lugar (otros Forms, Reports, etc...) y para no tener que repetir en cada sitio el mismo procedimiento) el que esbribas una función de librería que haga la suma de las líneas detalle y así lo podrás utilizar en cuantos sitios quieras (en los OncalcFields de la master, en Reports, etc...)

Espero haberte ayudado ...

freelance 11-05-2006 22:45:25

Se me olvidaba ...
 
para usar Enter en vez de Tab en los TEdit:

procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
if TForm(Sender).ActiveControl is TEdit then
if key = #13 then begin
key := #0; // como si no pulsasemos nada
Perform(WM_NEXTDLGCTL, 0, 0); // saltamos al siguiente control
end;
end;

Por cierto: Es necesario poner a True la propiedad KeyPreview del Form.


para usar Enter en vez de Tab para cambiar de columna en los TStringGrid

procedure TForm1.StringGrid1KeyPress(Sender: TObject; var Key: Char);
begin
if key = #13 then
begin
key := #0;
with TStringGrid(Sender) do
if col+1 < colCount then
col := col+1;
end;
inherited;
end;

en un TDBGrid:

procedure TForm1.DBGrid1KeyPress(Sender: TObject; var Key: Char);
begin
if key = #13 then
begin
key := #0;
with TDBGrid(Sender) do
if SelectedIndex+1 < FieldCount then
SelectedIndex := SelectedIndex+1;
end;
inherited;
end;


espero haberte ayudado ...

maravert 12-05-2006 00:31:30

Gracias
 
Hola, Gracias por responderme, entonces quiere decir que:

¿ Cuando se crea un campo calculado este se añade "automaticamente" al registro de la tabla? y si es asi entonces porque no aparece este campo al visualizar la tabla.

La idea de grabar este importe en la tabla, es que de alli los datos seràn exportados a otra tabla que maneja otro programa y el campo importe lo utiliza para la informaciòn de facturas.

Para este caso si necesito pasar el campo calculado a otro campo, si es que me lo pudes explicar màs te lo agradeceria mucho.


Perdon por preguntar lo que para muchos es obvio, pero no lo sè


Gracias

Cordialmente

Alemar


La franja horaria es GMT +2. Ahora son las 01:22:13.

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