Re: [firebase-br] Dúvidas ClientDataSet
Francisco Thiago Almeida
jeandeadlucky em yahoo.com.br
Seg Set 27 08:47:46 -03 2004
Bom dia!
Seguinte:
Você conhece a idéia do "Nested Table?" se não conhece (ou conhece), é possível aplicar usando CDS. Veja como:
Suponhamos que temos dois DataSet's, DataSetM e DataSetD... e dois CDS, CDSM e CDSD e UM provider.... DSPMD (nomes estranhos né?)..
No DataSetM você vai escrever o seu SQL normalmente afim de trazer os registro que voce deseja, apenas nao esqueca de trazer a chave desta tabela.
Agora no DataSetD voce vai escrever um sql do tipo...
Select *
from Detalhe
where chave_FK = Nome_da_Chave_na_tabela_master
Feito isso, vc vai adicionar um DataSource (dtsMD) e confgurar a propriedade dataset dele para apontar para o DataSetM... e no DataSetD a propriedade DataSource vai apontar para o dtsMD. Pronto! o relacionamento Mestre Detalhe foi feito com os componetes.
Lembra do Provider? Voce vai aponta-lo para o DataSetM e o CDSM vai apontar para o Provider...
Feito isso, adicione todos os campos no CDSM. Você vai perceber um outro campo no CDSM que nao faz parte da sua tabela, provavelmente um DataSetD (esse será o nome do campo).
Agora no CDSD voce vai apontar a propriedade DataSetField para o CAMPO DataSetD do ClienteDataSet CDSM e pronto! está configurado. Se você der um ApplyUpdates em qualquer um dos CDS's você estára trabalhando com uma só transação.
Não deve ter ficado muito claro, pq estou com um pouco de pressa.. mas qualquer dúvida, pode me procurar..
Boa sorte
Thiago
Joubert Rinaldi <rinaldi.vieira em gmail.com> wrote:
Francisco,
Também estou começando com CDS e a sua resposta deixou duvidas.
> Não é necessário Iniciar transacoes com o CDS. O PROVIDER faz isso por vc.. até mesmo em casos de Mestre - Detalhe.. se configurado corretamente
> Nenhum.. Só um conselho.. faca a relacao Mestre Detalhe no IBDataSet...
Esplica melhor esse Mestre-Detalhe configurado corretamente e
Mestre-Detalhe com IBDataSet.
[]'s
On Fri, 24 Sep 2004 12:12:40 -0300 (ART), Francisco Thiago Almeida
wrote:
> Realmente é difícil de se encontrar documentacao boa sobreo CDS... mas vou responder algumas questoes suas:
>
> 1) Usando o DataSetProvider eu configuro algumas opções para true:
> poCascadeDelete, poCascadeUpdates, poAllowMultipleRecordUpdates e
> poPropogateChanges
>
> Eu particularmente não configuro nenhuma delas....
>
> 2) Algumas vezes recebo um erro CLientDataset(Nome do componente):
> Record not found. Isso acontece em uma relação master detail quando eu
> vou editar um registro mestre e surge essa mensagem e ele fecha e abre a
> tabela (porém atualiza os dados)
>
> Não sei como você está fazendo as atualizações mas.. recentemente postei uma mensagem aqui na lista com um passo-a-passo de Mestre - detalhe com CDS... seria util pra vc...
>
> 3) eu inicio as transações explicitamente, até porque todo o controle de
> navegação, inserção, etc eu faço com botões personalizados. Muda alguma
> coisa se eu usar o TbNavigator em relação às transações? Em alguns posts
> eu li que com o ClientDataSet a transação é iniciada automaticamente
> pelo ClientDataset.
>
> Não é necessário Iniciar transacoes com o CDS. O PROVIDER faz isso por vc.. até mesmo em casos de Mestre - Detalhe.. se configurado corretamente
>
> 4) Algumas vezes quando abro um formulário com a relação Master-detail
> recebo uma mensagem de Key violation (EDBClient). Não consegui
> identificar o porque!
>
> Nao sei pq o erro.. mas possivelmente vc tem um valor duplicado e um indice (no CDS) com unique selecionado.... ou pode ser nada disso.. soh olhando o codigo pra saber
>
> 5) Algumas tabelas eu uso a ordenação dos dados em um DbGrid com indice
> alterável quando clico no título do Grid. No WinXp funciona 100%, já no
> WinMe ou inferiores não funciona. Tem alguma incompatibilidade de SO?
>
> Voce modifica o indice do cds certo? Okay. O WinXP e 2000 tem um gerenciamento de memoria melhor que o 9x.. logo, alguma violacao de memoria esta acontecendo nesta troca... Verifique no codigo da troca se algo nao estah errado.. faca isso em um 9x se possivel
>
> 6) Existe mais algum cuidado especial que preciso ter (além das relações
> corretas) quando uso master-detail e clientdataset + DataSetProvider +
> IbDataset + Transaction?
>
> Nenhum.. Só um conselho.. faca a relacao Mestre Detalhe no IBDataSet...
>
> Nao sei se existe esta propriedade no IBDataSet, mas se existir Unidirectional... Coloque True nela.
>
> []'s e boa sorte!
>
> Thiago
>
>
>
> "Ricardo H. Rekowsky" wrote:
> Pessoal,
>
> passei os últimos dias pesquisando no fórum do ClubeDelphi, vários sites
> que tenho cadastrados sobre Delphi aqui no Brasil e fora e pelo Google
> sobre como usar o CLientDataSet direito e vi diversas sugestões
> contraditórias. Como acabei me confundindo mais do que esclarecendo
> gostaria, se possível, contar com a ajuda de vocês para entender melhor
> como funciona esse componente (principalmente com o uso de master-
> detail) com algumas perguntas:
>
> 1) Usando o DataSetProvider eu configuro algumas opções para true:
> poCascadeDelete, poCascadeUpdates, poAllowMultipleRecordUpdates e
> poPropogateChanges
> --> preciso realmente configurar essas opções? por que percebi que sem
> elas algumas vezes os dados não são atualizados.
> 2) Algumas vezes recebo um erro CLientDataset(Nome do componente):
> Record not found. Isso acontece em uma relação master detail quando eu
> vou editar um registro mestre e surge essa mensagem e ele fecha e abre a
> tabela (porém atualiza os dados)
> 3) eu inicio as transações explicitamente, até porque todo o controle de
> navegação, inserção, etc eu faço com botões personalizados. Muda alguma
> coisa se eu usar o TbNavigator em relação às transações? Em alguns posts
> eu li que com o ClientDataSet a transação é iniciada automaticamente
> pelo ClientDataset.
> 4) Algumas vezes quando abro um formulário com a relação Master-detail
> recebo uma mensagem de Key violation (EDBClient). Não consegui
> identificar o porque!
> 5) Algumas tabelas eu uso a ordenação dos dados em um DbGrid com indice
> alterável quando clico no título do Grid. No WinXp funciona 100%, já no
> WinMe ou inferiores não funciona. Tem alguma incompatibilidade de SO?
> 6) Existe mais algum cuidado especial que preciso ter (além das relações
> corretas) quando uso master-detail e clientdataset + DataSetProvider +
> IbDataset + Transaction?
>
> Grato por eventuais esclarecimentos e desculpem o bombardeio de
> perguntas.... Mas minhas pesquisas não me levaram mais adiante do que
> isto.
> Ricardo
> ______________________________________________
> FireBase-BR (www.firebase.com.br)
> Para editar sua configuração na lista, use o endereço http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
>
>
> -----------------------------------------------
> Francisco Thiago de Almeida
> MRL Consultoria em Informática
> Divisão Desenvolvimento e Banco de Dados
> Franca/SP
>
> ---------------------------------
> Yahoo! Messenger 6.0 - jogos, emoticons sonoros e muita diversão. Instale agora!
>
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br)
> Para editar sua configuração na lista, use o endereço http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
>
--
MSN: jcombr em hotmail.com
______________________________________________
FireBase-BR (www.firebase.com.br)
Para editar sua configuração na lista, use o endereço http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
-----------------------------------------------
Francisco Thiago de Almeida
MRL Consultoria em Informática
Divisão Desenvolvimento e Banco de Dados
Franca/SP
---------------------------------
Yahoo! Messenger 6.0 - jogos, emoticons sonoros e muita diversão. Instale agora!
Mais detalhes sobre a lista de discussão lista