Fórum Problemas com NestedDataSets... #290586
03/08/2005
0
Olá!
Pessoal, estou tentando usar NestedDataSets com IBX (Firebird 1.5 - Delphi7) para criar um mestre/detalhe entre dois ClientDataSets. Fiz o seguinte:
1) Inseri o DataSetM (IBDataSet) e defini a seguinte SQL:
2) Inseri o DataSetD (IBDataSet) e defini a seguinte SQL:
3) Adicionei um DataSource (dsMaster) apontando para o DataSetM e liguei a propriedade DataSet do DataSetD para o DataSource dsMaster.
4) Adicionei um DataSetProvider (dspMaster) apontando para o DataSetM.
5) Adicionei o primeiro ClientDataSet (cdsMaster), cuja propriedade ProviderName aponta para o dspMaster. Adicionei depois os campos no Fields Editor para o cdsMaster. Com isso ele gerou um TDataSetField chamado DataSetD.
6) Adicionei o segundo ClientDataSet (cdsDetail), cuja propriedade DataSetField aponta para cdsMasterDataSetD.
Fiz tudo isso em um projeto teste para aprender a usar NestedDataSets. O problema é o seguinte: O campo CODIGONOTA da tabela detalhe não está sendo preenchido. Com isso, depois que eu fecho o programa e abro de novo o vínculo se perde. Esse parece ser o mesmo problema de um tópico antigo que não teve resposta:
[url]http://forum.clubedelphi.net/viewtopic.php?t=29165[/url]
Eu estou disponibilizando o projeto com o banco de dados na internet. O arquivo tem 45k. Se alguém puder me ajudar eu agradeço!
Link para download: [url]http://www.geocities.com/delphirj/NestedDataset.zip[/url]
Só um detalhe. Como é um projeto teste eu não criei nenhum GENERATOR. Então o processo que estou fazendo é o seguinte:
1) Dou um insert pelo DBNavigator;
2) Digito um número para o campo AUTOMATICO (que deveria ser preenchido pelo GENERATOR).
3) Vou para o Grid e dou entrada em um produto para a nota. Note que eu também preencho o campo GERADOR porque também não tem GENERATOR, mas no campo CODIGONOTA eu não preencho nada para tentar ver o momento em que o campo seria preenchido para mantar o vínculo. Bem, depois disso eu dou um post pelo DBNavigator, pressiono o botão ApplyUpdates e o campo continua sem ser prenchido. Se cadastrar uma outra nota ele funciona como se o campo tivesse sido preenchido, ou melhor, não importa se o campo está ou não preenchido, quando você vai passeando pelos registros ele mostra os registros certos para aquele mestre, mas como o campo não está preenchido quando eu fecho o programa e abro de novo não se consegue mais pegar os vínculos.
Ah, esqueci de dizer que já setei como true as opções poCascadeUpdates e poCascadeDeletes do DataSetProvider.
Li no fórum do Firebase que eu poderia setar a propriedade UniDirectional para True. Isso é verdade? Seria melhor ou pior?
Bem, é isso. Se alguém puder me ajudar... Valeu!
Pessoal, estou tentando usar NestedDataSets com IBX (Firebird 1.5 - Delphi7) para criar um mestre/detalhe entre dois ClientDataSets. Fiz o seguinte:
1) Inseri o DataSetM (IBDataSet) e defini a seguinte SQL:
SELECT AUTOMATICO, NOME FROM NOTAM
2) Inseri o DataSetD (IBDataSet) e defini a seguinte SQL:
SELECT GERADOR, CODIGONOTA, NOMEPRODUTO, QUANTIDADE, VALORUNIT FROM NOTAD WHERE CODIGONOTA=:AUTOMATICO
3) Adicionei um DataSource (dsMaster) apontando para o DataSetM e liguei a propriedade DataSet do DataSetD para o DataSource dsMaster.
4) Adicionei um DataSetProvider (dspMaster) apontando para o DataSetM.
5) Adicionei o primeiro ClientDataSet (cdsMaster), cuja propriedade ProviderName aponta para o dspMaster. Adicionei depois os campos no Fields Editor para o cdsMaster. Com isso ele gerou um TDataSetField chamado DataSetD.
6) Adicionei o segundo ClientDataSet (cdsDetail), cuja propriedade DataSetField aponta para cdsMasterDataSetD.
Fiz tudo isso em um projeto teste para aprender a usar NestedDataSets. O problema é o seguinte: O campo CODIGONOTA da tabela detalhe não está sendo preenchido. Com isso, depois que eu fecho o programa e abro de novo o vínculo se perde. Esse parece ser o mesmo problema de um tópico antigo que não teve resposta:
[url]http://forum.clubedelphi.net/viewtopic.php?t=29165[/url]
Eu estou disponibilizando o projeto com o banco de dados na internet. O arquivo tem 45k. Se alguém puder me ajudar eu agradeço!
Link para download: [url]http://www.geocities.com/delphirj/NestedDataset.zip[/url]
Só um detalhe. Como é um projeto teste eu não criei nenhum GENERATOR. Então o processo que estou fazendo é o seguinte:
1) Dou um insert pelo DBNavigator;
2) Digito um número para o campo AUTOMATICO (que deveria ser preenchido pelo GENERATOR).
3) Vou para o Grid e dou entrada em um produto para a nota. Note que eu também preencho o campo GERADOR porque também não tem GENERATOR, mas no campo CODIGONOTA eu não preencho nada para tentar ver o momento em que o campo seria preenchido para mantar o vínculo. Bem, depois disso eu dou um post pelo DBNavigator, pressiono o botão ApplyUpdates e o campo continua sem ser prenchido. Se cadastrar uma outra nota ele funciona como se o campo tivesse sido preenchido, ou melhor, não importa se o campo está ou não preenchido, quando você vai passeando pelos registros ele mostra os registros certos para aquele mestre, mas como o campo não está preenchido quando eu fecho o programa e abro de novo não se consegue mais pegar os vínculos.
Ah, esqueci de dizer que já setei como true as opções poCascadeUpdates e poCascadeDeletes do DataSetProvider.
Li no fórum do Firebase que eu poderia setar a propriedade UniDirectional para True. Isso é verdade? Seria melhor ou pior?
Bem, é isso. Se alguém puder me ajudar... Valeu!
Delphi32
Curtir tópico
+ 0
Responder
Posts
03/08/2005
Kotho
No insert, o campo de ligação não é preenchido automaticamente... Você tem que preencher na mão... pode usar o evento OnNewRecord... ou o AfterInsert para atribuir o(s) valor(es)
Responder
Gostei + 0
03/08/2005
Delphi32
e se no momento de dar entrada nos detalhes eu ainda não tiver o código do mestre?
usando NestedDataSets eu teria sempre que obrigatoriamente ter o código do mestre antes de dar entrada nos detalhes?
t+!
usando NestedDataSets eu teria sempre que obrigatoriamente ter o código do mestre antes de dar entrada nos detalhes?
t+!
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)