Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Eu sempre estou me preocupando com a duplicação de dados.
Como trabalho em uma escola o aluno não pode estar matriculado na mesma série duas vezes... a não ser que seja repetente, mas aí estaria matriculado na mesma série mas em anos diferentes.
Também não pode estar duas vezes na mesma sala de aula.
Então devemos evitar a duplicação de dados...
Eu uso o Delphi2006 , conecto meu banco de dados ACCESS através do ADOConection
Supondo-se que eu tenha um Form chamado Inser_Sala (para inserir os alunos em Sala de Aula).
Neste Form eu tenho duas ADOQuerys e uma ADOTable. As ADOQuerys denominam-se Master1 e Master2, a ADOTable chama-se Detail. Entre outras coisas um componente TButton para inserção do nome do aluno.
A Master1 me mostra a relação de todos os alunos e suas respectivas séries
A master2 me mostra a relação de alunos já separados em suas respectivas salas de aula
Resolvi o problema de duplicação da seguinte maneira:
procedure TINSER_SALA.inserindoClick(Sender: TObject);
begin
detail.Edit;// módulo de edição
if Detail.Locate('Cod_aluno',master1alunocod_aluno.Text,[loCaseInsensitive, loPartialKey]) then //verificação se o código do aluno já existe na tabela a ser gravada (detail)
begin
MESSAGEDLG('O Aluno já faz parte desta sala de aula!'+#13+#13+ //os duplos 13 como estão configurados permitem centralização e duas linhas na caixa de erro
'Verefique o nome do Aluno e a sala para inserção',MTERROR,[MBOK],0); //mterror gera um form erro cancelando a inclusão do codigo repetido
detail.Edit;//libera para o próximo aluno
end
else
detail.Insert;// modulo de inserção
detailsala.Text := Edit3.Text; //gravação da sala relacionada com o aluno
detail.Post; // gravação da ADOTable Detail
master1.Next;//próximo aluno a ser inserido em sala de aula
begin
MASTER2.Close;
MASTER2.SQL.Clear;
MASTER2.SQL.Add('SELECT ALUNO.ALUNO, SALA.SALA, CONTROLE.ANO');
MASTER2.SQL.ADD('FROM (ALUNO INNER JOIN SALA ON ALUNO.COD_ALUNO = SALA.Cod_Aluno) INNER JOIN CONTROLE ON ALUNO.COD_ALUNO = CONTROLE.COD_ALUNO');
MASTER2.SQL.Add('WHERE CONTROLE.ANO = "'+Edit1.Text+'"');
MASTER2.SQL.ADD('AND SALA.SALA = "'+eDIT3.Text+'"');
MASTER2.Open;
end;
end;
Espero ter contribuido... um abraço a todos
Carregando comentários...