Master detail. Como fazer?
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
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
Curtidas 0
Respostas
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.
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
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!
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
29/04/2004
Eu utilizo access e me conecto atraves da paleta ADO.
Se puderem me explicar como proceder com este banco...
Obrigada.
Se puderem me explicar como proceder com este banco...
Obrigada.
GOSTEI 0
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:
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.
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
29/04/2004
Obrigada por me ensinarem como trabalhar com mestre detalhe, valeu mesmo.
Bjos
Bjos
GOSTEI 0
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
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