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 25-09-2012
Joser Joser is offline
Miembro
 
Registrado: sep 2012
Posts: 18
Poder: 0
Joser Va por buen camino
problemas con evento statechange del DataSource

buenas, nuevamente para pedir ayuda.
resulta que en una aplicacion de delphi 7 con db en sql server, tengo lo siguiente:
en el evento state change del data source habilito o no los botones y otros objetos de la siguiente forma:
Código Delphi [-]
if formusuarios <> nil then
  begin
    formusuarios.BTcancelar.enabled:= dsusuarios.state in [dsinsert, dsedit];
    formusuarios.BTnuevo.enabled:= dsusuarios.state = dsbrowse;
    .............
    .............
  end;

en el menu principal cuando llamo al formulario, con el cual tengo problemas, lo hago de la siguiente forma:
Código Delphi [-]
application.createform(tformusuarios, formusuarios);
datamodule.CLIENTusuarios.active:= true;
formusuarios.showmodal;

cuando cierro el formulario en el evento onclose coloco lo siguiente:
Código Delphi [-]
datamodule.CLIENusuarios.actve:= false;
formusuarios.release;
formusuarios:=nil;

y el problema es que cuando llamo al formulario a veces realiza el evento onstatechange del datasource y otras no.

si alguien me puede dar una mano con esto...

desde ya muchas gracias.
Responder Con Cita
  #2  
Antiguo 27-09-2012
Joser Joser is offline
Miembro
 
Registrado: sep 2012
Posts: 18
Poder: 0
Joser Va por buen camino
Thumbs up

si no me supe expresar alguien me puede decir??
gracias por su tiempo...
Responder Con Cita
  #3  
Antiguo 27-09-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Seguramente necesitamos ver más código o más explicaciones de tu parte, con esa información sólo podemos intentar adivinar.
Responder Con Cita
  #4  
Antiguo 27-09-2012
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 Joser.

Como comenta Casimiro, hay varios detalles que faltan conocer. Por tu código da la impresión que el TDataModule tiene acceso (incluye) a formusuarios, particularmente prefiero entablar la relación de modo inverso.

Quitando a formusuarios del comando uses de DataModule1, podrías hacer:
Código Delphi [-]
...
type
  Tformusuarios = class(TForm)
    BTCancelar: TButton;
    BTNuevo: TButton;
    procedure FormCreate(Sender: TObject);
    ... 
    procedure BTNuevoClick(Sender: TObject);
    procedure BTCancelarClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    FNotifyEvent: TNotifyEvent;
    procedure dsusuariosChange(Sender: TObject);
  public
  end;

var
  formusuarios: Tformusuarios;

implementation  

uses Unit2, // DataModule1
     DB;

procedure Tformusuarios.dsusuariosChange(Sender: TObject);
begin
  with DataModule1 do
  begin
    BTCancelar.Enabled := dsusuarios.State in[dsEdit, dsInsert];
    BTNuevo.Enabled    := dsusuarios.State = dsBrowse;
  end
end;

procedure Tformusuarios.FormCreate(Sender: TObject);
begin
  with DataModule1 do
  begin
    FNotifyEvent             := dsusuarios.OnStateChange; 
    dsusuarios.OnStateChange := dsusuariosChange;
    CLIENTusuarios.active    := True;  
    BTCancelar.Enabled       := dsusuarios.State in[dsEdit, dsInsert];
    BTNuevo.Enabled          := dsusuarios.State = dsBrowse;
  end
end;

...

procedure Tformusuarios.BTNuevoClick(Sender: TObject);
begin
  DataModule1.CLIENTusuarios.Insert;
end;

procedure Tformusuarios.BTCancelarClick(Sender: TObject);
begin
  DataModule1.CLIENTusuarios.Cancel;
end;

procedure Tformusuarios.FormClose(Sender: TObject;  var Action: TCloseAction);
begin
   DataModule1.dsusuarios.OnStateChange := FNotifyEvent;
end;

...

end.

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #5  
Antiguo 28-09-2012
Joser Joser is offline
Miembro
 
Registrado: sep 2012
Posts: 18
Poder: 0
Joser Va por buen camino
Thumbs up

Gracias por su respuesta... lo probé y de 10!!! muchísimas gracias...
éxitos...
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
problemas con evento OnMousseDown maycampana Varios 5 10-05-2012 19:23:45
Manejo del Evento On State Change del Datasource Utilizando un Datamodulo hondaalberto Conexión con bases de datos 4 20-04-2012 09:01:04
problemas con dataset en datasource josro0ck Conexión con bases de datos 1 24-05-2011 01:01:01
Problemas con evento OnPaint martha1982js API de Windows 4 14-07-2006 17:02:02
Problemas con DataSource nesetru Conexión con bases de datos 2 16-07-2003 13:18:46


La franja horaria es GMT +2. Ahora son las 12:13:45.


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