Problema do ApplyUpdates()
Estou usando Conexão com Banco SQL Server 2000, com componentes DBExpress. Abro uma tabela no clientdataset, só que na hora que vou deletar um registro, tenho a seguinte mensagem:
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 ?
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
Curtidas 0
Respostas
Martins
31/10/2005
Estou usando Conexão com Banco SQL Server 2000, com componentes DBExpress. Abro uma tabela no clientdataset, só que na hora que vou deletar um registro, tenho a seguinte mensagem:
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 ?
[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
Eleusis
31/10/2005
Valeu Martins.
É 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.
É 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
Martins
31/10/2005
Valeu Martins.
É 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.
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
Eleusis
31/10/2005
Caro Martins, acho que vou ficar louco.
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
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
Martins
31/10/2005
Caro Martins, acho que vou ficar louco.
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
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
Eleusis
31/10/2005
La vai o código:
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
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
Adriano Santos
31/10/2005
La vai o código:
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
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
Martins
31/10/2005
É isso aí q o [b:9c26e29bae]Adriano[/b:9c26e29bae] Falou!!!!
se não der certo assim, vc pode colocar lá no AfterPost [b:9c26e29bae] ApplyUpdate(-1).
Uma vez fiz isso só para testar.
Deve funcionar da forma descrita pelo [b]Adriano[/b:9c26e29bae]
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
Eleusis
31/10/2005
Caro Martins, agora endoidei de vez, criei outro datamodulo com os componentes de conexão e liguei a outra tabela.
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.
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
Martins
31/10/2005
Caro Martins, agora endoidei de vez, criei outro datamodulo com os componentes de conexão e liguei a outra tabela.
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.
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
Rômulo Barros
31/10/2005
Deixa eu me meter um pouquinho:
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:
Quando o parâmetro é setado para -1, estamos dizendo ao TClientDataSet que ele atualize no banco de dados todos os registros que não deram problemas ( os 8 registros ). Ou seja, ele grava no banco todos os registros que foram alterados / incluídos / deletados com sucesso sem exibir erros.
Quando o parâmetro é setado para 0, estamos dizendo ao TClientDataSet que grave no banco tudo ( se não tiver ocorrido nenhum erro). Ou seja, ou ele grava tudo ou não grava nada. Se qualquer um dos registros modificados / incluídos / deletados tiver tido algum erro, nada irá ser gravado no banco. ELE SÓ GRAVA SE NÃO DER ERRO EM NENHUM DOS REGISTROS.
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
Martins
31/10/2005
[quote:476d8a207f=´Rômulo Barros´]Deixa eu me meter um pouquinho:
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:
Quando o parâmetro é setado para -1, estamos dizendo ao TClientDataSet que ele atualize no banco de dados todos os registros que não deram problemas ( os 8 registros ). Ou seja, ele grava no banco todos os registros que foram alterados / incluídos / deletados com sucesso sem exibir erros.
Quando o parâmetro é setado para 0, estamos dizendo ao TClientDataSet que grave no banco tudo ( se não tiver ocorrido nenhum erro). Ou seja, ou ele grava tudo ou não grava nada. Se qualquer um dos registros modificados / incluídos / deletados tiver tido algum erro, nada irá ser gravado no banco. ELE SÓ GRAVA SE NÃO DER ERRO EM NENHUM DOS REGISTROS.[/quote:476d8a207f]
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!!
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