IBQryNotas.First; quem pode ajudar?
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.
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
Curtidas 0
Respostas
Marco Salles
08/07/2011
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
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
GOSTEI 0
Osmar
08/07/2011
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.
GOSTEI 0
Marco Salles
08/07/2011
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
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
GOSTEI 0
Osmar
08/07/2011
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
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
GOSTEI 0
Rodrigo Pereira
08/07/2011
Cria um vetor pra receber as disciplinas, depois vc testa se existe uma ou mais e implementa a virgula ou e
GOSTEI 0
Marco Salles
08/07/2011
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
GOSTEI 0
Emerson Nascimento
08/07/2011
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.
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.
GOSTEI 0
Osmar
08/07/2011
Rodrigo,
Agradeço a atenção, você poderia por favor implementar o codigo com o vetor para resolver este problema?
GOSTEI 0
Rodrigo Pereira
08/07/2011
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));
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));
GOSTEI 0
Osmar
08/07/2011
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));
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));
GOSTEI 0
Rodrigo Pereira
08/07/2011
Mais vc declarou o vetor com string?
GOSTEI 0
Rodrigo Pereira
08/07/2011
declara dessa forma aqui disciplinas : array [ 1..30] of string;
e testa, creio q vai dar certo!!
e testa, creio q vai dar certo!!
GOSTEI 0
Osmar
08/07/2011
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ê.
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ê.
GOSTEI 0