Ir para conteúdo
Fórum Script Brasil
  • 0

Estados da tabela


Jesc

Pergunta

Bom dia a todos!

Tenho um projeto com varios forms de cadastro. E gostaria de cria uma função/procedure genérica para a manipulação dos estados da tabela para os botões de Inserir, excluir, editar, gravar, cancelar. estou usando um DataModule com TTable e TDataSource. Alguém poderia ajudar?

Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0
E gostaria de cria uma função/procedure genérica para a manipulação dos estados da tabela para os botões de Inserir, excluir, editar, gravar, cancelar. estou usando um DataModule com TTable e TDataSource. Alguém poderia ajudar?
Jesc, se eu compreendi direito sua necessidade, talvez um dos itens que abordo no tutorial Consulta E Cadastro De Dados - [1] Tela "combo" lhe seja util - dê atenção na parte em que aparece "O evento OnStateChange do TDataSource ...". Sugiro que você leia os comentários e baixe o exemplo para testar como funciona esta questão da manipulação dos estados da tabela.

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0

Estou Fazendo o seguinte no evento OnStateChange para cada DataSource:

frCadForn.btNovo.Enabled := (Sender as TDataSource).State in [dsBrowse];
  frCadForn.btGrava.Enabled := (Sender as TDataSource).State in [dsEdit, dsInsert];
  frCadForn.btCance.Enabled := frCadForn.btGrava.Enabled;
  frCadForn.btExclu.Enabled := frCadForn.btNovo.Enabled;
  frCadForn.btConsu.Enabled := frCadForn.btNovo.Enabled;
  frCadForn.btSair.Enabled := frCadForn.btNovo.Enabled;
Porém, quando o programa está funcionando, abro, por exemplo a tela de Cadastro de clientes e funciona normalmente o código acima. Mas quando fecho essa tela de cadastro de clientes e abro ela novamente o código acima não funciona, ou seja, todos os botões estão habilitados. No evento Onclose do Form desse cadastro eu faço:
frCadClien := nil;
 action := cafree;
E na chamada desse form de cadastro faço:
if frCadClien = nil then
      application.CreateForm(Tfrcadclien, frcadclien);
   frcadclien.show;

Como corrigir isso?

Link para o comentário
Compartilhar em outros sites

  • 0

Jesc, por acaso quando você abre novamente o form, o dataset está ativo? Onde você está abrindo/ativando seu dataset?

Voce fala "quando abro o cadastro de clientes...", mas o nome do form lembra cadastro de fonecedore (frCadForn) :unsure:

Este evento OnStateChange é de um TDataSource colocado no form em questão (frCadForm)? Se sim, omita o nome da variável do form - não é necessário já que todos os botões referenciados estão nele e caso você viesse a criar um form base (modelo ou template), onde esta parte do código serviria a qualquer classe posterior, você estaria cometendo um erro. Lembre-se que para generalizar, você não deve utilizar a variável global - se for mesmo necessário referenciar a si proprio, utilize o Self que fará referência a instância atualmente alocada e isto é válido para os parâmetros dos eventos (por isso usamos o type cast como em Sender as TDatSource.

Assim, se a resposta acima foi sim, mude o código para:

btNovo.Enabled := (Sender as TDataSource).State in [dsBrowse];
btGrava.Enabled := (Sender as TDataSource).State in [dsEdit, dsInsert];
btCance.Enabled := btGrava.Enabled;
btExclu.Enabled := btNovo.Enabled;
btConsu.Enabled := btNovo.Enabled;
btSair.Enabled := btNovo.Enabled;

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...