Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

wilsoncrescencio

Evitando duplicação de dados

Recommended Posts

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caro Colega,A integridade das informações de um banco de dados e tarefa dele. Se você ja tem um ambiente de produção o melhor a fazer é pensar em um banco de dados mais robusto que vai cuidar direitinho para não haver duplicidades, falhas de integridade referencial etc. Dai você vai ter todo o tempo do mundo para se dedicar ao seu negocio. O Postgress ta muito bom e facil de acessar usando ODBC + ADO ou Direto mesmo via ZEOS.O Mysql Idem, O Firebird (antigo interbase , tem ate acesso nativo)Nada contra o Acess, mas ja ta na hora de mudar. Valew?Ainda assim se você não quiser mudar de banco , basta fazer uma chave unica impedindo que tal duplicidade aconteça. O acess tambem tem indices.Ate +

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sabe o que é Braulio 128...Essa dica q dei é para quem está realmente começando... gente como eu que está aprendendo primeiro alguma coisa de Delphi para depois se aprofundar em BDs masi robustos.E você há de convir comigo que para quem está começando o ACCESS é bem mais fácil. Principalmente se o sistema não requer muito do BDDe qualquer forma obrigado pelos seus comentários...É sempre bom poder contar com o auxílio e a boa vontade dos mais experientes

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não tenho muito conhecimento em MS Acess

 

mais tenho algumas aplicações em Acess que não estão me dando problemas...

 

Axo sim que pra quem ta comecando o Acess é uma boa ferramenta...

 

Até+

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.