21949 - Execsql ou cursor não está funcionando em tela SGI
Problema:
Solução:
Descrição do Problema:
Temos uma tela SGI que é feito um ExecSql, o depurador passa pelo comando e não é gravado o valor do campo.
Tem casos que já vimos ocorrer que é passado valores para os campos de um cursor, o cursor é lido e não retorna informações.
O que pode influenciar nessa situação?
Rotina / Tela: Regras customizadas em tela SGI com comandos select, insert, update, delete
Solução:
Solução:
A situação foi depurada e foi constatado que o comando update não era gravado a informação porque o campo que era passado como parâmetro na clausula
where estava em branco.
Isso estava ocorrendo porque na interface da tela SGI foi definido o nome de um campo e na regra do SGI estava sendo utilizado esse mesmo nome de variável
dentro do comando.
Para não ocorrer a situação, deve-se definir outro nome de variável que não seja o nome do campo da interface para utilizar no comando.
Exemplo:
Tenho na tela SGI na interface o nome do campo VANumTit
A variável VANumTit está vazia no comando UPDATE pelo fato de existir um campo criado na interface da tela SGI com o mesmo nome da variável, sendo assim, existe uma sobreescrita de conteúdo no momento da execução da regra.
É necessário alterar a definição da variável na regra ou alterar o campo criado na interface ou ainda atribuir o valor da variável para uma variável auxiliar e essa variável auxiliar utilizar dentro do comando conforme pode ser visto
em anexo no print mostrando como é o correto e como não funciona.
No help das telas SGI no link na segunda nota em caixa verde está mencionando:
Ao definir uma variável dentro de uma regra, deve-se tomar o cuidado de não declará-la com o mesmo nome de nenhum campo da Interface, porque ao criar um campo na Interface, este campo se torna uma variável de sistema.
https://documentacao.senior.com.br/tecnologia/6.2.33/index.htm#geradores/telas/edtregsgi.htm?Highlight=SGI
Obs: A mesma situação vale para cursores e não somente Execsql