Criar form dinamicamente de acordo com os dados do banco

17/03/2016

0

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

Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar