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 11-05-2006
maravert maravert is offline
Miembro
 
Registrado: jul 2004
Ubicación: Xalapa, México
Posts: 158
Poder: 20
maravert Va por buen camino
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
Responder Con Cita
  #2  
Antiguo 11-05-2006
freelance freelance is offline
Registrado
 
Registrado: may 2006
Posts: 9
Poder: 0
freelance Va por buen camino
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 ...
Responder Con Cita
  #3  
Antiguo 11-05-2006
freelance freelance is offline
Registrado
 
Registrado: may 2006
Posts: 9
Poder: 0
freelance Va por buen camino
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 ...

Última edición por freelance fecha: 11-05-2006 a las 23:14:33.
Responder Con Cita
  #4  
Antiguo 12-05-2006
maravert maravert is offline
Miembro
 
Registrado: jul 2004
Ubicación: Xalapa, México
Posts: 158
Poder: 20
maravert Va por buen camino
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
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
DBGrid... agregar un campo calculado...? BlueSteel Varios 4 05-02-2009 19:40:37
Editar campo calculado en DBGrid Johnny Q OOP 1 19-07-2005 22:55:01
Campo calculado como checkbox de DBGrid javiermorales OOP 1 10-12-2004 11:50:24
Actualizar campo calculado de DBGrid Agar23 Varios 3 12-11-2003 08:27:36
Campo Calculado en DBGrid Agar23 Tablas planas 0 07-11-2003 09:05:50


La franja horaria es GMT +2. Ahora son las 04:55:36.


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