Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 09-02-2011
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 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
  #2  
Antiguo 09-02-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.044
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
¿Y en qué momento creas la nueva consulta?, la que sustituye a la anterior.
Responder Con Cita
  #3  
Antiguo 09-02-2011
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 30
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Hola Marcos.

Al parecer esto se debe a que la primera instancia del módulo de datos no es realmente destruida en AbrirCerrar_Modulo_DmExisten. Y cuando llamas de nuevo a este procedimiento se crea una segunda instancia, quedando la primera todavía asociada con los objetos de la interfaz de usuario. Parte del problema está en el uso del valor 0, cuando el procedimiento requiere el valor 2 (se recomienda el uso de constantes con nombre para evitar estas discrepancias).

Pero, además, debes asegurarte de no destruir el módulo de datos mientras haya instancias de formularios relacionadas con él. Pues la destrucción de una instancia de módulo de datos para en seguida crear otra, aunque la asignes a la misma variable global (DmExisten), no hará que los formularios existentes se reasocien en automático al nuevo módulo (quedarían más bien sin conjuntos de datos asociados por haber sido destruidos éstos al liberar el primer módulo de datos).

Espero te ayude a solucionar el problema.

Un abrazo modulado.

Al González.

Última edición por Al González fecha: 09-02-2011 a las 16:35:29.
Responder Con Cita
  #4  
Antiguo 09-02-2011
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Gracias por las sugerencias, mañana haré más pruebas y os cuento.

Por cierto Al, de mano acabo de ver el terrible fallo, es decir llamar con 0 cuando necesita 2, haré un cambio para que el 0 sea cerrar y seguro que funciona.

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 23:20:23.
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
Problema con el IBDATASET ingabraham Varios 5 22-06-2010 23:29:26
Problema con la actualización IBDataset Vlady Conexión con bases de datos 6 04-12-2006 05:40:38
uso del IBDataSet Giniromero Conexión con bases de datos 21 10-07-2006 00:12:47
Problema con filtro en IBDataset senpiterno Conexión con bases de datos 2 31-01-2005 00:19:51
Problema con ibDataSet y parametros. Nuria Conexión con bases de datos 8 01-08-2003 10:40:50


La franja horaria es GMT +2. Ahora son las 08:48:28.


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