Consulta está certa mas não retorna.

25/06/2008

0

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 nao me mostra nada, mas o problema está no procedimento consultagendamento.

foi declarado as variaveis

....
  public
    { Public declarations }
  end;

var
  FrmTeoricas: TFrmTeoricas;
  LbHorIni, LbHorFin : TpsvBorderLabel;
  CA, CAC, MA, MAC, HIni, HFin : Integer;
  CodAlu, Materias : TEdit;
  HorIni, HorFin : String;  // recebe os horarios por instrutor da tabela
  Aulas : Integer; // recebe a quantidade de aulas por instrutor da tabela
  Conta, ContaM : Integer;
.....


Criaçao dos Edits:


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 // fileira de edits
   for CAC := 1 to Alunos do // criando colunas de codigos dos alunos
      begin
        A := A + 1;
        soma := A;
        CodAlu            := TEdit.Create(nil);
        CodAlu.Name       := ´Alu´+ IntToStr(soma);
        codAlu.Tag        := ca;
        CodAlu.Left       := 5+(CAC*82);
        CodAlu.Height     := 20;
        CodAlu.Width      := 55;
        CodAlu.AutoSize   := false;
        CodAlu.Font.Size  := 8;
        CodAlu.Text       := ´´;
        CodAlu.top        := -19+(CA*20);
        CodAlu.Parent     := Grade;
        CodAlu.Cursor     := crCross;
        CodAlu.OnDblClick := MarcaAulas;
        CodAlu.OnMouseMove:= MudarCursor;
       end;


 // Criando totais de materias
  A := 0;
  for MA :=1 to 16  do  //   fileira de edits
    for MAC := 1 to Alunos do // criando colunas de materias
      begin
        A := A + 1;
        soma := A;
        Materias            := TEdit.Create(nil);
        Materias.Name       := ´Mat´+ IntToStr(soma);
        Materias.Left       := 60+(MAC*82);
        Materias.Height     := 20;
        Materias.Width      := 24;
        Materias.AutoSize   := false;
        Materias.Font.Size  := 8;
        Materias.Text       := ´´;
        Materias.top        := -19+(MA*20);
        Materias.Parent     := Grade;
        Materias.Cursor     := crCross;
        Materias.OnMouseMove:= MudarCursor;
        Materias.OnDblClick := teste;
      end;

end;



aqui eu busco os horarios dos instrutores e jogo nos captions dos labels:


procedure TFrmTeoricas.txtcodinsExit(Sender: TObject);
begin
   ConsultaRegistros (´Instrutores´, ´Codigo,  Nome´, ´Codigo=´ + TxtCodIns.Text);
   TxtCodIns.Text  := LeDados (´Codigo´);
   TxtNomIns.Text  := LeDados (´Nome´);
   TxtCodIns.Text := StrZero (StrToFloat(TxtCodIns.Text), 3);
   TxtCod.SetFocus;
   SpbAluLoc.Enabled := True;
   TxtCodMat.ReadOnly := False;
   SpbAnt.Enabled  := True;
   SpbPro.Enabled  := True;


    Conta := 1;
    With DtmIza.QryIza do
    begin
      close;
      sql.Clear;
      sql.Add(´Select * From HorariosTeoricas where Instrutor = :Inst order by horarioInicial´);
      ParamByName(´Inst´).AsString := txtcodins.Text;
      open;
    end;

    while ( not dtmIza.qryiza.EOF ) do
    begin
       TpsvBorderLabel( FindComponent( ´Hor´ + IntToStr( Conta ) ) ).Caption := FormatDateTime(´hh:nn´, DtmIza.QryIza.FieldByName(´HorarioInicial´).AsDateTime);
       TpsvBorderLabel( FindComponent( ´Hora´ + IntToStr( Conta ) ) ).Caption := FormatDateTime(´hh:nn´, DtmIza.QryIza.FieldByName(´HorarioFinal´).AsDateTime);
       conta :=conta+1;
       dtmIza.qryiza.Next;
    end;
   ConsultaAgendamento;
end;


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


alguém poderia me ajudar ???


Robinhocne

Robinhocne

Responder

Posts

25/06/2008

Robinhocne

fiz um debug e ai ele me retorna os dados certos mas o problema está aqui,:

TEdit( FindComponent( ´Alu´ + IntToStr( ContaM ) ) ).Text 


mas o que será ?


Responder

26/06/2008

Robinhocne

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;


[b:c8ad93585f]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) ?
[/b:c8ad93585f]


Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

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

Aceitar