Fórum Insert usando MestreDetalhe DatasetField #397430

17/03/2011

0

Seguinte fizemos um exemplo básico uma tabela Contato (ID, Nome) e outra Telefone (ID, Contato_ID,Telefone).   Usamos um sqlDataset (select * from contato) e no outro (sql * from telefone where Contato_ID = :ID) montamos toda estrutura mestre detalhe com o DataSetfield até aí td blz na visualizacao. Agora qdo vamos dar um insert na tabela detalhe ao invés de o ID da tabela Contato preencher o campo contato_id, ela preenche é o ID da Tabela Telefone. Pra resolver este problema alteramos os nome dos campos ID para:Tabela Contato   (Contato_ID, Nome) eTabela Telefone   (Telefone_ID, Contato_ID,Telefone).   e funcionou perfeitamente. Gostariamos de saber se há outra forma de resolver este problema na hora da inserção já que  teríamos que mudar nosso padrão de nomenclatura do banco de dados.
Parabéns pelo blog estou sempre acompanhando as novidades.. 
Abxxx Muito Obrigado
 
Samuel Silva

Samuel Silva

Responder

Posts

17/03/2011

André Silveira

O funcionamento do insert com datasetfield é esse mesmo, pois quando se tem o mesmo nome de campo em duas tabelas diferentes, ele usará o mesmo nome do campo usado no relacionamento (ID).

O que se pode fazer é setar no OnBeforeUpdateRecord, para alterar o campo do delta para colocar o valor correto no campo certo.

No mais somente renomeando o campo para que não se repita o nome mesmo que em tabelas diferentes quando se usa essa estrutura de relacionamento mestre/detalhe.

Atenciosmente,

André Luis da Silveira.
Responder

Gostei + 0

17/03/2011

André Silveira

Acabei de fezer um teste aqui e o que pode fazer para não ter que renomear todos os campos nas tabelas, seria renomear eles apenas nas querys.

Sendo assim o campo ID do contato ficaria com o nome na query de CONTATO_ID, fazendo o link com a outra tabela por esse campo, assim ele colocaria o código do contato no campo correto do filho.


Somente essa saída ou então renomear todos os campos no banco.

Atenciosamente,


André Luis da Silveira.
Responder

Gostei + 0

17/03/2011

Samuel Silva



  Acabei de fezer um teste aqui e o que pode fazer para não ter que renomear todos os campos nas tabelas, seria renomear eles apenas nas querys.

Sendo assim o campo ID do contato ficaria com o nome na query de CONTATO_ID, fazendo o link com a outra tabela por esse campo, assim ele colocaria o código do contato no campo correto do filho.


Somente essa saída ou então renomear todos os campos no banco.

Atenciosamente,


André Luis da Silveira.
 
  Mas nesse caso renomear os campos no seria o mais correto! Até porque o banco está apenas modelado. 

Abxxx Obrigado pela ajuda. 
Responder

Gostei + 0

17/03/2011

André Silveira

Se o banco está somente modelado, pode sim renomear diretamente nas tabelas do mesmo.
Sugiro que utilize uma notação que deixe mais claro a qual tabela o campo pertence, algo mais ou menos assim:
Tabela Clientes :
CODI_CLI, NOME_CLI, FONE_CLI

Tabela Fornecedores:
CODI_FOR, DESC_FOR, FONE_FOR


Tabela Produtos:
CODI_PRO, DESC_PRO, UNID_PRO, CODI_FOR (campo relacionado a tabela fornecedores).

Assim acho que fica mais fácil de saber qual o campo que faz relacionamento a qual tabela do banco.

Atenciosamente,


André Luis da Silveira.
Responder

Gostei + 0

18/03/2011

Samuel Silva



  Se o banco está somente modelado, pode sim renomear diretamente nas tabelas do mesmo.
Sugiro que utilize uma notação que deixe mais claro a qual tabela o campo pertence, algo mais ou menos assim:
Tabela Clientes :
CODI_CLI, NOME_CLI, FONE_CLI

Tabela Fornecedores:
CODI_FOR, DESC_FOR, FONE_FOR


Tabela Produtos:

CODI_PRO, DESC_PRO, UNID_PRO, CODI_FOR (campo relacionado a tabela fornecedores).

Assim acho que fica mais fácil de saber qual o campo que faz relacionamento a qual tabela do banco.

Atenciosamente,


André Luis da Silveira.

 


Ops.. Obrigado pelas considerações!
Responder

Gostei + 0

18/03/2011

Marco Salles

Além da nomenclatura dar uma orientação melhor ao desevolvimento , eu particularmente , para evitar problemas iniciais relatado por vc , gosto de deixar o nome do relacionamento. Evitara problemas relatoado inicialmente por vc alé de ter que ficar criando solução ou paleativos para contornar o problema    
Table Contato
ID_Cont;
Nome_Cont
 
SqlCliente
(select * from contato)
 
Tabela Telefone
ID_Tel
ID_Cont  ; apesar deste campo não seguir a padronização do nome ele mostra claramente do que se trata
Telefone_Tel
 
SqlTelefone 
(sql * from telefone where Contato_ID = :Contato_ID)
   
Responder

Gostei + 0

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

Aceitar