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

(Resolvido) Como saber se um campo da tabela foi alterado?


Duduh_Capixaba

Pergunta

Olá pessoal! Eu tenho um código em loop onde vários campos recebem dados dependendo se ele já possui valores. Isso não vem muito ao caso, o importante é que preciso saber quando um campo recebe dados, exemplo:

if tbTable.Fields[1].Value = '' then begin
  tbTable.Edit;
  tbTable.Fields[1].Value := variável;
  tbTable.Post;
end;

Eu gostaria que antes da linha "tbTable.Post" eu soubesse se o campo "Fields[1]" recebeu a variável. Eu poderia muito bem colocar uma outra variável do tipo boolean após a linha "tbTable.Fields[1].Value := variável" como uma verificação, mas vi uma propriedade da tabela chamada OnChange e gostaria de usá-la, ao invés de criar uma nova variável. Pois o programa é muito mais complexo do que este pequeno trecho, e eu teria que implementar várias variáveis de verificação.

Espero ter sido claro.

Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0

Olá DuDuh_Capixaba..

E se você criar apenas uma variavel do tipo string, sendo que quando for adicionar outros valores que não sejam string você converteria antes...

Crie uma variavel tipo texto.

Var Aux : String
begin
if tbTable.Fields[1].Value = '' then 
begin
  Aux := tbTable.Fields[1].Value;
  tbTable.Edit;
  tbTable.Fields[1].Value := variável;
  If Aux = Variavel Then
    faz o que você deseja
   else
    faz outra coisa
  tbTable.Post;
end;

Não sei bem se isso resolve seu problema mas a principio o que sei é isso ai... :rolleyes:

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0

Olá! Na verdade eu já estou com meu programa rodando assim, do jeito que você descreveu, só que ao invés de comparar com a variável, eu comparo o campo novamente, assim:

var
  Aux : String

begin
  if tbTable.Fields[1].Value = '' then begin
    Aux := tbTable.Fields[1].Value;
    tbTable.Edit;
    tbTable.Fields[1].Value := variável;
  end;
  if tbTable.Fields[1].Value = Aux then
    tbTable.Cancel;
  else
    tbTable.Post;
end;

Só que estou usando muitas variáveis string. Gostaria de tirá-las e usar algum comando da própria tbTable, se isto for possível. Obrigado pela resposta, abraço!

Link para o comentário
Compartilhar em outros sites

  • 0

Resolvido pessoal! Encontrei a propriedade que eu queria. Vou deixar postado caso alguém precise:

A propriedade é a "Modified" da Table, no meu caso, tbTable.Modified. Ela indica se a tabela sofreu alguma alteração, com isso você pode controlar se que postar ou cancelar uma edição da tabela, por exemplo.

Este é meu código verdadeiro (uma parte dele):

begin
  .
  .
  .
  tbTable.Open;
  tbTable.First;
  ProgressBar1.Max := tbTable.RecordCount;

  while not tbTable.Eof do begin
    tbTable.Edit;

    if tbTable.FieldByName('ECF1').Value > ' ' then begin
      if tbTable.FieldByName('ECF1').Value = AL01E then
        tbTable.FieldByName('ECF1').Value := AL01D
      .
      .
      .
    end;

    if tbTable.FieldByName('ECF2').Value > ' ' then begin
      if tbTable.FieldByName('ECF2').Value = AL01E then
        tbTable.FieldByName('ECF2').Value := AL01D
      .
      .
      .
    end;

    if tbTable.FieldByName('ECF3').Value > ' ' then begin
      if tbTable.FieldByName('ECF3').Value = AL01E then
        tbTable.FieldByName('ECF3').Value := AL01D
      .
      .
      .
    end;

    if tbTable.FieldByName('ECF4').Value > ' ' then begin
      if tbTable.FieldByName('ECF4').Value = AL01E then
        tbTable.FieldByName('ECF4').Value := AL01D
      .
      .
      .
    end;

    if tbTable.Modified then
      tbTable.Post

    else
      tbTable.Cancel;

    tbTable.Next;
    ProgressBar1.Position := ProgressBar1.Position + 1;
  end; //end while
  .
  .
  .
end;

Agora posso controlar quando quero postar e quando quero cancelar a edição da tabela, sem uso de variáveis, como eu estava fazendo antes. Obrigado pela ajuda aê, e espero que essa dica possa ajudar mais alguém. 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...