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

Problemas com TEdit( FindComponent....


robinhocne

Pergunta

Estou montando um formulario que eu marco as aulas e ai na consulta eu mostro em cada coluna quais os alunos que estão marcados nos horarios, mas o que acontece que pelo que eu já fiz tá certo mas ele não me mostra nada, mas o problema está no procedimento consultagendamento.

e esse é o meu problema que não está dando certo:

aqui eu consulto na tabela teoricas quais alunos estão marcados nos horarios, mas ele não me retorna

nada.

procedure TFrmTeoricas.ConsultaAgendamento;
var
  ContaM : Integer;
begin

    ContaM := 1;
    With DtmIza.QryIza do
    begin
      close;
      sql.Clear;
      sql.Add('Select * From Teoricas where Instrutor = :Inst and Data = :Dat');
      ParamByName('Inst').AsString := txtcodins.Text;
      ParamByName('Dat').AsDate    := txtData.date;
      open;
    end;

    while ( not dtmIza.qryiza.EOF ) do
    begin
       if DtmIza.QryIza.FieldByName('Bloqueado').AsString = 'S' then
       begin
          TEdit( FindComponent( 'Alu' + IntToStr( ContaM ) ) ).Text := '**********';
       end
       else
       begin
          TEdit( FindComponent( 'Alu' + IntToStr( ContaM ) ) ).Text := DtmIza.QryIza.FieldByName('Aluno').asstring;
          TEdit( FindComponent( 'Mat' + IntToStr( ContaM ) ) ).Text := DtmIza.QryIza.FieldByName('Materia').asstring;
       end;
       {else
       begin
          TEdit( FindComponent( 'Alu' + IntToStr( ContaM ) ) ).Text := '';
       end;  }
       contaM:=contaM+1;
       dtmIza.qryiza.Next;
    end;
end;

pois como eu faço um loop ai ele tem que pular no Alu1(alu2, alu3, alu4.....).text e mostrar o aluno que está marcado, mas não mostra nada, fiz um debug e ai ele me mostra sim, mas na hora da execução não mostra nada.

mas o problema está sendo nesse parte aqui....:

alguém poderia me ajudar ???

Editado por robinhocne
Link para o comentário
Compartilhar em outros sites

8 respostass a esta questão

Posts Recomendados

  • 0
pois como eu faço um loop ai ele tem que pular no Alu1(alu2, alu3, alu4.....).text e mostrar o aluno que está marcado, mas não mostra nada,

voce está fazendo um loop em cima do banco de dados e não em cima dos componentes... a pesquisa com FindComponent é realizada em cima de todos os componentes que compõem o form ( inclusive ele proprio )

OBS: supondo que os seus edits já estejam nomeados

Alu1 ... Alu2 .... Alu3 ... etc

para procura-los voce em que fazer uma pesquisa usando o comando FOR

procedure TForm1.Button1Click(Sender: TObject);
var ContaM : integer;
begin

  for ContaM := 0 to ComponentCount -1 do
      TEdit( FindComponent( 'Alu' + IntToStr( ContaM ) ) ).Text := '**********';
end;

Tente entender a lógica do processo e aplica-lo ao seu código

abraço

Link para o comentário
Compartilhar em outros sites

  • 0
pois como eu faço um loop ai ele tem que pular no Alu1(alu2, alu3, alu4.....).text e mostrar o aluno que está marcado, mas não mostra nada,

voce está fazendo um loop em cima do banco de dados e não em cima dos componentes... a pesquisa com FindComponent é realizada em cima de todos os componentes que compõem o form ( inclusive ele proprio )

OBS: supondo que os seus edits já estejam nomeados

Alu1 ... Alu2 .... Alu3 ... etc

para procura-los voce em que fazer uma pesquisa usando o comando FOR

procedure TForm1.Button1Click(Sender: TObject);
var ContaM : integer;
begin

  for ContaM := 0 to ComponentCount -1 do
      TEdit( FindComponent( 'Alu' + IntToStr( ContaM ) ) ).Text := '**********';
end;
Tente entender a lógica do processo e aplica-lo ao seu código abraço
pois como eu faço um loop ai ele tem que pular no Alu1(alu2, alu3, alu4.....).text e mostrar o aluno que está marcado, mas não mostra nada,
voce está fazendo um loop em cima do banco de dados e não em cima dos componentes... a pesquisa com FindComponent é realizada em cima de todos os componentes que compõem o form ( inclusive ele proprio ) OBS: supondo que os seus edits já estejam nomeados Alu1 ... Alu2 .... Alu3 ... etc para procura-los voce em que fazer uma pesquisa usando o comando FOR
procedure TForm1.Button1Click(Sender: TObject);
var ContaM : integer;
begin

  for ContaM := 0 to ComponentCount -1 do
      TEdit( FindComponent( 'Alu' + IntToStr( ContaM ) ) ).Text := '**********';
end;
Tente entender a lógica do processo e aplica-lo ao seu código abraço
Caraca, era isso mesmo, troquei o nil por self e funcionou mais ou menos certo... mostra ai ele mostrou nos texts dos esdits, mas só está mostrando. ficou assim:
procedure TFrmTeoricas.FormCreate(Sender: TObject);
var
  soma, a : Integer;
  Alunos : Integer;
begin

  with QryAlunos do
    begin
      close;
      sql.clear;
      sql.add('select * from Configuracao');
      open;
    end;

  Alunos := QryAlunos.FieldByName('TOT_ALU_TEORICAS').AsInteger;

  TxtData.Date := date ();

  A := 0;

 // Criando total de alunos
  for CA :=1 to 16  do
   for CAC := 1 to Alunos do // criando colunas
      begin
        A := A + 1;
        soma := A;

        CodAlu := TEdit.Create(Self);
        with CodAlu do
          begin
            Name       := 'Alu'+ IntToStr(soma);
            Tag        := ca;
            Left       := 5+(CAC*82);
            Height     := 20;
            Width      := 55;
            AutoSize   := false;
            Font.Size  := 8;
            Text       := '';
            top        := -19+(CA*20);
            Parent     := Grade;
            Cursor     := crCross;
            OnDblClick := MarcaAulas;
            OnMouseMove:= MudarCursor;
            OnKeyDown  := BloqueioDesbloqueio;
          end;
       end;


  A := 0;
 // Criando totais de materias
  for MA :=1 to 16  do
    for MAC := 1 to Alunos do // criando colunas de materias
      begin
        A := A + 1;
        soma := A;

        Materias := TEdit.Create(Self);
        with Materias do
          begin
            Name := 'Mat'+ IntToStr(soma);;
            Left       := 60+(MAC*82);
            Height     := 20;
            Width      := 24;
            AutoSize   := false;
            Font.Size  := 8;
            Text       := '';
            top        := -19+(MA*20);
            Parent     := Grade;
            Cursor     := crCross;
            OnMouseMove:= MudarCursor;
          end;
      end;
end;
e ai no procedimento de consulta agendamento: ficou da mesma maneira:
procedure TFrmTeoricas.ConsultaAgendamento;
begin

    ContaM := 1;
    With DtmIza.QryIza do
    begin
      close;
      sql.Clear;
      sql.Add('Select * From Teoricas where Instrutor = :Inst and Data = :Dat');
      ParamByName('Inst').AsString := txtcodins.Text;
      ParamByName('Dat').AsDate    := txtData.date;
      open;
    end;

    while ( not dtmIza.qryiza.EOF ) do
    begin
       if DtmIza.QryIza.FieldByName('Bloqueado').AsString = 'S' then
       begin
          TEdit( FindComponent( 'Alu' + IntToStr( ContaM ) ) ).Text := '**********';
       end
       else
       begin
          TEdit( FindComponent( 'Alu' + IntToStr( ContaM ) ) ).Text := StrZero (DtmIza.QryIza.FieldByName('Aluno').AsInteger, 6);
          TEdit( FindComponent( 'Mat' + IntToStr( ContaM ) ) ).Text := DtmIza.QryIza.FieldByName('Sigla').asstring;
       end;
       {else
       begin
          TEdit( FindComponent( 'Alu' + IntToStr( ContaM ) ) ).Text := '';
       end;  }
       contaM:=contaM+1;
       dtmIza.qryiza.Next;
    end;
end;
Mas agora ele só não está mostrando, tipo assim se eu marquei os horarios de 08:00, 09:00, 11:00 etc, ai nos edits ele mostra tudo na fileira das 08:00 hs mas tá assim os Edits são criados comecando um na frente do outro então ele cria no horario das: 08:00 hs Alu1, Alu2, Alu3, Alu4, Alu5, Alu6, Alu7....Alu10 depois ele pula para a linha de baixo que é o horario das: 09:00 hs Alu11, Alu12, Alu13, Alu14, Alu15, Alu16, Alu17....Alu20 e ele vai criando dependendo de (x) edtis que o usuario vai querer que crie um na frente do outro e sempre vai ser 16 edits um em baixo do outro tipo assim: 1 - 08:00 Alu1, Alu2, Alu3, Alu4, Alu5, Alu6, Alu7....Alu10 2 - 09:00 Alu11, Alu12, Alu13, Alu14, Alu15, Alu16, Alu17....alu10 3 - 10:00 Alu21, Alu22, Alu23, Alu24, Alu25, Alu26, Alu27....alu20 4 - 11:00 Alu31, Alu32, Alu33, Alu34, Alu35, Alu36, Alu37....alu30 ... 16 - 23:00 Alu171, Alu172, alu173 Alu174, Alu175, Alu176, Alu177....alu180 ai na consulta para mostrar os agendamento, está assim contando
ContaM := 1;
    With DtmIza.QryIza do
    begin
      close;
      sql.Clear;
      sql.Add('Select * From Teoricas where Instrutor = :Inst and Data = :Dat');
      ParamByName('Inst').AsString := txtcodins.Text;
      ParamByName('Dat').AsDate    := txtData.date;
      open;
    end;

    while ( not dtmIza.qryiza.EOF ) do
    begin
       if DtmIza.QryIza.FieldByName('Bloqueado').AsString = 'S' then
       begin
          TEdit( FindComponent( 'Alu' + IntToStr( ContaM ) ) ).Text := '**********';
       end
       else
       begin
          TEdit( FindComponent( 'Alu' + IntToStr( ContaM ) ) ).Text := StrZero (DtmIza.QryIza.FieldByName('Aluno').AsInteger, 6);
          TEdit( FindComponent( 'Mat' + IntToStr( ContaM ) ) ).Text := DtmIza.QryIza.FieldByName('Sigla').asstring;
       end;
       {else
       begin
          TEdit( FindComponent( 'Alu' + IntToStr( ContaM ) ) ).Text := '';
       end;  }
       contaM:=contaM+1;
       dtmIza.qryiza.Next;
    end;

como ele cria um atras do outro e depois vai pulando em fileira ele mostra tudo bagunçado tipo se os horairos estão marcados 08:00, 10:00 ele só mostra na primeira por causa da contagem dos nomes dos edits.

e agora como dá para deixar essa primeira fileira como das 08:00 a segunda das 09:00 mas sabendo que o total de fileiras é (x) ?

Editado por robinhocne
Link para o comentário
Compartilhar em outros sites

  • 0
como ele cria um atras do outro e depois vai pulando em fileira ele mostra tudo bagunçado tipo se os horairos estão marcados 08:00, 10:00 ele só mostra na primeira por causa da contagem dos nomes dos edits.

e agora como dá para deixar essa primeira fileira como das 08:00 a segunda das 09:00 mas sabendo que o total de fileiras é (x) ?

Amigo..Na leitura do registro ( tem mais de uma campo que será atribuido ) ?

A cada incremento do ContaM ... realmente corresponde ao indice do componente que quer usar ?

Observe a sequencia dos registros na tabela... será a mesma que voce terá que usar para jogar os conteudos nos edits

abraço

Link para o comentário
Compartilhar em outros sites

  • 0
como ele cria um atras do outro e depois vai pulando em fileira ele mostra tudo bagunçado tipo se os horairos estão marcados 08:00, 10:00 ele só mostra na primeira por causa da contagem dos nomes dos edits.

e agora como dá para deixar essa primeira fileira como das 08:00 a segunda das 09:00 mas sabendo que o total de fileiras é (x) ?

Amigo..Na leitura do registro ( tem mais de uma campo que será atribuido ) ?

A cada incremento do ContaM ... realmente corresponde ao indice do componente que quer usar ?

Observe a sequencia dos registros na tabela... será a mesma que voce terá que usar para jogar os conteudos nos edits

abraço

bom fiz um exemplo para você ver e compreender:

PROGRAMAEXEMPLO

Primeiro você abre o datamodule (FdtmIza) e conecta no caminho certo do banco de dados pelo (dbaIza) o banco de dados está dentro da pasta teste mesmo (IzaCfc), a ordem do programa tem que ser essa então tem que seguila certa...

eu utilizo o delphi 7 e firebird 2.0 como banco

vai pedir dois componentes e está dentro da pasta teste um é o psvborderlabels, que são os labels dos horarios, e outro provalvemente você tem que é o Rxlib, mas tem ai tbém, se pedir outro componente, pode tirar ele da (Uses) pois tirei todos.

Fico aguardando respota.!

Link para o comentário
Compartilhar em outros sites

  • 0
ele mostra tudo bagunçado tipo se os horairos estão marcados 08:00, 10:00 ele só mostra na primeira por causa da contagem dos nomes dos edits.

me passa a tela que esta mostrando bagunçado

abraço

vou lhe passar um exemplo que fiz, ai você pode vizualizar melhor, só que você vai ter que instalar o psvborderlabel, pois é o componente de labels, e o Rxlib provavelmente você tem ai, se não tiver tem dentro da pasta componentes, o banco de dados está ai dentro da pasta mesmo (IzaCfc), há conecta direito o banco de dados no datamodule pois o caminho que eu configurei é da minha maquina aki.

>>>>>>Baixe o>>>>>Exemplo<<<<<<<<<

Link para o comentário
Compartilhar em outros sites

  • 0
Colega .. meu tempo esta curto para entregar um trabalho , mas pelo que pude observar, basta voce colocar os registros na tabela na mesma sequencia em que voce colocara nos componentes.

abraço

é uma boa ideia e acho que assim eu consiguo fazer, mas semana que vem tem um amigo programador meu que vai me ajudar, e ele disse que tem uma maneira sim, com certeza há, ai se der certo eu posto aqui, só estou esperando para fechar esse tópico, mas se não der certo vou fazer da maneira que você falou.

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...