Ir ao conteúdo
  • Cadastre-se

Dúvida em Master Detail - delphi


RED ICE

Posts recomendados

ae galera...

Tô com um problema em master detail em delphi...

é o seguinte:

Chave primária: Campo NOME.

Dados da tabela master: NOME (chave p.), TELEFONE.

Dados da tabela detail: NOME (chave p.), VENDAS.

-----------------------------------------------------------------

Tudo funciona perfeitamente, menos quando quero editar o nome de um regitro, por exemplo:

entro com os dados (NOME: Joao Silva) (VENDAS: 3 pares de sapatos) e salvo o registro.

Até ai tudo bem, mas de-repente me dou conta que o nome do fulano não é joão silva e sim JOAO SILVIO...

Dai eu clico em editar, e edito o campo nome com o valor "joao silvio" Perfeito... só que dai como a chave primária é o nome, os dados da tabela Detail ficam perdidas, pois o campo NOME da tabela detail não foi atualizado junto com o campo nome da tabela Master...

Existe alguma forma de fazer com que a edição do campo "nome" atualize as duas tabelas??? sem mudar a estrutura do banco, tipo inserir mais um campo para ser utilizado como chave primária...

obrigado a todos...

Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois...

Oi...

Pelo que pude perceber em meu projeto, estas definições já estão conforme você explicou... mas quando eu edito o nome de um cliente já cadastrado os dados da tabela detalhe ficam perdidos... por favor dê uma olhada no (projeto com código fonte) que coloquei no exemplo...

http://rapidshare.com/files/41440780/mastdet.zip.html

rode o programa navegue entre as pessoas cadastradas, depois tente editar o nome de uma delas na parte master...

se encontrarem uma solução para isso, por favor me informem...

Desde já muito obrigado.

OBS.: programa feito em delphi 6 - a base foi interligada através do "assitente do delphi"

Link para o comentário
Compartilhar em outros sites

Faltou somente você fazer o relacionamento entre as tabelas, alterei as duas e mantive somente uma chave primária (NOME), baixe o arquivo e veja como está agora:

http://rs92.rapidshare.com/files/41447104/teste_mastdet_alterado.zip

Insira um novo registro na Master, salve e insira um novo registro na Detail e veja o resultado.

Recomendo você baixar uma apostila sobre banco de dados para facilitar seus estudos.

Link para o comentário
Compartilhar em outros sites

Testei.. e o seu exemplo está funcionando perfeitamente...

a unica diferença que achei entre as tabelasd é que as suas estão com apenas uma chave primária (como você tinha falado), também tem uns arquivos *.val

e abrindo as tabelas pelo DatabaseDesktop, tem uma informação que aparece:

em dependent tables da tabela 1, aparece tab2.db. mas não consegui inserir esta informação nas minhas tabelas anteriores... como você fez para inserir esta informação e interligar as tabelas???

Muito obrigado pela ajuda.

Link para o comentário
Compartilhar em outros sites

Para criar o relacionamento entre as tabelas do exemplo faça o seguinte:

- Abra o programa Database Desktop.

- Clique no menu File -> Working Directory... -> botão Browse -> selecione o diretório/pasta do exemplo -> clique no botão OK -> clique no botão OK

- Clique no menu File -> Open -> Table -> selecione a tabela Detail (que no caso é a tab2).

- Clique no menu Table -> Restructure... -> No Combobox Table properties: selecione Referential Integrity -> botão Define -> Listbox a esquerda Fields: selecione NOME (chave primária) -> clique na seta apontanto a direita

- No Listbox Table: a direita clique na tabela tab1 e depois na seta apontando a esquerda.

- Clique no RadioButton Cascade e no CheckBox Strict referential integrity (Quando você excluir um registro na tabela master (tab1) ele exclui todos os registros correspondentes na tabela detail (tab2) ).

- Clique no botão OK e digite um nome, RI_01, por exemplo e clique no botão OK.

- Clique no botão Save para efetuar as alterações na tabela

No exemplo que te enviei esqueci de deixar o campo TELEFONE como chave primária também, isso faz com que a tab2 fique num relacionamento um-para-um com a tab1, se você alterar a tab2 e colocar o campo TELEFONE como chave primária junto com o campo NOME você tem o relacionamento um-para-muitos. Simplificando, um registro na tab1 (master) pode ter nenhum,um ou muitos registros na tab2, ou seja um cliente pode não ter um telefone, pode ter um telefone ou vários telefones registrados na tab2(detail).

Se mesmo assim ficar difícil de entender posso te enviar o passo-a-passo com imagens. Relacionamento entre tabelas é um pouco difícil de entender mesmo.

Link para o comentário
Compartilhar em outros sites

Consegui fazer tudo certinho conforme explicado, mas percebi que os dois exemplos (o meu e o seu) estão apresentando um erro quando se tenta deletar algum registro (master) Acho que este erro acontece por não ter apagado os dados do detalhe antes de tentar deletar o master... pois quando apago as informações do detail antes, dai o erro não aparece...

post-29170-13884944100696_thumb.jpg

Link para o comentário
Compartilhar em outros sites

Mostra o erro por causa do relacionamento, no Paradox o cascade não funciona para excluir registros do detail mesmo, você pode criar uma procedure que faça isso, no componente Table1 -> Events -> BeforeDelete (clique duas vezes para abrir a janela Code) e digite o seguinte depois do begin:

with Table2 do

begin

First;

while not Eof do

Delete;

end; // with

Resolve o problema na hora de excluir o registro na tabela Master.

Link para o comentário
Compartilhar em outros sites

Arquivado

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

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...