Fórum Master/Detail com ADOQuery: é possível? Como? #371414

19/06/2009

0

Olá.

Minha dúvida é sobre Master/Detail. No SQL Server criei duas tabelas: ALUNOS e MATRICULA. Um aluno pode estar matriculado várias vezes - uma matrícula para cada curso (o cenário é outro, estou simplificando).

Na tela de cadastro (exclusivamente para cadastro) usei 3 AdoQuery:

1 - SELECT * FROM ALUNOS WHERE CODIGO < 0: Não tras dados, apenas abre para a inserção.
2 - SELECT * FROM MATRICULA WHERE CODIGO < 0 : Não tras ados, apenas abre para a inserção
3 - SELECT * FROM CURSOS: Tras os cursos disponíveis para a matrícula.

Fiz o devido relacionamento das tabelas ALUNOS e MATRICULA no SQL Server.

Como faço o relacionamento MASTER/DETAIL para que durante a INCLUSÃO, antes mesmo de dar o post na master (ALUNOS), eu possa incluir os dados na filha (MATRICULA), mesmo não tendo o código para a integridade referencial? Queria dar o post na filha (para cada matrícula) e, ao final, ao dar o post na master tudo estar sincronizado.

Isso é possível? Tem maneira melhor?

Grato,

Willian


Willian

Willian

Responder

Posts

05/08/2009

Aalveso

William,


eu utilizo relacionamento Master/Detail com ADODataSet e ClientDataSet. Minha base de dados é Mysql 5.1. Funciona normalmente.
Não sei como você trabalha sua base, tão pouco como criou seus SELECT´s, mas segue algumas dicas para funcionar.
Primeiro ponto: na tabela Detail (ou filha), precisa existir um campo estrangeiro (FK, ou Foreign Key) com mesmo nome, e propriedade, do campo primário (PK, ou Primary Key) na tabela Master.
Exemplo: Tabela Master: Aluno (campo primário: id_aluno)
Tabela Detail: Matrícula (campo estrangeiro: id_aluno)
No seu ADODataSet, ou ADOQuery da tabela Detail, você adiciona um select assim:
select * from (tabela detail) where id_aluno = :id_aluno

Segundo ponto: não consegui fazer funcionar corretamente o relacionamento, quando a chave primária da tabela Master era do tipo Auto-incremento.

Terceiro ponto: se o seu relacionamento estiver funcionando corretamente, tudo que for fazer como colocar em modo de inserção, deletar e etc., você só precisa fazer na tabela Master, a tabela Detail sofre as alterações necessárias automaticamente.


Existem vários tópicos na internet demonstrando como funcionar o relacionamento com vários componentes, inclusive ADO, mas não muda nada de um para o outro, os cuidados acima precisam prevalecer para funcionar tudo no automático. Caso contrário, você terá que efetuar muito código para forçar o funcionamento.


Abraços

Alysson


Responder

Gostei + 0

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

Aceitar