Ver Mensaje Individual
  #1  
Antiguo 09-02-2011
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Reputación: 10
marcoszorrilla Va por buen camino
Problema con un IbDataset;

D7 + Firebird 2.0.

Tengo un IbDataset ubicado en un Datamodulo lanzo una consulta y funciona correctamente, pero no la segunda vez y siguientes que me sigue mostrando los datos de la primera vez a pesar de que desconecto el DataSet y destruyo el Datamodulo en el que se encuentra.

Código Delphi [-]
[//Entrada desde el menú:
procedure TfrMenu.StockPPedido1Click(Sender: TObject);
begin
Listado:=3;
AbrirCerrar_Modulo_DmExisten(1);
Application.CreateForm(TfrExistencias, frExistencias);
frExistencias.ShowModal;
AbrirCerrar_Modulo_DmExisten(0);
end;


//Procedimiento que Crea y destruye el Datamodulo
Procedure AbrirCerrar_Modulo_DmExisten(N:Integer);
begin
  Case n of
  1:Application.CreateForm(TDmExisten ,DmExisten);
  2:FreeAndNil(DmExisten);
  end;
end;


//Código invocado en existencias.
procedure TfrExistencias.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action:=CaFree;
end;

procedure TfrExistencias.spbuscarClick(Sender: TObject);
begin
  if Length(edBuscar.Text) > 2 then
  DmExisten.IBDtsPVP.Locate('Producto',edBuscar.Text,[loPartialKey])
  else
  ShowMessage('ATENCION: Teclee al menos tres caracteres.');

end;
procedure TfrExistencias.FormActivate(Sender: TObject);
begin
{Listado
1 Todas
2 P. pedido =<0
3 Stock <= p.pedido
4 1 proveedor}

DmExisten.IbDtsPvp.Close;
DmExisten.IbDtsPvp.SelectSQL.Clear;


DmExisten.IbDtsPvp.SelectSQL.Add('Select * from Pvp Where Activo=''S''');

  case Listado of
  1:begin
    DmExisten.IbDtsPvp.SelectSQL.Add('And StockReal > 0');
    frExistencias.Caption:='Productos con existencias.';
    end;
  2:begin
    DmExisten.IbDtsPvp.SelectSQL.Add('And PPedido<= 0');
    frExistencias.Caption:='Productos con Punto de Pedido <= 0.';
    end;
  3:begin
    DmExisten.IbDtsPvp.SelectSQL.Add('And StockReal <= PPedido');
    frExistencias.Caption:='Productos con StockReal <= Punto de Pedido.';
    end;
  4:begin
    DmExisten.IbDtsPvp.SelectSQL.Add('And Codigo Starting With '+QuotedSTr(Codigo));
    frExistencias.Caption:='Existencias de Productos de '+cMensaje;
    end;
  end;

DmExisten.IbDtsPvp.SelectSQL.Add('Order by Producto');
ShowMessage(DmExisten.IbDtsPvp.SelectSQL.Text);
DmExisten.IbDtsPvp.Open;

DmExisten.IbDtsPvp.Last;

//sino hago esto la rejilla me muestra siempre los datos de la primera vez que entro
//y ya no me actualiza más, la rejilla está conectada al DataSource
DbgrExist.DataSource:=Nil;
Navega.DataSource:=Nil;
DbgrExist.DataSource:=DmExisten.DtsPvp;
Navega.DataSource:=DmExisten.DtsPvp;

//Esta parte funciona con y sin el código anterior.
//Devuelve bien el número de registros pero visualiza solo los de la primera consulta
lbRegistros.Caption:='Número de Productos:'+FormatFloat(',0',DmExisten.IbDtsPvp.RecordCount);
end;


procedure TfrExistencias.SpeedButton1Click(Sender: TObject);
begin
Application.CreateForm(TfrLstExistencias, frLstExistencias);
frLstExistencias.ListaExistencias.PreviewModal;
frLstExistencias.Close;
end;

Con el código en rojo he logrado que me funcione, ahora el problema es que tengo conectado un QuickRep al mismo DataSet y siempre me lanza el mismo listado, es decir el de la primera consulta. ???

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.

Última edición por marcoszorrilla fecha: 09-02-2011 a las 12:46:45.
Responder Con Cita