Fórum Problema do ApplyUpdates() #301374
31/10/2005
0
Após a instruão:
cds.Delete;
cds.Post;
Dataset in not edit or insert mode.
Eu coloquei o comando ApplyUpdates no AfterPost do clientDataset.
Meu dataset esta aberto, mas não sei como resolver este problema , alguem pode me ajudar ?
Eleusis
Curtir tópico
+ 0Posts
31/10/2005
Martins
[b:77907562ca][color=red:77907562ca]ataset in not edit or insert mode.[/color:77907562ca][/b:77907562ca]
Faz sentido, veja:
[i:77907562ca][color=blue:77907562ca]cds.Delete;
[b:77907562ca]cds.Post;[/b:77907562ca][/color:77907562ca][/i:77907562ca]
vc não pode salvar um registro q não está em modo de inserção ou edição, ao excluir vc pode e deve dar um refresh no clientdataset que é conseguindo com ApplyUpdates(-1).
Cds.Delete; Cds.ApplyUpdates(-1);
Boa Sorte!!!
Gostei + 0
01/11/2005
Eleusis
É que só vi por aí exemplos usando ApplyUpdates(0), achava que outros parâmetros desta função seriam só para controlar mensagens de erro ou coisa assim.
Valeu mesmo
Grato
Eleusis.
Gostei + 0
01/11/2005
Martins
Blz !!!
Depois posta aqui para dizer se deu certo ou não com vc, pq tem neguinho q não consegue.
Boa Sorte!!!
Gostei + 0
01/11/2005
Eleusis
Agora o comando UpplyUpdates(0) não está gravando no banco de dados.
O incrível é que ontem estava(31/10/2005) HOJE (01/11/2005) NÃO ESTÁ GRAVANDO.
o QUE SERÁ QUE ACONTECEU.
Grato
Eleusis
Gostei + 0
01/11/2005
Martins
vc fez alguma modificação?
poderia postar o código q vc está usando para gravar aqui?
Assim poderemos ver qual o motivo.
Boa sorte!!
Gostei + 0
01/11/2005
Eleusis
botão confirma do formulario de cadastro de Departamento.
procedure Tfrm_CadDepto.btn_ConfirmaClick(Sender: TObject);
begin
if p_Opcao = ´I´
then DMDepto.cdsDepto.Append;
if p_Opcao = ´A´
then DMDepto.cdsDepto.Edit;
DMDepto.cdsDepto.FieldByName(´Codigo´).Value := StrToInt(edt_Codigo.Text);
DMDepto.cdsDepto.FieldByName(´Descricao´).Value := edt_Descricao.Text;
DMDepto.cdsDepto.FieldByName(´Responsav´).Value := edt_Resp.Text;
DMDepto.cdsDepto.FieldByName(´Campus´).Value := edt_Campus.Text;
DMDepto.cdsDepto.FieldByName(´Ramal´).Value := edt_Ramal.Text;
if chk_Finaliza.Checked
then DMDepto.cdsDepto.FieldByName(´Finaliza´).Value := ´S´
else DMDepto.cdsDepto.FieldByName(´Finaliza´).Value := ´N´ ;
if chk_Filtro.Checked
then DMDepto.cdsDepto.FieldByName(´Filtro´).Value := ´S´
else DMDepto.cdsDepto.FieldByName(´Filtro´).Value := ´N´ ;
DMDepto.cdsDepto.FieldByName(´EMail´).Value := edt_EMail.Text;
DMDepto.cdsDepto.Post;
Close;
end;
no datamodulo DMDepto tenho :
procedure TDMDepto.cdsDeptoAfterPost(DataSet: TDataSet);
begin
cdsDepto.ApplyUpdates(0);
end;
Será que isto é o suficiente.
Grato Martins
Eleusis
Gostei + 0
01/11/2005
Adriano Santos
Cara, deixa eu me meter um pouco. Você pode dar um ApplyUpdates junto do seu código de gravação, assim:
... then DMDepto.cdsDepto.FieldByName(´Filtro´).Value := ´S´ else DMDepto.cdsDepto.FieldByName(´Filtro´).Value := ´N´ ; DMDepto.cdsDepto.FieldByName(´EMail´).Value := edt_EMail.Text; DMDepto.cdsDepto.Post; cdsDepto.ApplyUpdates(0); Close; end; ...
Gostei + 0
01/11/2005
Martins
se não der certo assim, vc pode colocar lá no AfterPost [b:9c26e29bae] ApplyUpdate(-1).
Uma vez fiz isso só para testar.
//Tentando evitar q os dados sejam perdidos. if cds.ApplyUpdates(-1) <> 0 then begin showmessage(´Algo impedi q os dados sejam gravados!!!´); cds.CancelUpdates; end Else ShowMessage(´Dados gravados com sucesso!!!´);
Deve funcionar da forma descrita pelo [b]Adriano[/b:9c26e29bae]
Gostei + 0
01/11/2005
Eleusis
Milagre agora gravou.
Acho que esta com algum problema nos componentes de conexão do datamodulo da tabela de departamento.(DMDepto). Acho que vou excluir estes componentes e criá-los novamente.
Valeu pela ajuda.
Eleusis.
PS.: Não fiz o que falou a Adriano porque senão terei que por varios ApplyUpDates() , um no confirma, outro na exclusão, acho q não há problema deixar no afterPost do clientDataset.
Gostei + 0
01/11/2005
Martins
Certo, mas não esquece os ApplyUpdates em AfterPost e AfterDelte, pq vc pode ter problemas quanto a excluir ou gravar fisicamente os dados.
Boa sorte!!
Gostei + 0
01/11/2005
Rômulo Barros
Vamos supor que vc tenha alterado 10 registros no seu TClientDataSet. Dos 10 registros alterados, apenas 8 foram alterados com sucesso ( os outros 2 registros deu pau). Então, vejamos a diferença no parametros do applyUpdates:
ApplyUpdates(-1);
ApplyUpdates(0):
Gostei + 0
01/11/2005
Martins
Vamos supor que vc tenha alterado 10 registros no seu TClientDataSet. Dos 10 registros alterados, apenas 8 foram alterados com sucesso ( os outros 2 registros deu pau). Então, vejamos a diferença no parametros do applyUpdates:
ApplyUpdates(-1);
ApplyUpdates(0):
Certo já sabia dessa parte, agora [b:476d8a207f]Rômulo[/b:476d8a207f], qual a melhor opção ao seu ver? (-1) com os devidos tratamentos ou (o)?
Valew!!
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)