DELPHI - Dataset
Bom dia!
Estou fazendo um relacionamnto Mestre/Detalhe no Delphi utilizando TClientDataSet, TDataSetProvider, TClientDataSet e TDataSource. Está funcionando corretamente. Tenho as seguintes tabelas Pessoa (Mestre) e Endereço (Detalhe). O que ocorre é que ao tentar inserir um registro totalmente novo, caso eu não preencha completamente os dados obrigatórios da Pessoa e tente já inserir um novo endereço a aplicação apresenta um erro solicitando que preencha os campos obrigatórios da Pessoa antes do mesmo de eu tentar persistir esses dados no ClientDataSet para depois aplicá-los ao banco. Pela pilha de execução observei que antes do Insert do dataset Detalhe ele obriga o Post do DataSet Mestre. Eu não queria este comportamento. Gostaria que o post fosse realizado apenas com o clique do botão Salvar da minha tela de cadastro. Existe alguma configuração ou recurso para desabilitar este comportamento do componente?
Obrigado !
Estou fazendo um relacionamnto Mestre/Detalhe no Delphi utilizando TClientDataSet, TDataSetProvider, TClientDataSet e TDataSource. Está funcionando corretamente. Tenho as seguintes tabelas Pessoa (Mestre) e Endereço (Detalhe). O que ocorre é que ao tentar inserir um registro totalmente novo, caso eu não preencha completamente os dados obrigatórios da Pessoa e tente já inserir um novo endereço a aplicação apresenta um erro solicitando que preencha os campos obrigatórios da Pessoa antes do mesmo de eu tentar persistir esses dados no ClientDataSet para depois aplicá-los ao banco. Pela pilha de execução observei que antes do Insert do dataset Detalhe ele obriga o Post do DataSet Mestre. Eu não queria este comportamento. Gostaria que o post fosse realizado apenas com o clique do botão Salvar da minha tela de cadastro. Existe alguma configuração ou recurso para desabilitar este comportamento do componente?
Obrigado !
Ricardo Alves
Curtidas 0
Melhor post
Danilo Oliveira
02/02/2021
Olá Ricardo
Não sei se entendi bem, mas se me permite uma sugestão, poderia usar em cache, ou seja só gravado em memoria. Assim comitando no banco só momento que deseja.
Fonte útil de estudo:
https://www.delphipower.xyz/guide_3/using_a_client_dataset_to_cache_updates.html
Não sei se entendi bem, mas se me permite uma sugestão, poderia usar em cache, ou seja só gravado em memoria. Assim comitando no banco só momento que deseja.
Fonte útil de estudo:
https://www.delphipower.xyz/guide_3/using_a_client_dataset_to_cache_updates.html
GOSTEI 1
Mais Respostas
Ricardo Alves
01/02/2021
Olá Ricardo
Não sei se entendi bem, mas se me permite uma sugestão, poderia usar em cache, ou seja só gravado em memoria. Assim comitando no banco só momento que deseja.
Fonte útil de estudo:
https://www.delphipower.xyz/guide_3/using_a_client_dataset_to_cache_updates.html
Não sei se entendi bem, mas se me permite uma sugestão, poderia usar em cache, ou seja só gravado em memoria. Assim comitando no banco só momento que deseja.
Fonte útil de estudo:
https://www.delphipower.xyz/guide_3/using_a_client_dataset_to_cache_updates.html
Obrigado, amigo ! O que acontece é que num mesmo form eu tinha dbedits ligados a tabela Mestre e a tabela Detalhe. Ao incluir um novo registro, se o usuário deixasse de informar algum dbedit ligado a um campo obrigatório da tabela mestre e tentasse preencher algum dbedit ligado a tabela detalhe uma mensagem de erro era levantada exigindo preenchimento dessa informação, apesar de eu não estar utilizando o post nem applyuppdates ainda. Percebi debugando que esse é o comportamento do Delphi mesmo, o dataset detalhe obriga um post no dataset mestre, gerando o "erro". Acabei resolvendo passando um default expression nos campos obrigatórios do mestre e validando os mesmos depois no meu applyupdates.
GOSTEI 0