Fórum IBQryNotas.First; quem pode ajudar? #404599

08/07/2011

0

Amigos,               Como fazer para o label exibir por exemplo duas disciplinas que atende a situação do codigo abaixo, ou seja, gostaria que fica-se assim   exemplo:  O aluno foi aprovado nas disciplinas de: Português e matemática.   ao debugar as duas disciplinas são percorridas, só que no label só exibe matemática, ou seja, matemática substitui português.   IBQryNotas.First;
 while not IBQryNotas.Eof do
   begin
    if (IBQryNotasMEDIA_GLOBAL.Value >= 50)then
      begin
       ppLabel3.Caption := IBQryNotasNOME_DISCIPLINA_1.AsString;
      end;
   IBQryNotas.Next;
   end; Agradeço antecipadamente quem poder ajudar. Osmar.
Osmar

Osmar

Responder

Posts

08/07/2011

Marco Salles

Dentro da sua lógica em algum lugar Vc tem que concatenar conteudo do  Caption do Label

Assim , por exemplo

ppLabel3.Caption :=  ppLabel3.Caption + ' e ' +IBQryNotasNOME_DISCIPLINA_1.AsString;

do jeito que vc esta fazendo o valor do caption do Label esta sendo subscrito e automaticamente substituido



Responder

Gostei + 0

08/07/2011

Osmar

Amigo primeiro agradeço a atenção,           Esta funcionado parcialmente, quando é com 2 disciplinas fica assim:           e LÍNGUA PORTUGUESA e MATEMÁTICA - ou seja o 'e' entra duas vezes.           Mas se for 3 disciplinas ou 4, aí dá erro.  
Responder

Gostei + 0

08/07/2011

Marco Salles

Eu não esperava que fosse resolver

Eu so te dei o caminho

[QUOTE]Dentro da sua lógica em algum lugar Vc tem que concatenar conteudo do  Caption do Label[/QUOTE]

acredito que vc em condiçoes de depurar o seu código e concatenar essas strings de modo que não substitua

caso vc não consiga coloque a definição dos campos de sua tabela

Responder

Gostei + 0

08/07/2011

Osmar

a Tabela NOTAS tem os seguintes campos   CODIGO (id) MATRICULA_ALUNO_NOTAS BIMESTRE FALTAS NOTA CODIGO_TURMA_NOTAS ANO DISCIPLINA_NOTAS ESCOLA (chave secundária)     este é o select que foi feito por um amigo, o qual atende todas as outras situações do formulário:     select n1.bimestre as bimestre_1,
       n1.faltas as faltas_1,
       n1.nota as nota_1,
       n1.codigo_turma_notas as codigo_turma_1,
       d1.nome_disciplina as nome_disciplina_1,
       n1.disciplina_notas as disciplina_1,
       d1.carga_horaria_1sem as carga_horaria_1sem_1,
       d1.carga_horaria_2sem as carga_horaria_2sem_1,
       d1.aulas_dadas_1sem as aulas_dadas_1sem_1,
       d1.aulas_dadas_2sem as aulas_dadas_2sem_1,        n2.bimestre as bimestre_2,
       n2.faltas as faltas_2,
       n2.nota as nota_2,
       n2.codigo_turma_notas as codigo_turma_2,
       n2.disciplina_notas as disciplina_2,        n1.nota + n2.nota as nota_geral,
       case when (n1.nota + n2.nota < 50) then
       coalesce(((cast(n1.nota + n2.nota as numeric(5,1)) * 2) + n3.nota) / 3,0)
       else (n1.nota + n2.nota) end as media_global,        n3.nota as nota_recuperacao_1,
       n4.nota as nota_recuperacao_2,        n1.escola from notas n1 left join disciplina d1 on n1.disciplina_notas = d1.codigo
              inner join disciplinas_progressao dp on d1.codigo = dp.cod_disciplina
              left join notas n2 on (n1.matricula_aluno_notas = n2.matricula_aluno_notas and
                                     n1.bimestre <> n2.bimestre and
                                     n2.bimestre <> '1 RECUPERACAO' and
                                     n2.bimestre <> '2 RECUPERACAO' and
                                     n1.codigo_turma_notas = n2.codigo_turma_notas and
                                     n1.disciplina_notas = n2.disciplina_notas)
              left join notas n3 on (n1.matricula_aluno_notas = n3.matricula_aluno_notas and
                                     n1.bimestre <> n3.bimestre and
                                     n2.bimestre <> n3.bimestre and
                                     n3.bimestre <> '2 RECUPERACAO' and
                                     n1.codigo_turma_notas = n3.codigo_turma_notas and
                                     n1.disciplina_notas = n3.disciplina_notas)               left join notas n4 on (n1.matricula_aluno_notas = n4.matricula_aluno_notas and
                                     n1.bimestre <> n4.bimestre and
                                     n2.bimestre <> n4.bimestre and
                                     n3.bimestre <> n4.bimestre and
                                     n1.codigo_turma_notas = n4.codigo_turma_notas and
                                     n1.disciplina_notas = n4.disciplina_notas) where n1.matricula_aluno_notas =:aluno
  and n1.codigo_turma_notas =:turma
  and n1.bimestre = '1 SEMESTRE'
  and dp.cod_aluno =:aluno
  and dp.cod_turma =:turma
  order by n1.disciplina_notas
Responder

Gostei + 0

09/07/2011

Rodrigo Pereira


  Cria um vetor pra receber as disciplinas, depois vc testa se existe uma ou mais e implementa a virgula ou e
Responder

Gostei + 0

09/07/2011

