Ata de Resultados
Nobres Colegas,
Venho mais uma vez pedir a ajuda dos nobres colegas para poder resolver uma dúvida que me ocorre:
Tenho um sistema em paradox para administração escolar rodando, estou precisando gerar a ata de resultados finais para o mesmo, porém, estou com um problema que ainda não consegui resolver.
Tenho uma tabela onde ficam registradas todas as informações de notas e matérias do alunos.
Ex.:
Nome Matéria Nota
---------------------------------
Maria da silva Portugues 10
Maria da Silva Matemática 08
Maria da Silva Inglês 09
Maria da Silva Física 08
e assim por diante com todos os alunos da turma. Se existirem 10 matérias o nome do aluno se repete as mesmas 10 vezes.
Como faria para gerar uma segunda tabela ou outra maneira de poder gerar ata de resultados finais com o tipo de tabela que possuo?
Nesta sistema estou utilizando Delphi 7, Paradox e FortesReport, mas a dica poderia ser também em QR se caso fosse mais prático.
Desde já agradeço a ajuda.
Abraços.
Ralp Alves Bezerra
Venho mais uma vez pedir a ajuda dos nobres colegas para poder resolver uma dúvida que me ocorre:
Tenho um sistema em paradox para administração escolar rodando, estou precisando gerar a ata de resultados finais para o mesmo, porém, estou com um problema que ainda não consegui resolver.
Tenho uma tabela onde ficam registradas todas as informações de notas e matérias do alunos.
Ex.:
Nome Matéria Nota
---------------------------------
Maria da silva Portugues 10
Maria da Silva Matemática 08
Maria da Silva Inglês 09
Maria da Silva Física 08
e assim por diante com todos os alunos da turma. Se existirem 10 matérias o nome do aluno se repete as mesmas 10 vezes.
Como faria para gerar uma segunda tabela ou outra maneira de poder gerar ata de resultados finais com o tipo de tabela que possuo?
Nesta sistema estou utilizando Delphi 7, Paradox e FortesReport, mas a dica poderia ser também em QR se caso fosse mais prático.
Desde já agradeço a ajuda.
Abraços.
Ralp Alves Bezerra
Ralp
Curtidas 0
Respostas
Ralp
05/03/2008
up
GOSTEI 0
Ferreia2
05/03/2008
Ralp explica melhor o que é gerar uma ´Ata de Resultado´?
o que vc precisa que seja impresso?
o que vc precisa que seja impresso?
GOSTEI 0
Ralp
05/03/2008
Em minha tabela tenho os dados dispostos desta maneira (com o máximo de 10 disciplinas por aluno):
Nome Materia Nota
--------------- ----------- -----
Maria da silva Portugues 10
Maria da Silva Matemática 08
Maria da Silva Inglês 09
Maria da Silva Física 08
Porém, para gerar a ata de resultados finais da escola preciso que os dados fiquem desta forma
Maria da silva Portugues 10 | Matemática 08 | Inglês 09 | Física 08 e assim por diante.
Se puderem me ajudar lhe ficarei muito grato.
Ralp Alves
Nome Materia Nota
--------------- ----------- -----
Maria da silva Portugues 10
Maria da Silva Matemática 08
Maria da Silva Inglês 09
Maria da Silva Física 08
Porém, para gerar a ata de resultados finais da escola preciso que os dados fiquem desta forma
Maria da silva Portugues 10 | Matemática 08 | Inglês 09 | Física 08 e assim por diante.
Se puderem me ajudar lhe ficarei muito grato.
Ralp Alves
GOSTEI 0
Ferreia2
05/03/2008
Eu nunca fiz isso, mas a solução para mim seria criar uma tabela temporária e gravar os dados conforme vc quer, acabou a impressão exclui a tabela
GOSTEI 0
Ralp
05/03/2008
Eis questão, como faria para criar esta tabela temporária?
Abraços.
Ralp Alves
Abraços.
Ralp Alves
GOSTEI 0
Ferreia2
05/03/2008
Seguinte:
Na Coloca um componente ClientDataSet da Paleta DataAccess
Dê dois Cliques nele vai abrir o fields editor, ai clica com o botão direito e cria os campos que vc quer
Pronto isso já é uma tabela em memória, para adicionar os dados ou imprimir vc trabalha como se fosse uma tabela.
Acabou de imprimir vc executa este comando ClientDataSet1.EmptyDataSet
Na Coloca um componente ClientDataSet da Paleta DataAccess
Dê dois Cliques nele vai abrir o fields editor, ai clica com o botão direito e cria os campos que vc quer
Pronto isso já é uma tabela em memória, para adicionar os dados ou imprimir vc trabalha como se fosse uma tabela.
Acabou de imprimir vc executa este comando ClientDataSet1.EmptyDataSet
GOSTEI 0
Ralp
05/03/2008
Vou testar e lhe dou um retorno. Desde já muito obrigado por sua boa vontade.
GOSTEI 0
Hall 9000
05/03/2008
A solução não é das melhores, pois pelo jeito faltou normalizar algumas tabelas do seu banco de dados, mas, enfim, agora é resolver na gambiarra mesmo.
Faça como o FerreiA2 disse, coloque clientdataset (cdsAta) , crie os campos COD_ALUNO, NOME_ALUNO, NOTA_MATEMATICA, NOTA_PORTUGUES, NOTA_INGLES... enfim, todas as matéria possíveis.
Partindo do presuposto que vc já tenha uma query que retorna os dados assim:
MARIA DA SILVA PORTUGUES 8
MARIA DA SILVA INGLES 5
MARIA DA SILVA MATEMÁTICA 8
Crie uma procedure assim:
procedure TForm1.GerarAta;
var x: integer; pCodALuno: integer;
NomeUltimoAluno: string;
begin
while not suaQuery.eof do
begin
if cdsAta.State = dsBrowse then
cdsAta.Insert;
if (suaQuery.RecNo = 1) or (pCodAluno = suaQuery.FieldByName(´COD_ALUNO´).AsInteger) then
begin
pcodAluno:= suaQuery.FieldByName(´COD_ALUNO´).AsInteger;
NomeUltimoAluno:= suaQuery.FieldByName(´NOME´).AsString;
if suaQuery.FieldByName(´CAMPO_MATERIA´).AsString = ´MATEMATICA´ then
cdsAta.FieldByName(´NOTA_MATEMATICA´).AsString:= suaQuery.FieldByName(´CAMPO_NOTA´).AsString;
if suaQuery.FieldByName(´CAMPO_MATERIA´).AsString = ´PORTUGUÊS´ then
cdsAta.FieldByName(´NOTA_PORTUGUES´).AsString:= suaQuery.FieldByName(´CAMPO_NOTA´).AsString;
if suaQuery.FieldByName(´CAMPO_MATERIA´).AsString = ´INGLÊS´ then
cdsAta.FieldByName(´NOTA_INGLES´).AsString:= suaQuery.FieldByName(´CAMPO_NOTA´).AsString;
/// Faça este procedimento para todas as matérias...
end;
suaQuery.Next;
if (pCodAluno <> suaQuery.FieldByName(´COD_ALUNO´).AsInteger) then
begin
cdsAta.FieldByName(´NOME_ALUNO´).AsString:= NomeUltimoAluno;
cdsAta.FieldByName(´COD_ALUNO´).AsInteger:= pCodALuno;
cdsAta.Post;
pCodAluno:= suaQuery.FieldByName(´COD_ALUNO´).AsInteger;
end;
end;
end;
Chame o GerarAta antes de abrir o relatório. Ligue os QRDBText do gerador de relatório, seja no fortes ou QR, aos campos do clientdataset.
com esse procedimento vai aparecer assim:
codigo | Nome | Nota_Port | Nota_Mat | ..
10 | MARIA| 8 | 5 | ...
Espero que tenha ajudado...
inté...
Faça como o FerreiA2 disse, coloque clientdataset (cdsAta) , crie os campos COD_ALUNO, NOME_ALUNO, NOTA_MATEMATICA, NOTA_PORTUGUES, NOTA_INGLES... enfim, todas as matéria possíveis.
Partindo do presuposto que vc já tenha uma query que retorna os dados assim:
MARIA DA SILVA PORTUGUES 8
MARIA DA SILVA INGLES 5
MARIA DA SILVA MATEMÁTICA 8
Crie uma procedure assim:
procedure TForm1.GerarAta;
var x: integer; pCodALuno: integer;
NomeUltimoAluno: string;
begin
while not suaQuery.eof do
begin
if cdsAta.State = dsBrowse then
cdsAta.Insert;
if (suaQuery.RecNo = 1) or (pCodAluno = suaQuery.FieldByName(´COD_ALUNO´).AsInteger) then
begin
pcodAluno:= suaQuery.FieldByName(´COD_ALUNO´).AsInteger;
NomeUltimoAluno:= suaQuery.FieldByName(´NOME´).AsString;
if suaQuery.FieldByName(´CAMPO_MATERIA´).AsString = ´MATEMATICA´ then
cdsAta.FieldByName(´NOTA_MATEMATICA´).AsString:= suaQuery.FieldByName(´CAMPO_NOTA´).AsString;
if suaQuery.FieldByName(´CAMPO_MATERIA´).AsString = ´PORTUGUÊS´ then
cdsAta.FieldByName(´NOTA_PORTUGUES´).AsString:= suaQuery.FieldByName(´CAMPO_NOTA´).AsString;
if suaQuery.FieldByName(´CAMPO_MATERIA´).AsString = ´INGLÊS´ then
cdsAta.FieldByName(´NOTA_INGLES´).AsString:= suaQuery.FieldByName(´CAMPO_NOTA´).AsString;
/// Faça este procedimento para todas as matérias...
end;
suaQuery.Next;
if (pCodAluno <> suaQuery.FieldByName(´COD_ALUNO´).AsInteger) then
begin
cdsAta.FieldByName(´NOME_ALUNO´).AsString:= NomeUltimoAluno;
cdsAta.FieldByName(´COD_ALUNO´).AsInteger:= pCodALuno;
cdsAta.Post;
pCodAluno:= suaQuery.FieldByName(´COD_ALUNO´).AsInteger;
end;
end;
end;
Chame o GerarAta antes de abrir o relatório. Ligue os QRDBText do gerador de relatório, seja no fortes ou QR, aos campos do clientdataset.
com esse procedimento vai aparecer assim:
codigo | Nome | Nota_Port | Nota_Mat | ..
10 | MARIA| 8 | 5 | ...
Espero que tenha ajudado...
inté...
GOSTEI 0
Ralp
05/03/2008
Hall desde já lhe agradeço. Vou testar e lhe dou um retorno.
Abraços.
Abraços.
GOSTEI 0
Ralp
05/03/2008
Nobre Hall, gostaria muito de lhe agradecer pela ajuda e paciência disposta neste meu caso.
A rotina que informou funcionou perfeitamente.
Mais uma vez muito obrigado e se precisar estamos ai.
Abraços.
Ralp Alves
A rotina que informou funcionou perfeitamente.
Mais uma vez muito obrigado e se precisar estamos ai.
Abraços.
Ralp Alves
GOSTEI 0