Ir para conteúdo
  • Cadastre-se

dev botao

Componente - Salvar Dados Em Duas Tabelas Ao Mesmo Tempo ?


Ver Solução Respondido por Régys Silveira,
  • Este tópico foi criado há 3968 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Postado

Olá pessoal podem me ajudar ? Utilizando DelphiXE5 + Firebird 2.0 tenho um Clientdataset aberto com o CommandText abaixo:

 

Select
tabela01.codigo,
tabela01.descricao,
tabela01.vrcusto,
tabela02.vrvenda
from tabela01
left join tabela02 on tabela02.codigotab01 = tabela01.codigo
 
Hoje eu consigo alterar/salvar todos os dados da tabela01, porém gostaria de também poder salvar os dados alterados da tabela02 (tabela02.vrvenda), ou seja, gostaria que o clientDataSet salvasse os dados alterados conforme suas tabelas (vrcusto na tabela01 e vrvenda na tabela02). Pelo que sei o ClientDataSet não consegue fazer isso, vcs conhecem algum outro componente que consegue fazer isso? Ou melhor, alguém sabe se o FireDac consegue alterar os campos de ambas as tabelas num único post dado no componente?
Agradeço ajuda de todos. Estou pesquisando isso porque acredito ter ouvido falar que eu conseguiria implementar essa situação usando outro componente que não seja um ClientDataSet.
  • Consultores
Postado

  Com alguma alteração, dá pra fazer algo parecido usando Nested Datasets. Será usado apenas um post.

  Mas do jeito que está poderia tentar usando o evento BeforeUpdateRecord aplicar as atualizações manualmente, conforme a documentação diz: or even apply updates manually from a BeforeUpdateRecord event handler. Neste caso, pelo que eu entendo, você terá que escrever as SQLs manualmente. Mas acho que isso não deve ser algum problema.

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
Postado

Via trigger não dá porque ao abrir a tabela (ClientDataSet.Open) num dbGrid terei ao mesmo tempo os campos VrCusto e VrVenda e o usuário poderá alterar ambos valores ao mesmo tempo. Andei procurando uma solução na net e pelo que andei lendo se eu optar em fazer via banco "se não me engano" o SQL Server é capaz de alterar os valores dos campos linkados em "left join" (acho que o Oracle também), mas como eu disse acima trabalho com o Firebird 2.0.

  • Moderadores
  • Solution
Postado

 

Olá pessoal podem me ajudar ? Utilizando DelphiXE5 + Firebird 2.0 tenho um Clientdataset aberto com o CommandText abaixo:

 

Select
tabela01.codigo,
tabela01.descricao,
tabela01.vrcusto,
tabela02.vrvenda
from tabela01
left join tabela02 on tabela02.codigotab01 = tabela01.codigo
 
Hoje eu consigo alterar/salvar todos os dados da tabela01, porém gostaria de também poder salvar os dados alterados da tabela02 (tabela02.vrvenda), ou seja, gostaria que o clientDataSet salvasse os dados alterados conforme suas tabelas (vrcusto na tabela01 e vrvenda na tabela02). Pelo que sei o ClientDataSet não consegue fazer isso, vcs conhecem algum outro componente que consegue fazer isso? Ou melhor, alguém sabe se o FireDac consegue alterar os campos de ambas as tabelas num único post dado no componente?
Agradeço ajuda de todos. Estou pesquisando isso porque acredito ter ouvido falar que eu conseguiria implementar essa situação usando outro componente que não seja um ClientDataSet.

 

 

Você pode criar uma stored procedure no banco de dados, utilizar o Clientdataset normalmente e manipular o Delta dele ou os eventos de post para inserir os dados.

Ou pode deixar o Clientdataset normalmente, e usar um stored procedure recebendo dados deles para inserção, atualização, etc.

 

O ideal seria passar o contexto, como o Maricelo disse, assim fica mais simples de ajudar.

Equipe ACBr

Régys Borges da Silveira

http://www.regys.com.br

certificacao delphicertificacao delphi
  • Este tópico foi criado há 3968 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.