marcoszorrilla
09-02-2011, 12:25:34
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.
[//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.
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.
[//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.