Atualizar TreeView ao fazer qualquer alteração na tabela

Delphi

28/08/2023

Pessoal preencho uma TreeView com dados de uma tabela,teria como ao atualizar a base de dados da tabela a TreeView tambem atualizar,sem precisar dar clear na treeview?
Resumindo se houver qualquer tipo de alteração na tabela o treeview tambem alterasse.
Alan

Alan

Curtidas 0

Melhor post

Arthur Heinrich

Arthur Heinrich

28/08/2023

O banco de dados não tem como executar código na máquina do cliente. Portanto, o único jeito disso ocorrer é checando periodicamente o banco, em busca de alterações. Porém, ligar um job com periodicidade curta, para ficar constantemente checando o banco, pode comprometer a disponibilidade do banco.

O componente não precisa necessariamente ter todos os itens destruídos para então atualizar a lista. Você pode varrer a lista de itens e ir atualizando, de forma que a atualização na tela seja mais natural e evite o excesso de alocação dinâmica de componentes.
GOSTEI 1

Mais Respostas

Alan

Alan

28/08/2023

O banco de dados não tem como executar código na máquina do cliente. Portanto, o único jeito disso ocorrer é checando periodicamente o banco, em busca de alterações. Porém, ligar um job com periodicidade curta, para ficar constantemente checando o banco, pode comprometer a disponibilidade do banco.

O componente não precisa necessariamente ter todos os itens destruídos para então atualizar a lista. Você pode varrer a lista de itens e ir atualizando, de forma que a atualização na tela seja mais natural e evite o excesso de alocação dinâmica de componentes.

Entao Arthur no meu treeView contem dados da tabela,onde tem os grupos e os ips e tem uma child que eu quero q funcione como se fosse um contador,exemplo :
 dm.FDGrupos.sql.Clear;
  dm.FDGrupos.sql.Add('SELECT IP,NOME,NUMERO_GRUPO,ID_GRUPO,STATUS from Grupos where Numero_grupo = "1"');
  dm.FDGrupos.Open;
  if dm.FDGrupos.RecordCount <> 0 then
  begin
  Setor1:= treeview.Items.AddChild(Controladora,dm.FDGruposNome.Value);
  Setor1.ImageIndex := 2;
  Setor1.SelectedIndex := 2;

   dm.FDGrupos.Close;
   dm.FDGrupos.sql.Clear;
   dm.FDGrupos.sql.Add('SELECT IP,NOME,NUMERO_GRUPO,ID_GRUPO,STATUS from Grupos where Nome = :pNome');
   dm.FDGrupos.ParamByName('Pnome').Value := Setor1.Text;
   dm.FDGrupos.Open;
   dm.FDGrupos.First;
   while not dm.FDGrupos.eof do
   begin
    Ips1:= treeview.Items.AddChild(Setor1,dm.FDGruposip.value);
    dm.FDGrupos.Next;
    Ips1.ImageIndex := 1;
    Ips1.SelectedIndex := 1;

    dm.FDquery1.Close;
    dm.FDquery1.SQL.Clear;
    dm.FDquery1.sql.Add('SELECT grupos.Id_grupo,Grupos.IP FROM Grupos');
    dm.FDquery1.sql.Add('LEFT JOIN ingressos_evento ON grupos.Id_grupo = ingressos_evento.Id_controladora');
    dm.FDquery1.sql.Add(' WHERE  ingressos_evento.Tipo = "ENTRADA" and grupos.ip = :Pdesc');
    dm.FDquery1.ParamByName('Pdesc').Value := ips1.Text;
    dm.FDquery1.open;
    dm.FDquery1.FetchAll;
    treeview.Items.AddChild(ips1,inttostr(dm.FDQuery1.RecordCount )) ; //Aqui eu pucho a quantidade de registro que o id do ip passou .Ai cada vez 
que esse id do ip acrescenta ele atualizaria tambem na treeview,nao só na parte do contador  mais tambem se fizesse um update de trocar os ips de grupo
   end;
  end;

Teria um exemplo de como fazer isso?
GOSTEI 0
Emerson Nascimento

Emerson Nascimento

28/08/2023

você precisa estudar sobre eventos do banco de dados.
assim você poderá fazer as coisas funcionarem da forma que você precisa: o banco de dados avisar à aplicação sobre mudanças, em vez de você ficar fazendo consultas frequentes para saber se houve alguma alteração no banco (registro/tabela).

veja uma breve explicação aqui:

https://gdksoftware.com/pt-br/base-de-conhecimento/delphi-e-database-events?gclid=CjwKCAjwrranBhAEEiwAzbhNtViQ75Rb3QJLJJymNIOyIrNQZ3ZEisLc04tHH7EzRcvAOxUaGyTcaBoCTNIQAvD_BwE

exemplos da própria embarcadero:

https://docwiki.embarcadero.com/CodeExamples/Sydney/en/FireDAC.TFDEventAlerter_Sample

se você ainda não tiver os fontes exemplo na tua máquina, basta baixar do Github.
GOSTEI 1
Alan

Alan

28/08/2023

você precisa estudar sobre eventos do banco de dados.
assim você poderá fazer as coisas funcionarem da forma que você precisa: o banco de dados avisar à aplicação sobre mudanças, em vez de você ficar fazendo consultas frequentes para saber se houve alguma alteração no banco (registro/tabela).

veja uma breve explicação aqui:

https://gdksoftware.com/pt-br/base-de-conhecimento/delphi-e-database-events?gclid=CjwKCAjwrranBhAEEiwAzbhNtViQ75Rb3QJLJJymNIOyIrNQZ3ZEisLc04tHH7EzRcvAOxUaGyTcaBoCTNIQAvD_BwE

exemplos da própria embarcadero:

https://docwiki.embarcadero.com/CodeExamples/Sydney/en/FireDAC.TFDEventAlerter_Sample

se você ainda não tiver os fontes exemplo na tua máquina, basta baixar do Github.
Muito obrigado amigo, vou dar uma olhada.
GOSTEI 0
POSTAR