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

(Resolvido) atualizar um campo no xml


flavioavilela

Pergunta

bom dia a todos...

tenho dbgrid... estou usando clientdataset para criar xml (local)... estou ligando da forma correta, funciona tudo perfeito...

só que, tenho um campo chamado Cancelado, onde se o usuário selecionar a linha desejada e pressionar delete, esse campo dessa linha tem que ficar Sim... estou fazendo assim:

if not (dm.CDSItens_Venda.State in [dsEdit]) then
        dm.CDSItens_Venda.Edit;

      dm.CDSItens_VendaCancelado.AsString:= 'S';
      dm.CDSItens_Venda.SaveToFile(Caminho_Arquivo, dfXMLUTF8);

só que não funciona... ele sempre coloca o 'S' em uma linha que nem selecionei... e se eu tenho 10 registros e pressiono Delete em 5 por exemplo (um de cada vez), ele fica 'S' somente em um... já tentei ClientDataSet.Post, ClientDataSet.ApplyUpdates e nada... estou usando clientdataset -> datasetprovider -> adoquery -> datasource...

desde já, obrigado a todos...

Link para o comentário
Compartilhar em outros sites

7 respostass a esta questão

Posts Recomendados

  • 0

Observe que, se esse código estiver em um botão, e sempre que voce clicar nesse botão, vai acontecer sempre a mesma coisa... ou seja, deixa o clientdataset em modo de edição, passa o valor para CDSItens_VendaCancelado = S e depois salva

outra coisa:

tenho um campo chamado Cancelado, onde se o usuário selecionar a linha desejada e pressionar delete, esse campo dessa linha tem que ficar Sim

quando voce diz, pressionar delete é para deletar ou simplesmente marcar com um S nesse registro ? se for para marcar com um S, deveria estar esse código no evento OnKeyPress ... entretanto voce só deve salvar depois que não for marcar mais nenhum outro registro.

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

devo ter me expressado mal então... estou usando no evento onKeyDown:

if (key = VK_DELETE) then
  begin
      if not (dm.CDSItens_Venda.State in [dsEdit]) then
        dm.CDSItens_Venda.Edit;

      dm.CDSItens_VendaCancelado.AsString:= 'S';
      dm.CDSItens_Venda.SaveToFile(Local_Arquivo(2), dfXMLUTF8);
  end;

tipo, não é para deletar propriamente dito... pro usuário, ele pensa que está excluindo, mas para o sistema, ele está cancelando o item selecionado....

outra coisa, eu devo mandar o CDSItens_Venda.SaveToFile somente quando acabar de remover os itens que eu quero??? se sim, fiz um teste aqui, apenas deixando o Clientdataset em modo de edição, passando o valor 'S' para o campo cancelado e só após o usuário terminar tudo, ele salvar... e não funcionou... continuou alterando apenas o último registro para 'S'....

desde já, obrigado

Editado por flavioavilela
Link para o comentário
Compartilhar em outros sites

  • 0
outra coisa, eu devo mandar o CDSItens_Venda.SaveToFile somente quando acabar de remover os itens que eu quero???
a idéia seria essa....

apenas deixando o Clientdataset em modo de edição, passando o valor 'S' para o campo cancelado e só após o usuário terminar tudo, ele salvar... e não funcionou... continuou alterando apenas o último registro para 'S'....

imagino que voce esteja usando um dbgrid. nesse caso ao clicar no campo CDSItens_VendaCancelado, o valor atribuido ( S ) deveria ficar lá ... isso para cada campo que voce deseja colocar esse valor.

tipo, não é para deletar propriamente dito... pro usuário, ele pensa que está excluindo, mas para o sistema, ele está cancelando o item selecionado....

para que manter um registro cancelado no sistema ? se voce não vai usa-lo para outra coisa, então delete.

outra coisa:

CDSItens_Venda.SaveToFile continuou alterando apenas o último registro para 'S'

este comando salva a ultima ocorrencia na tabela antes do comando Post

exemplo: se voce alterar 5 registros e não der o comando Post, somente o ultimo registro ficara com a alteração

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

boa noite... havia apenas um erro de lógica, mas, ficou assim e funcionou:

dm.CDSItens_Venda.Edit;
      dm.CDSItens_VendaCancelado.AsString:= 'S';

      dm.CDSItens_Venda.Post;
      dm.CDSItens_Venda.SaveToFile(Local_Arquivo(2), dfXMLUTF8);

obrigado a todos...

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,3k
×
×
  • Criar Novo...