Fórum Problemas com nested table #285429
20/06/2005
0
[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
Curtir tópico
+ 0Posts
21/06/2005
Kotho
Quanto ao seu procedimento, me parece que está tudo correto...
Gostei + 0
21/06/2005
Emerson Nascimento
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.
Gostei + 0
21/06/2005
Kotho
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
Gostei + 0
21/06/2005
Emerson Nascimento
Gostei + 0
23/06/2005
Emerson Nascimento
Gostei + 0
24/06/2005
Emerson Nascimento
:)
Gostei + 0
02/09/2005
Emerson Nascimento
Gostei + 0
02/09/2005
Eselvati
Ederson Selvati
Gostei + 0
02/09/2005
Martins
O pessoal quer saber!!!
Gostei + 0
02/09/2005
Emerson Nascimento
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.
Gostei + 0
28/07/2015
Gustavo Cruz
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)