Fórum Problemas com nested table #285429

20/06/2005

0

Tenho a seguinte estrutura de dados:

[b:0232fcd3ba]Cliente:[/b:0232fcd3ba]
ID+ (PK)
Nome: string
Endereco: string
etc...

[b:0232fcd3ba]ClienteContato:[/b:0232fcd3ba]
ID+ (PK)
ID_Cliente: (FK Cliente.ID)
Nome: string
Telefone: string
etc..

Na minha aplicação servidora (COM+), criei a ligação entre as tabelas usando nested tables:
[b:0232fcd3ba]SQLDataset_Cliente[/b:0232fcd3ba]
[i:0232fcd3ba]CommandText[/i:0232fcd3ba]: ´select * from cliente´;

[b:0232fcd3ba]Datasource_Cliente[/b:0232fcd3ba]
[i:0232fcd3ba]Dataset[/i:0232fcd3ba]: SQLDataset_Cliente

[b:0232fcd3ba]SQLDataset_ClienteContato[/b:0232fcd3ba]
[i:0232fcd3ba]CommandText[/i:0232fcd3ba]: ´select * from clientecontato where id_cliente = :id´
[i:0232fcd3ba]Datasource[/i:0232fcd3ba]: Datasource_Cliente;

[b:0232fcd3ba]DatasetProvider_Cliente[/b:0232fcd3ba]
[i:0232fcd3ba]Dataset[/i:0232fcd3ba]: SQLDataset_Cliente;

Até aí creio que não haja nenhum problema.

Na minha aplicação cliente, instanciei dois ClienteDatasets:
ClientDataset_Cliente e ClientDataset_ClienteContato.

Trabalho com sockets, então eu aponto o ClientDataset_Cliente.RemoteServer para um ConnectionBroker, e a propriedade DatasetProvider eu coloco como DatasetProvider_Cliente (aquele criado no COM+);
Persisto todos os campos (automaticamente é trazido o campo de ligação com a tabela ClienteContato);
aponto meu ClientDataset_ClienteContato.DatasetField para esse campo de ligação.

Tudo correto até aqui. (espero...)

O problema ocorre quando eu crio um registro na tabela filha (ClienteContato): [b:0232fcd3ba]ao invés de[/b:0232fcd3ba] o componente [b:0232fcd3ba]preencher[/b:0232fcd3ba] o campo ClienteContato.[b:0232fcd3ba]ID_Cliente[/b:0232fcd3ba], que é o campo de ligação entre a tabela ClienteContato (filha) e a tabela Cliente (pai) - como é visto na instrução SQL de SQLDataset_ClienteContato -, ele [b:0232fcd3ba]preenche o campo[/b:0232fcd3ba] ClienteContato.[b:0232fcd3ba]ID[/b:0232fcd3ba], que é o campo autoincremento da tabela filha.

Pelos meus testes só funcionaria a contento se os campos de ligação tivessem sempre o mesmo nome nas duas tabelas.

Fiz algo errado ou esse tipo de ligação - com campos de nome diferente - não é possível?

Qualquer ajuda será muito bem-vinda.


Emerson Nascimento

Emerson Nascimento

Responder

Posts

21/06/2005

Kotho

Os campos de ligação não são preenchidos automaticamente quando se insere um registro novo... este preenchimento deve ser feito manualmente...

Quanto ao seu procedimento, me parece que está tudo correto...


Responder

Gostei + 0

21/06/2005

Emerson Nascimento

os campos de ligação são preenchidos automaticamente sim. isso é uma afirmação.
porém o campo preenchido não é o campo correto. como eu disse o relacionamento é feito entre o campo ClienteContato.ID_Cliente e Cliente.ID, mas quando eu crio um novo registro ´filho´, a aplicação insiste em preencher o campo ClienteContato.ID ao invés de ClienteContato.ID_CLIENTE.


Responder

Gostei + 0

21/06/2005

Kotho

Bom... então nós temos versões diferentes do Delphi... a minha é a 7, e, com toda a certeza do mundo, os campos de ligação das tabelas filhas NÃO são preenchidos nos programas que eu fiz... Tive que preencher na unha...

Agora, só se o nome ID for tratado diferente pelo Provider... isso eu já não sei...

Talvez alguém possa tirar essa dúvida pra gente :D


Responder

Gostei + 0

21/06/2005

Emerson Nascimento

eu também utilizo o Delphi 7...


Responder

Gostei + 0

23/06/2005

Emerson Nascimento

sobe


Responder

Gostei + 0

24/06/2005

Emerson Nascimento

ninguém se habilita? hein? hein?

:)


Responder

Gostei + 0

02/09/2005

Emerson Nascimento

Problema resolvido!


Responder

Gostei + 0

02/09/2005

Eselvati

bom, em um relacionamento master-detail com dbexpress usando nesteddataset, o campo de ligacao da tabela pai é automaticamente inserido na tabela filha, ´como num passe de mágica´, devido a arquitetura datasnap..mas o valor ja deve existir na tabela pai, para q ele o possa inserir...




Ederson Selvati


Responder

Gostei + 0

02/09/2005

Martins

O rapaz, posta aqui como foi q vc resolveu isso sô.

O pessoal quer saber!!!


Responder

Gostei + 0

02/09/2005

Emerson Nascimento

[b:41b37a9f0d]eselvati[/b:41b37a9f0d], o meu problema não era necessariamente com o preenchimento do campo, mas sim com o preenchimento do campo errado!

como no exemplo anterior:

PAI                             FILHO
Cliente:                        ClienteContato:
ID+ (PK)     |------+           ID+ (PK)
Nome: string        +--------<  ID_Cliente: (FK Cliente.ID)
Endereco: string                Nome: string 
etc...                          Telefone: string


como vemos, o relacionamento é entre o campo Cliente.ID e ClienteContato.ID_CLIENTE.

o problema é que quando essa ligação é feita com nested tables, o campo preenchido na tabela filha é o campo ID, ao invés de ID_CLIENTE.

Mas agora o problema está resolvido. Mesmo os campos de ligação tendo nomes diferentes (como é o caso) seu preenchimento é feito corretamente.


Responder

Gostei + 0

28/07/2015

Gustavo Cruz

Mas como foi resolvido?
Responder

Gostei + 0

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

Aceitar