Criar form dinamicamente de acordo com os dados do banco

Delphi

17/03/2016

Olá pessoal!


Estou desenvolvendo um sistema que precisa ser aberto um formulário fsMDIChild assim que chegar algum registro no banco de dados.

1- Fiz uma verificação se a quantidade de registros na tabela é diferente de zero
2- Fiz um laço FOR varrer todo a tabela.
3- Verifico se a quantidade de Forms MDIChild criados é menor que a quantidade de registros localizado na tabela
4- Verifico se a quantidade de forms criado é maior que 1, se for eu crio o formulário, dou um next na query da tabela e crio o formulário passando os parâmetros para o mesmo, se não crio o formulário passando os parâmetros (primeiro registro 1 formulário).

Funciona lindamente, desde que todos sejam criados de uma única vez, se os formulários estiverem abertos e chegar um novo registro, o formulário é criado, mas é passado os dados do primeiro registro na tabela.

Tentei colocar o ID de cada registro no caption do formulário e usar um laço for para percorrer as janelas MDIs e comparar com os IDs do banco e só fazer os que não estiverem abertos, mas não rolou.
Tentei criando um array também, onde cada ID da tabela era armazenado no array e feito uma pesquisa e se não tiver no array cria o formulário, mas não deu.

Alguém já precisou fazer ago assim ou tem alguma dica que possa me ajudar?

O codigo abaixo está dentro de um Timer, se alguém conhecer outra forma seria interessante.

if( QueryEventos.RecordCount <> 0) then
 begin

    for i := 0 to QueryEventos.RecordCount - 1 do
    begin
      if (MDIChildCount <QueryEventos> 0)then
        begin
          Application.CreateForm(TFormEventos,FormEventos);
          FormEventos.Caption := IntToStr(QueryEventos.FieldValues['id']);
          FormEventos.Show;
          QueryEventos.Next;
        end//if(MDIChildCount > 1)then
        else
        begin
          Application.CreateForm(TFormEventos,FormEventos);
          FormEventos.Caption := IntToStr(QueryEventos.FieldValues['id']);
          FormEventos.Show;
          QueryEventos.Next;
        end;//FIM ELSE - if(MDIChildCount > 1)then

      end;//FIM if (MDIChildCount < QueryEventos.RecordCount) then
    end;// FIM for i := 0 to QueryEventos.RecordCount - 1 do

 end;// FIM if( QueryEventos.RecordCount <> 0) then 


Manoel Santos

Manoel Santos

Curtidas 0
POSTAR