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

(Resolvido) Actualizar campo na DBGRID


Mario Lopes

Pergunta

Ola

Só posso permitir que o utilizador altere o valor dum campo de uma dbgrid se no outro campo estiver o valor '', ou seja trata-se de uma emissão de recibos apenas posso alterar o valor dos almoços se o recibo ainda não tiver sido emitido. Estou a utilizar o código seguinte mas parece não funcionar:

if queryapagar.FieldByName('n_recibo').AsInteger>0 then

begin

MessageBox(Application.Handle, 'Já Existe um Recibo para este Valor. Não o pode Alterar!'+#13+'Para sair faça Esc', 'Gestão ATL', MB_ICONINFORMATION + MB_OK);

sysutils.Abort;

exit;

end

else

begin

queryapagar.FieldByName('valor_almocos').ascurrency:=queryapagar.FieldByName('n_almocos').asinteger*queryapagar.FieldByName('preco_almoco').ascurrency;

queryapagar.FieldByName('total_recibo').ascurrency:=queryapagar.FieldByName('valor_almocos').asinteger+queryapagar.FieldByName('mensalidade').ascurrency+queryapagar.FieldByName('extra_valor').ascurrency;

end;

Ou seja o valor fica no campo da dbgrid. Ajuda por favor

Mario Lopes

Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0
Ou seja o valor fica no campo da dbgrid. Ajuda por favor

Se voce não adicionar um novo registro na query, sempre ficará mostrando o valor de um registro da sua tabela

if queryapagar.FieldByName('n_recibo').AsInteger > 0 then
     begin
        MessageBox(Application.Handle, 'Já Existe um Recibo para este Valor. Não o pode Alterar!'+#13+'Para sair faça Esc', 'Gestão ATL', MB_ICONINFORMATION + MB_OK);
        sysutils.Abort;
        exit;
     end
  else
     begin
        queryapagar.Last;
        queryapagar.Append;
        queryapagar.Edit;
        queryapagar.FieldByName('valor_almocos').ascurrency := queryapagar.FieldByName('n_almocos').asinteger * queryapagar.FieldByName('preco_almoco').ascurrency;
        queryapagar.FieldByName('total_recibo').ascurrency := queryapagar.FieldByName('valor_almocos').asinteger + queryapagar.FieldByName('mensalidade').ascurrency + queryapagar.FieldByName('extra_valor').ascurrency;
        queryapagar.Post;
     end;

abraço

Link para o comentário
Compartilhar em outros sites

  • 0
Ou seja o valor fica no campo da dbgrid. Ajuda por favor

Se voce não adicionar um novo registro na query, sempre ficará mostrando o valor de um registro da sua tabela

if queryapagar.FieldByName('n_recibo').AsInteger > 0 then
     begin
        MessageBox(Application.Handle, 'Já Existe um Recibo para este Valor. Não o pode Alterar!'+#13+'Para sair faça Esc', 'Gestão ATL', MB_ICONINFORMATION + MB_OK);
        sysutils.Abort;
        exit;
     end
  else
     begin
        queryapagar.Last;
        queryapagar.Append;
        queryapagar.Edit;
        queryapagar.FieldByName('valor_almocos').ascurrency := queryapagar.FieldByName('n_almocos').asinteger * queryapagar.FieldByName('preco_almoco').ascurrency;
        queryapagar.FieldByName('total_recibo').ascurrency := queryapagar.FieldByName('valor_almocos').asinteger + queryapagar.FieldByName('mensalidade').ascurrency + queryapagar.FieldByName('extra_valor').ascurrency;
        queryapagar.Post;
     end;

abraço

Olá Jhonas

Não sei se expliquei bem o meu problema: O meu problema é que adbgrid ( e protanto a queryapagar que está requestlive=true fica actualizada com o valor neste caso:

MessageBox(Application.Handle, 'Já Existe um Recibo para este Valor. Não o pode Alterar!'+#13+'Para sair faça Esc', 'Gestão ATL', MB_ICONINFORMATION + MB_OK);

sysutils.Abort;

exit;

Ora eu não queria isso. Neste caso eu pretendo que a queryapagar não seja alterada em relação ao valor que ela tem no campo. pensei que sysutils.abort resolveria a situação mas não me parece estar a resultar.

Outra possibilidade seria fazer o registo não editável no caso de já ter sido emitido um recibo.será melhor ir por esse caminho?

Orbigado

Link para o comentário
Compartilhar em outros sites

  • 0
Neste caso eu pretendo que a queryapagar não seja alterada em relação ao valor que ela tem no campo.

então tente

if queryapagar.FieldByName('n_recibo').AsInteger > 0 then
     begin
        MessageBox(Application.Handle, 'Já Existe um Recibo para este Valor. Não o pode Alterar!'+#13+'Para sair faça Esc', 'Gestão ATL', MB_ICONINFORMATION + MB_OK);
        queryapagar.Cancel;
        exit;
     end
  else
. 
.
.

ou ainda voce pode deixar o DBEdit somente como leitura nesta condição

abraço

Link para o comentário
Compartilhar em outros sites

  • 0
Neste caso eu pretendo que a queryapagar não seja alterada em relação ao valor que ela tem no campo.

então tente

if queryapagar.FieldByName('n_recibo').AsInteger > 0 then
     begin
        MessageBox(Application.Handle, 'Já Existe um Recibo para este Valor. Não o pode Alterar!'+#13+'Para sair faça Esc', 'Gestão ATL', MB_ICONINFORMATION + MB_OK);
        queryapagar.Cancel;
        exit;
     end
  else
. 
.
.

ou ainda voce pode deixar o DBEdit somente como leitura nesta condição

abraço

queryapagar.cancel

resolveu o meu problema. Mil obrigados!

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...