Inserir e atualizar campos de um Bloco Database = Yes

Dicas do Oracle Forms Builder - Blocos, Itens, LOV, Canvas, Triggers, comandos, PLL, d2kwutil, FMB, Alert, menus, etc
Responder
Marina
Rank: Estagiário Júnior
Rank: Estagiário Júnior
Mensagens: 2
Registrado em: Seg, 14 Dez 2015 4:26 pm

Boa tarde,

Tenho um bloco ligado a uma tabela do banco de dados e que possui a propriedade Database com o valor Yes.
Neste bloco, eu insiro muitos registros automaticamente via código.

Alguns desses registros possuem a mesma chave primaria que um outro registro já inserido anteriormente no banco. Neste caso, gostaria que o registro antigo fosse atualizado com os dados do novo registro. Entretanto, o bloco do meu formulário acredita que todos os registros ali informados se tratam de uma inserção.

Ou seja, no mesmo bloco podem haver registros que deverão ser inseridos e registros que deverão ser atualizados no banco.

Gostaria de saber se tem alguma propriedade que posso ativar para avisar ao que aquele registro deve ser atualizado, e não inserido.

Imagino como fazer isso via um insert ou update manual (via código Insert e Update), mas como se trata de uma tela um pouco complexa, preferiria deixar este controle para o próprio formulário.
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

Não existe uma propriedade que faça isso de forma automática.
O que o FORMS faz: Quando se cria uma nova linha no bloco, ele sabe que deve INSERIR aquela linha. Quando é feito alteração de uma linha que foi feito QUERY, ele sabe que precisa alterar a linha. Portanto, em um COMMIT, ele faz tudo, altera coisas e insere novas linhas.

Acho que até é possível fazer isso em duas etapas: (é uma idéia)
1. Primeiro, você precisa ter em uma tabela temporária as PK's que você vai manipular. (ou todos dados da tabela nesta temporária).
2. Faz uma QUERY no seu bloco de todas as linhas que devem aparecer no bloco, cuja PK já existe no banco. (ou seja, um JOIN com a tabela temporária). Vai trazer pro seu bloco as linhas já existentes no banco, ROWID delas, etc.
3. Depois, segue normalmente com o seu programa, inserindo no bloco apenas as novas linhas. (sem inserir aquelas que já existem).

Não sei se é tão simples assim pra você implementar isso. Sei que que os programas são bem mais complexos e cheio de coisas. Mas é uma idéia que pode dar certo.
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 9 visitantes