Marco Salles


  Cria um vetor pra receber as disciplinas, depois vc testa se existe uma ou mais e implementa a virgula ou e


Então rodrigo.. Para a gente é dificil testar .. Mas acho que vc tem condiçoes , ja sabendo do efeito descobrir a causa

Coloque uma showmessage antes de cada Concatenação , para vc ir acompanhando a evolução de onde e como vc de alterar o seu código para que tenha o efeito desejado
Responder

Gostei + 0

09/07/2011

Emerson Nascimento

o erro pode estar nesta avaliação:

IBQryNotasMEDIA_GLOBAL.Value

se o conteúdo de MEDIA_GLOBAL for null você receberá uma mensagem de erro. troque para:

IBQryNotasMEDIA_GLOBAL.AsFloat

e veja se dá certo.

Responder

Gostei + 0

09/07/2011

Osmar

Rodrigo,            Agradeço a atenção, você poderia por favor implementar o codigo com o vetor para resolver este problema?
Responder

Gostei + 0

11/07/2011

Rodrigo Pereira

Testa ai pf

i := 0;



while not IBQryNotas.Eof do
   begin
    if (IBQryNotasMEDIA_GLOBAL.Value >= 50)then
      begin
           i := i + 1;
           disciplinas[i]:= IBQryNotasNOME_DISCIPLINA_1.AsString;
      
      end;
   IBQryNotas.Next;
   end;



case i of
     1 : aux := '';
     2 : aux := ' e ';
   else
     aux := ',';
   end;

   for j := 1 to i do begin

     if (j = i-1) and (i > 2) then
          aux := ' e ';

       mensagem := mensagem + disciplinas[j]+aux;
     end;


      label1.Caption := copy(mensagem,1,(length(mensagem)-2));
Responder

Gostei + 0

11/07/2011

Osmar

Rodrigo,              está dando erro nesta linha: Disciplinas[i] := IBQryNotasNOME_DISCIPLINA_1.AsString;
  procedure TFrmRelFichaIndiv6ao9_Prog.BtnImprimeProgClick(Sender: TObject);
var
   i, j : integer;
  aux, mensagem, Disciplinas : string;
begin     //carrega os dados do aluno
  IBQryAluno.Close;
  IBQryAluno.ParamByName('matricula').AsString := DmDados.IBQryAlunoTurmaMATRICULA_ALUNO.AsString;
  IBQryAluno.Open;     IBQryAlunoTurma.Close;
  IBQryAlunoTurma.ParamByName('escola').AsString := DmDados.IBQryAlunoTurmaESCOLA.AsString;
  IBQryAlunoTurma.ParamByName('matricula').AsString := DmDados.IBQryAlunoTurmaMATRICULA_ALUNO.AsString;
  IBQryAlunoTurma.ParamByName('turma').AsString := DmDados.IBQryTurmaCODIGO.AsString;
  IBQryAlunoTurma.Open;     IBQryNotas.Close;
  IBQryNotas.ParamByName('aluno').AsString := DmDados.IBQryAlunoTurmaMATRICULA_ALUNO.AsString;
  IBQryNotas.ParamByName('turma').AsString := DmDados.IBQryTurmaCODIGO.AsString;
  IBQryNotas.Open;   i := 0; IBQryNotas.First;
while not IBQryNotas.Eof do
   begin
    if (IBQryNotasMEDIA_GLOBAL.AsFloat >= 50)then
      begin
        i := i + 1;
        Disciplinas[i] := IBQryNotasNOME_DISCIPLINA_1.AsString;  // está parando aqui, string e char imcompativéis
      end;
   IBQryNotas.Next;
   end; case i of
     1 : aux := '';
     2 : aux := ' e ';
   else
     aux := ',';
   end;    for j := 1 to i do begin      if (j = i-1) and (i > 2) then
          aux := ' e ';        mensagem := mensagem + disciplinas[j]+aux;
     end;
      ppLabel3.Caption := copy(mensagem,1,(length(mensagem)-2));

 
Responder

Gostei + 0

11/07/2011

Rodrigo Pereira

Mais vc declarou o vetor com string?
Responder

Gostei + 0

11/07/2011

Rodrigo Pereira

declara dessa forma aqui disciplinas : array [ 1..30] of string;
e testa, creio q vai dar certo!!
Responder

Gostei + 0

11/07/2011

Osmar

Rodrigo,              VALEU cara sem você eu não teria conseguido, fiz apenas uma pequena inclusão no final do código, já que, quando o aluno passava apenas em uma disciplina, estava sendo retirado os 2 últimos caracteres da mesma, veja como ficou:     ppLabel3.Caption := '';     i := 0;     IBQryNotas.First;
  while not IBQryNotas.Eof do
     begin
      if (IBQryNotasMEDIA_GLOBAL.AsFloat >= 50)then
        begin
          i := i + 1;
          Disciplinas[i] := IBQryNotasNOME_DISCIPLINA_1.AsString;
        end;
     IBQryNotas.Next;
     end;     case i of
     1 : aux := '';
     2 : aux := ' e ';
   else
     aux := ', ';
   end;      for j := 1 to i do begin      if (j = i-1) and (i > 2) then
          aux := ' e ';        mensagem := mensagem + disciplinas[j]+aux;
     end;        if i = 1 then
   begin
       ppLabel3.Caption := mensagem+'.';
   end
     else
       ppLabel3.Caption := copy(mensagem,1,(length(mensagem)-2))+ '.';
           Mais uma vez amigo, muito obrigado, não sei o que seria de nós iniciantes, se não existisse colaboradores como você.                    
Responder

Gostei + 0

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

Aceitar