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

(Resolvido) Manipular Registros Selecionados


renanbg

Pergunta

Tenho um select que traz os dados da tabela contas a receber.

Nesse select adicionei um campo virtual chamado MARCADO. A finalidade desse campo é marcar os registros no dbgrid, via checkbox.

Imagine que o select trouxe 10 contas para o dbgrid, mas o cliente deseja pagar apenas 3. 

Preciso obter o somatorio dessas 3 contas e atualizar o status para pago.

Como poderia fazer isso?

 

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

10 respostass a esta questão

Posts Recomendados

  • 0

Bom dia Jhonas.

Obrigado pela dica. Não entendi como aplicar isso na minha situação atual.

Vou tentar explicar. Tenho um checkbox para cada registro do dbgrid.

Ao dar um duplo clique no registro, seto um campo chamado MARCADO para S e caso desmarque, para N

Imagine que eu tenha selecionado 800 registros. Como aplicar essa técnica do bookmark para atualizar o campo PAGO de não para SIM, em todos eles?

Um amigo de outro forum me sugeriu um while:

var 
  TotValor: Double; 
  TotRegistros: Integer; 
begin 
  TotValor := 0; 
  TotRegistros := 0; 

  with FrmDm.cdsContasReceber do 
  begin 
    First; 

    while not eof do 
    begin 
      if FieldByName('MARCADO').AsString = 'S' then 
      begin 
        TotValor := TotValor + FieldByName('TOTAL').AsFloat; 
        TotRegistros := TotRegistros + 1; 
      end; 

      Next; 
    end; 

    ShowMessage(Format('%m', [TotValor])); 
    ShowMessage(IntToStr(TotRegistros)); 
  end;

O que acha?

Depois vou precisar atualizar o campo PAGO para SIM, daí pensei em usar o mesmo while

 with FrmDm.cdsContasReceber do 
  begin 
    First; 

    while not eof do 
    begin 
      if FieldByName('MARCADO').AsString = 'S' then 
      begin 
        Edit; 
   FieldByName('PAGO').AsString = 'SIM'; 
        Post; 
      end; 

      Next; 
    end; 

    ShowMessage('ok'); 
  end;

Só tenho duvidas se isso pode implicar na performance, caso tenha muitos registros em memória

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

  • 0

Ok ... agora entendi melhor a sua dúvida. ,,,, não é preciso usar o comando While

se voce quer ganho de performance, voce vai usar um componente TQuery ou outro conforme o banco de dados que estiver usando.

simplesmente coloque um componente TQuery no Form e coloque esse código em algum procedimento ou botão,

 Query1.SQL.Clear;
 Query1.SQL.Append('UPDATE ContasReceber SET MARCADO = "S" WHERE MARCADO = "N"');
 Query1.ExecSQL;
 Query1.Close;

OBS: na clausula SQL voce pode ainda filtrar os registros por data se quiser,

da maneira como esta, todos os registros da tabela ( ContasReceber) que estiverem marcados como Não serão marcados como Sim

abraço

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,2k
    • Posts
      651,9k
×
×
  • Criar Novo...