Dificuldade em inserir informações em um subform



  • Boa tarde,
    Ao tentar inserir informações em um formulário com um subform aparece uma mensagem informando que esse registro já está sendo utilizado em outro local. Em decorrência disso, não consigo inserir nenhum tipo de informação atraves do formulário.
    Optei por não utilizar identity nas tabelas pois poderia geraria problemas com o meu modelo de banco, ao inves disso, criei um fluxo que me retornasse o código, mas o fluxo nem é executado antes de aparecer o erro.

    Ao desabilitar o fluxo e informar os campos obrigatórios manualmente, consegui inserir informações, porém o subformulário não armazenou as informações que eu digitei, alguém sabe como faço para resolver isso?


  • - A propriedade "Parâmetro" do subform está configurada?
    - O campo chave do formulário principal e do formulário utilizado como subform, estão marcados?
    - A chave estrangeira está na tabela do form principal ou na tabela do formulário utilizado como subform?


  • Marcus,

    Muito provavelmente os valores da Foreing Keys (FK) estão vindo errados. Certifique-se que as duas tabelas estão relacionadas pelo campo correto, e que a FK entre as tabelas esteja corretamente definidas.

    O subformulário funciona normalmente com campos Identity (SQL server) ou Serial (PostgreSQL), assim como através de SEQUENCE/GENERATORs.

    Att,


  • Muito obrigado a todos pelas respostas, o problema estava na ordem que eu estava tentando inserir os dados, ao inverter a ordem de quem era form com subform, tudo voltou a funcionar normalmente. EU NÃO UTILIZO IDENTITY no campo código, isso deixa o banco com enormes problemas de sequencia, ao invés disso, fiz um fluxo para inserir o codigo.


  • como seria feito então neste cenário

    cliente
    -id pkey
    -endereco_id fkey
    -contato_endereco_id fkey

    endereco
    -id pkey
    -endereco

    considero isso uma tremenda falha do maker pois devia haver uma forma de escolher quem salvar primeiro sem ter que criar um formulário dentro de outro de forma invertida. minha idéia era criar um form de endereço para servir de subform em todos os lugares que eu precisasse de endereço e dessa forma não vou conseguir fazer esta reutilização.

    alguém tem alguma saida?


  • Henri,

    O Subform como o nome diz é sempre o filho/dependente, ainda que sua sugestão seja pertinente (e acho que é, ), o comportamento padrão está correto: Só pode ser gravado o "sub" depois de inserido o principal.

    Nos casos em que a ordem seja invertida você pode usar um fluxo "Antes de Inserir/Alterar/Excluir" para gravar os dados do subformulário, que não necessáriamente precisa ser um sub, pode ser somente os componentes desvinculados do banco e gerar a chave antes de gravar o pai.

    Outra alternativa é usar os recursos do próprio SGDB para criar um VIEW atualizável. Assim as triggers/rules da View cuidarão da ordem de gravação, enquanto o Maker/Webrun trata a view como uma tabela comum.

    Att,


  • seria interessante que tivesse algo para escolher a ordem de gravação dos formulários/subs, isso daria um bom ganho de produtividade + reusabilidade das telas.

    mas de qualquer forma, obrigado pela resposta.

Log in to reply