Array
(
)

mestre/detale e detalhe do detalhe

Sergiowilson.sp
   - 02 dez 2005

Estou precisando urgentemente fazer um relação mestre com um detalhe e um detalhe do detalhe (Bancos -> Agencias -> Contas Correntes)
Usando dbexpress + firebird e nested Datasets

Alguém sabe como fazer e possa me ajudar

Agradeço antecipadamente :?:


Bruno Belchior
   - 02 dez 2005

Não consegui fazer isso via Nested Table, então fiz via SQL e parâmetro mesmo, fazendo uma juncão com a TabelaMestre e a Detalhe-Mestre...


Emerson
   - 02 dez 2005

vamos ver se vai dar pra entender...

você faz com o detalhe do detalhe, da mesma forma que fez do mestre para o detalhe.

assim:

[dataset_mestre]
commandtext = select * from tabelaprincipal

[datasource_mestre]
dataset = dataset_mestre

[dataset_detalhe]
command = select * from tabela_detalhe where campo_detalhe = :campo_mestre
datasource = datasource_mestre

[datasource_detalhe] <- só é necessário porque teremos outro ´nível´
dataset = dataset_detalhe

[dataset_detalhe_do_detalhe]
command = select * from tabela_detalhe_do_detalhe where campo_detalhe_do_detalhe = :campo_detalhe
datasource = datasource_detalhe


Emerson
   - 02 dez 2005

sendo um pouco mais específico:

imaginando a seguinte estrutura:
[bancos]
id_banco
banco
nome

[agencia]
id_Agencia
id_banco
agencia
endereco

[conta]
id_conta
id_agencia
numerodaconta

poderíamos ter:
[dataset_bancos]
commandtext = select * from bancos

[datasource_bancos]
dataset = dataset_bancos

[dataset_agencias]
command = select * from agencias where (1)id_banco = (2):id_banco
datasource = datasource_bancos

[datasource_agencia] <- só é necessário porque teremos outro ´nível´
dataset = dataset_agencias

[dataset_contas]
command = select * from contas where (3)id_agencia = (4):id_agencia
datasource = datasource_agencias

(1) o campo de ligação entre a tabela agencias e a tabela bancos
(2) esse parâmetro deve ter o mesmo nome do campo de ligação na tabela bancos
(3) o campo de ligação entre a tabela contas e a tabela agências
(4) esse parâmetro deve ter o mesmo nome do campo de ligação na tabela agencias

note que nas condições de relacionamento pode haver mais de um campo. por exemplo:
[bancos]
banco
nome

[agencia]
agencia
banco
endereco

[conta]
conta
agencia
banco
numerodaconta

[dataset_bancos]
commandtext = select * from bancos

[datasource_bancos]
dataset = dataset_bancos

[dataset_agencias]
command = select * from agencias where banco = :banco
datasource = datasource_bancos

[datasource_agencia] <- só é necessário porque teremos outro ´nível´
dataset = dataset_agencias

[dataset_contas]
command = select * from contas where banco = :banco and agencia = :agencia
datasource = datasource_agencias