Master detail. Como fazer?

Delphi

29/04/2004

Alguem poderia me explicar como fazer um master detail?
Estou pesquisando na internet mais a maioria das coisas que acho são em ingles, e as que são em portugues nao sao explicações e sim códigos.
Obrigada
Flávia


Flavia_mococa

Flavia_mococa

Curtidas 0

Respostas

Flaviosan

Flaviosan

29/04/2004

Olá Flavia, aqui é o Flavio. (que sem graça)
Depende do banco de dados que voce usa e o acesso aos dados utilizado(componentes) no sistema, se oce passar essas informacoes, ficara mais facil te ajudar.
Aguardo sua resposta.


GOSTEI 0
Rafael.valler

Rafael.valler

29/04/2004

[img:57432daa67]http://forum.clubedelphi.net/images/smiles/icon_cool.gif[/img:57432daa67] Exemplo:
master-detail com dbexpress e firebird

Possuindo as tabelas TABELA_MESTRE e TABELA_DETALHE em seu banco de dados e um componente SQLConnection devidamente configurado, adicione ao seu DataModule os componentes seguintes e dê nome a eles (os nomes deste exemplo seguem entre parênteses à frente do nome do componente):

- Dois SQLDataSet (dst_Mestre e dst_Detalhe)

- Um DataSetProvider (dsp_Mestre)

- Dois ClientDataSet (cds_Mestre e cds_Detalhe)

- Três DataSource (dts_LinkMestre, dts_Mestre e dts_Detalhe)

2) Escreva a SQL de dst_Mestre na sua propriedade CommandText:

SELECT <colunas_da_tabela_mestre>

FROM TABELA_MESTRE

WHERE <coluna_chave_do_relacionamento_na_tabela_mestre> = :parametro

3) Configure na propriedade Params ´parametro´ conforme seu tipo, neste
caso, DataType = ftInteger.

4) Mude a propriedade DataSet de dts_LinkMestre para dst_Mestre

5) Escreva a SQL de dst_Detalhe na sua propriedade CommandText:

SELECT <colunas_da_tabela_detalhe)
FROM TABELA_DETALHE
WHERE <coluna_chave_do_relacionamento_na_tabela_detalhe> =
:<coluna_chave_do_relacionamento_na_tabela_mestre>

NOTA IMPORTANTE:

O nome do parâmetro na tabela detalhe tem que obrigatoriamente ser igual ao nome da coluna a que corresponde na tabela mestre.

6) Mude a propriedade DataSource de dst_Detalhe para dts_LinkMestre

7) Mude a propriedade DataSet de dsp_Mestre dst_Mestre

8) Mude a propriedade ProviderName de cds_Mestre para dsp_Mestre

9) Adicione os TFields do cds_Mestre e note a presença de um campo novo (campo anhinhado) que é quem será o responsável pelo relacionamento com a tabela detalhe.

10) Mude a propriedade DataSetField do cds_Detalhe, colocando nela o nome do campo anhinhado mencionado no item anterior.

11) Mude a propriedade DataSet de dts_Mestre para cds_Mestre

12) Mude a propriedade DataSet de dts_Detalhe para cds_Detalhe

13) Adicione os TFields do cds_Detalhe

Agora é só fornecer o valor de ´parametro´ (item 2) e abrir o cds_Mestre que o resto será feito automaticamente!



GOSTEI 0
Flavia_mococa

Flavia_mococa

29/04/2004

Eu utilizo access e me conecto atraves da paleta ADO.
Se puderem me explicar como proceder com este banco...
Obrigada.


GOSTEI 0
Flaviosan

Flaviosan

29/04/2004

Aqui é o Flavio.
Vou tentar te ajudar.
As tabelas de exemplo são clientes (codcli, nomecli) e dependentes (coddep, nomedep, codcli),voce tem que ter uma adoquery que será o mestre, ligada a tabela clientes que deve estar ligada a um datasource e uma adoquery ligada a tabela dependentes, que será o detalhe. A sql da adoquery dependentes deve ser assim:
SELECT CODDEP, NOMEDEP
FROM DEPENDENTES
WHERE (CODCLI = :CODCLI)

Onde :CODCLI indica que voce vai estar usando parametro(o nome parametro deve ser igual ao nome da chave primaria da tabela de clientes, CODCLI).
Na propriedade DataSource adoquery dependentes indique o datasource da adoquery clientes.
Só isso deve resolver. Se tiver mais alguma duvida, é só perguntar.


GOSTEI 0
Flavia_mococa

Flavia_mococa

29/04/2004

Obrigada por me ensinarem como trabalhar com mestre detalhe, valeu mesmo.
Bjos


GOSTEI 0
Cristianojedi

Cristianojedi

29/04/2004

Caro rafael.valler!!!
Fiz o seu exemplo citado acima e me deparei com o seguinte erro:
´DBX Error: No Mapping for ErrorCode Found´.

O que pode ser esse erro???
Ele ocorre quando eu dou o ApplyUpdates.

Estou usando Interbase, Delphi 7.

Obrigado!!!

Cristiano Mário


GOSTEI 0
POSTAR