Ir ao conteúdo
  • Cadastre-se

Criar form dinamicamente de acordo com os dados do banco


Posts recomendados

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 

 

Error.png

Link para o comentário
Compartilhar em outros sites

@Cristiano Zim  os formulários são MDIChild e o caption dos mesmos vão possuir o mesmo nome exemplo: Eventos.

Não entendi bem o que você quis dizer.

Dei uma pesquisada e usando o FindWindow(), pelo menos pelo o que pesquisei ele pega o nome da aplicação e não das janelas filhas.

e o ComponentCount contaria os componentes do formulario.

 

Preciso abrir um form para cada registro da tabela, e para cada form passar o valor do ID do cadastro. Sendo que se chegar um novo cadastro (evento) precisa ser aberto outro formulario e passado o ID do evento que chegou.

Em PHP fiz e tudo funciona lindamente, em Delphi que estou tendo dificuldades em montar a estrutura, consegui fazer funcionar com 3 (cadastros) eventos, mais que isso começa a abrir janelas com dados duplicados, o que não deveria, uma vez que coloquei dinamicamente para mostrar o ID no caption de cada form criado dinamicamente e coloquei para percorrer os forms filhos abertos e consultar o caption... bem louco ..

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!