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 Buscar Temas de Hoy Marcar Foros Como Leídos

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 13-03-2015
mramos65 mramos65 is offline
Miembro
 
Registrado: jun 2006
Ubicación: Mèxico
Posts: 26
Poder: 0
mramos65 Va por buen camino
Question Refrescar Campo Calculado (TOTAL) de Dbgrid

Uso Delphi 7 y tablas *.dbf, consultas Sql, Dataset; tengo dos tablas

produccion (maestro)
OP
PRODUCTO

entregas (detalle)
OP
SALIDA
ENTRADAS

La tabla detalle se actualiza cuando maestro cambia de OP
Calcule la suma de la columna ENTRADAS pasandolo a Edit1, no encuentro la forma de actualizarlo cada que se actualize el GRID detalle, algo asi como afterscroll? o como sería, espero explicarme bien y dar los datos suficientes.

SALUDOS
Responder Con Cita
  #2  
Antiguo 13-03-2015
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is online now
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.022
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
En el change del dataset.
Pero si es calculado, donde siempre, en el onCalculate
Responder Con Cita
  #3  
Antiguo 15-03-2015
mramos65 mramos65 is offline
Miembro
 
Registrado: jun 2006
Ubicación: Mèxico
Posts: 26
Poder: 0
mramos65 Va por buen camino
Refrescar Campo Calculado (TOTAL) de Dbgrid

Hola:

de las dos opciones posibles acoto que la PRIMERA no logro ubicarla y es la que me serviría supongo,
ya que la SEGUNDA la he ultilizado para sumar campos calculados agregados en una columna del Dbgrid, aqui lo que realice es sumar una columna del Dbgrid detalle y pasarlo a Dbedit1, pero quiero que se actualice cada que cambie el Grid detalle, se podria?


GRACIAS Y SALUDOS
Responder Con Cita
  #4  
Antiguo 15-03-2015
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola mramos65.

Tal como lo planteaste, para obtener la sumatoria de la columna ENTRADAS resultante de la relacion master-detail, vas a necesitar un query adicional para obtener ese resultado.

Suponiendo que tus queries se llamen "qyProduccion" y "qyEntregas", tendrías que hacer algo similar a este ejemplo:
Código Delphi [-]
procedure TForm1.qyEntregasAfterScroll(DataSet: TDataSet);
begin
  with TQuery.Create(nil) do
  try
    DataBaseName:= 'TU_ALIAS_O_RUTA_A_BD'; // (ruta o alias a tu base de datos)
    SQL.Text:= 'SELECT SUM(ENTRADAS)AS SUMA FROM ENTREGAS WHERE OP = :OP';
    ParamByName('OP').Value:= qyEntregas.FieldByName('OP').Value;
    Open;
    if not IsEmpty then
      Edit1.Text:= FieldByName('SUMA').AsString;
    Close;
  finally
    Free;
  end;
end;

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #5  
Antiguo 16-03-2015
mramos65 mramos65 is offline
Miembro
 
Registrado: jun 2006
Ubicación: Mèxico
Posts: 26
Poder: 0
mramos65 Va por buen camino
Unhappy

Hola ecfisa:
Gracias por tu ayuda:

[code]Tal como lo planteaste, para obtener la sumatoria de la columna ENTRADAS resultante de la relacion master-detail, vas a necesitar un query adicional para obtener ese resultado.

Suponiendo que tus queries se llamen "qyProduccion" y "qyEntregas", tendrías que hacer algo similar a este ejemplo:
Código Delphi [-]
procedure TForm1.qyEntregasAfterScroll(DataSet: TDataSet);
begin
  with TQuery.Create(nil) do
  try
    DataBaseName:= 'TU_ALIAS_O_RUTA_A_BD'; // (ruta o alias a tu base de datos)
    SQL.Text:= 'SELECT SUM(ENTRADAS)AS SUMA FROM ENTREGAS WHERE OP = :OP';
    ParamByName('OP').Value:= qyEntregas.FieldByName('OP').Value;
    Open;
    if not IsEmpty then
      Edit1.Text:= FieldByName('SUMA').AsString;
    Close;
  finally
    Free;
  end;
end;
Ya tengo los Dbgrid Maestro y Detalle, con las columnas correspondientes:

produccion (maestro)
OP
PRODUCTO

entregas (detalle)
OP
SALIDA
ENTRADAS

y ya sume la columna "ENTRADAS" del Dbgrid Detalle

Se creo un Dbedit1 al cual le asigne el valor de la suma de la columna "ENTRADAS"

La pregunta es como hago que el Dbedit1 se actualice al cambiar la OP de la tabla Maestro y por consiguiente el valor de la suma en la columna "ENTRADAS" de la tabla detalle?

Espero haberme explicado bien y MUCHAS GRACIAS.

Última edición por nlsgarcia fecha: 16-03-2015 a las 15:36:49. Razón: Sintaxis Delphi
Responder Con Cita
  #6  
Antiguo 16-03-2015
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola mramos65.
Cita:
La pregunta es como hago que el Dbedit1 se actualice al cambiar la OP de la tabla Maestro y por consiguiente el valor de la suma en la columna "ENTRADAS" de la tabla detalle?
Si utilizas un TEdit como mencionaste en tu primer mensaje, usando el código del mensaje #4 en el evento AfterScroll de la tabla detalle (ENTREGAS).

Pero como ahora has cambiado el TEdit por un TDBEdit... la cosa cambia. Agrega otro componente Query y otro DataSource, es decir que tendrías 3 TQuery y 3 TDataSource:
Código:
qyProduccion <- dsProduccion
qyEntregas   <- dsEntregas
qySumatoria  <- dsSumatoria
Luego este código en el evento OnCreate del form:
Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
const
  DBNAME = 'TU_ALIAS_O_RUTA_A_BD';
begin
  // DataSources
  dsProduccion.DataSet:= qyProduccion;
  dsEntregas.DataSet  := qyEntregas;
  dsSumatoria.DataSet := qySumatoria;

  // Queries
  with qyProduccion do
  begin
    Close;
    DatabaseName:= DBNAME;
    SQL.Text:= 'SELECT OP, PRODUCTO FROM PRODUCCION';
    Open;  
  end;

  with qyEntregas do
  begin
    Close;
    DataBaseName:= DBNAME;
    DataSource  := dsProduccion;
    SQL.Clear;
    SQL.Add('SELECT OP, ENTRADAS, SALIDAS');
    SQL.ADD('FROM ENTREGAS WHERE OP = :OP');
    Open;
  end;

  with qySumatoria do
  begin
    Close;
    DatabaseName:= DBNAME;
    DataSource  := dsProduccion;
    SQL.Clear;
    SQL.Add('SELECT SUM(ENTRADAS) AS SUMA');
    SQL.Add('FROM ENTREGAS WHERE OP= :OP');
    Open;
  end;
  // DBEdit
  DBEdit1.DataSource:= dsSumatoria;
  DBEdit1.DataField := 'SUMA';
end;
Todo esto lo realicé en tiempo de ejecución a efectos de clarificar y evitar equívocos, pero podes hacerlo desde el Object Inspector en tiempo de diseño.

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Suma del Total de un campo calculado José Luis Garcí SQL 4 23-09-2010 09:41:15
DBGRID, campo calculado... Vichomo Conexión con bases de datos 4 03-08-2007 23:37:11
crear campo calculado en dbgrid tesorillo3 MySQL 0 01-02-2007 01:36:29
Pasar un campo calculado a un campo del mismo DbGrid maravert Conexión con bases de datos 3 12-05-2006 01:31:30
Campo Calculado en DBGrid Agar23 Tablas planas 0 07-11-2003 10:05:50


La franja horaria es GMT +2. Ahora son las 10:47:34.


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