ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

problema com BeforePost do clientdataset[Resolvido]

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
porter
Colaborador
Colaborador


Registrado: Segunda-Feira, 23 de Fevereiro de 2009
Mensagens: 1353

MensagemEnviada: Qua Jul 31, 2013 12:44 pm    Assunto: problema com BeforePost do clientdataset[Resolvido] Responder com Citação

ola pessoal, pelo debugador percebi que esse beforepost esta sendo executando no Append e no Post do clientdataset, nao estou entendendo o que ha de errado, ele so deve ser executado no Post somente, estou usando o Delphi 7, firebird com clientdataset e a rotina abaixo tem a funcao de fazer um contador e gravar no campo ID.
obrigado.

Código:
procedure tdm.cdsbeforepost(Dataset: TDataSet);
begin
   if dm.cdsid.IsNull then
   begin
      dm.sqlqueryGen.Open;
      try
         dm.cds.asinteger := dm.sqlquerygen.fieldbyname('ID').AsInteger;
      finally
         dm.sqlquerygen.close;
      end;
   end;
end;


Editado pela última vez por porter em Qua Jul 31, 2013 1:47 pm, num total de 1 vez
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
joemil
Moderador
Moderador


Registrado: Quinta-Feira, 25 de Março de 2004
Mensagens: 9099
Localização: Sinop-MT

MensagemEnviada: Qua Jul 31, 2013 12:49 pm    Assunto: Responder com Citação

por acaso, antes do append, vc ta dando um post?

qdo vc da um append, e o registro ainda nao foi gravado, o post é executado automaticamente
_________________
<b>SEMPRE COLOQUE [RESOLVIDO] NO SEU POST</b>
Enviar imagens: http://tinypic.com/
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
porter
Colaborador
Colaborador


Registrado: Segunda-Feira, 23 de Fevereiro de 2009
Mensagens: 1353

MensagemEnviada: Qua Jul 31, 2013 12:59 pm    Assunto: Responder com Citação

Estou fazendo conforme descrito abaixo.
a rotina abaixo é executada para desmembrar um valor, por exemplo se for desmembrar 10000 em duas vezes essa rotina vai gerar dois registros de 5000, só nao estou entendendo porque o beforepost executa no append e no post, a cada registro tem que executar apenas no post.

procedure TFrmLancMovto.Grava(Sender: TObject);
begin
dm.cds.Append;
dm.cds.FieldByName('ID').Asinteger := codigo_da_empresa
dm.cds.Post;
if dm.cds.ApplyUpdates(0) <> 0 then
dm.cds.CancelUpdates;
end;
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
porter
Colaborador
Colaborador


Registrado: Segunda-Feira, 23 de Fevereiro de 2009
Mensagens: 1353

MensagemEnviada: Qua Jul 31, 2013 1:30 pm    Assunto: Responder com Citação

antes do append, coloquei essas duas linhas e deu certo, mas fiquei sem entender porque.

dm.cds.close;
dm.cds.open;
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Batera
Colaborador
Colaborador


Registrado: Quarta-Feira, 23 de Julho de 2008
Mensagens: 4899
Localização: Maringá

MensagemEnviada: Qua Jul 31, 2013 1:42 pm    Assunto: Responder com Citação

Fala, porter!

Dê uma olhada nesse tópico:

http://www.activedelphi.com.br/forum/viewtopic.php?t=42856&sid=c69b0b85216e6aa5cb137803bd32cfd8
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Visitar a homepage do Usuário
porter
Colaborador
Colaborador


Registrado: Segunda-Feira, 23 de Fevereiro de 2009
Mensagens: 1353

MensagemEnviada: Qua Jul 31, 2013 1:46 pm    Assunto: Responder com Citação

obrigado Joemil e Batera, li o post e entendi o motivo do problema, valeu.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
joemil
Moderador
Moderador


Registrado: Quinta-Feira, 25 de Março de 2004
Mensagens: 9099
Localização: Sinop-MT

MensagemEnviada: Qua Jul 31, 2013 2:35 pm    Assunto: Responder com Citação

porter escreveu:
antes do append, coloquei essas duas linhas e deu certo, mas fiquei sem entender porque.

dm.cds.close;
dm.cds.open;


qdo vc da um close, é executado um Cancel antes, entao vc pode fazer assim so isso no lugar das 2 linhas acima:

dm.cds.Cancel;
_________________
<b>SEMPRE COLOQUE [RESOLVIDO] NO SEU POST</b>
Enviar imagens: http://tinypic.com/
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB