Exibir mensagem anterior :: Exibir próxima mensagem |
Autor |
Mensagem |
porter Colaborador
Registrado: Segunda-Feira, 23 de Fevereiro de 2009 Mensagens: 1353
|
Enviada: Qua Jul 31, 2013 12:44 pm Assunto: problema com BeforePost do clientdataset[Resolvido] |
|
|
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 |
|
|
joemil Moderador
Registrado: Quinta-Feira, 25 de Março de 2004 Mensagens: 9099 Localização: Sinop-MT
|
Enviada: Qua Jul 31, 2013 12:49 pm Assunto: |
|
|
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 |
|
|
porter Colaborador
Registrado: Segunda-Feira, 23 de Fevereiro de 2009 Mensagens: 1353
|
Enviada: Qua Jul 31, 2013 12:59 pm Assunto: |
|
|
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 |
|
|
porter Colaborador
Registrado: Segunda-Feira, 23 de Fevereiro de 2009 Mensagens: 1353
|
Enviada: Qua Jul 31, 2013 1:30 pm Assunto: |
|
|
antes do append, coloquei essas duas linhas e deu certo, mas fiquei sem entender porque.
dm.cds.close;
dm.cds.open; |
|
Voltar ao Topo |
|
|
Batera Colaborador
Registrado: Quarta-Feira, 23 de Julho de 2008 Mensagens: 4899 Localização: Maringá
|
|
Voltar ao Topo |
|
|
porter Colaborador
Registrado: Segunda-Feira, 23 de Fevereiro de 2009 Mensagens: 1353
|
Enviada: Qua Jul 31, 2013 1:46 pm Assunto: |
|
|
obrigado Joemil e Batera, li o post e entendi o motivo do problema, valeu. |
|
Voltar ao Topo |
|
|
joemil Moderador
Registrado: Quinta-Feira, 25 de Março de 2004 Mensagens: 9099 Localização: Sinop-MT
|
Enviada: Qua Jul 31, 2013 2:35 pm Assunto: |
|
|
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 |
|
|
|