SC não disponibiliza conteúdo de campos do form no evento onBeforeDelete?

Tenho um form muito simples, para ajuste manual de estoque.
Um dos campos deste form chama-se {quantidade};
Na inclusão do registro (onAfterInsert), tenho o seguinte código:
$sql = “UPDATE produtos SET qtde_estoque = qtde_estoque + {quantidade} WHERE id = {produto}”;
sc_exec_sql($sql);
Funciona 100%, incrementando o estoque na tabela produtos.

Na exclusão do registro (razão do problema) eu preciso desfazer o update feito pela inclusão, mais ou menos assim:

$sql = "UPDATE produtos SET qtde_estoque = qtde_estoque - {quantidade} WHERE id = {produto}";
sc_exec_sql($sql);

OU

$sql = "UPDATE produtos SET qtde_estoque = qtde_estoque - " . {quantidade} . " WHERE id = {produto}";
sc_exec_sql($sql);

O que acontece é que o código enxerga o campo {produto}, mas não enxerga o campo {quantidade}, conforme o debug abaixo:

(mysqlt): UPDATE produtos SET qtde_estoque = qtde_estoque - WHERE id = 1
1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘WHERE id = 1’ at line 1
ADOConnection._Execute(UPDATE produtos SET qtde_estoque = qtde_estoque - WHERE id = 1 , false) % line 1085, file: adodb.inc.php

Alguém pode me ajudar?

qual evento?

onBeforeDelete

eu faria na onAfterDelete, mesmo assim deveria trazer o valor.

Tente em modo debug colocar o echo na {quantidade}.

Tente colocar $_qtd={Quantidade} e usar a variável local na instrução.

Eu tenho esse problema também, no meu caso no onBeforeUpdate, alguns campos ele não pega. O meu campo texto com várias linhas ele pega, agora algum campo número ou select ele não pega, já no After, ele faz.

Haroldo, dá no mesmo:

Usei o evento onAfterDelete e coloquei o seguinte código:
$qt = {quantidade};
echo $qt;
$sql = “UPDATE produtos SET qtde_estoque = qtde_estoque - $qt WHERE id = {produto}”;
sc_exec_sql($sql);

O echo não dá nem tempo de ver.

Segue o debug, com o mesmo erro:
(mysqlt): SET AUTOCOMMIT=0
(mysqlt): BEGIN
(mysqlt): select count(*) from prod_hist_qtde where id = 11
(mysqlt): DELETE FROM prod_hist_qtde where id = 11
b: UPDATE produtos SET qtde_estoque = qtde_estoque - WHERE id = 1 [/b] O $qt, que teria aqui um valor 10 por exemplo, não aparece.
1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘WHERE id = 1’ at line 1
ADOConnection._Execute(UPDATE produtos SET qtde_estoque = qtde_estoque - WHERE id = 1 , false) % line 1085, file: adodb.inc.php
ADOConnection.Execute(UPDATE produtos SET qtde_estoque = qtde_estoque - WHERE id = 1 ) % line 3603, file: gestao_cadastro_prod_hist_qtde_apl.php
gestao_cadastro_prod_hist_qtde_apl.nm_acessa_banco() % line 1099, file: gestao_cadastro_prod_hist_qtde_apl.php
gestao_cadastro_prod_hist_qtde_apl.controle() % line 1612, file: gestao_cadastro_prod_hist_qtde.php

Atenção
Erro ao acessar o banco de dados
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘WHERE id = 1’ at line 1

View SQL
(mysqlt): ROLLBACK
(mysqlt): SET AUTOCOMMIT=1

Tanto é que eu tinha antes usado um if ({campo} == “X”) pra executar o update, e ele nunca executava, porque o {campo} simplesmente não existia ou não tinha conteúdo algum.
Fiz isso centenas de vezes em outros sistemas, só agora tá dando esse erro primário.

Robert, aqui nem no after tá pegando…
Ô tristeza!

Olha um trechinho do código gerado aqui:

3590| if (isset($this->NM_ajax_flag) && $this->NM_ajax_flag)
3591| {
3592| $original_produto = $this->produto;
3593| $original_quantidade = $this->quantidade;
3594| }
3595| $qt = $this->quantidade ;
3596| echo $qt;
3597| $sql = "UPDATE produtos SET qtde_estoque = qtde_estoque - $qt WHERE id = $this->produto ";
3598|
3599| $nm_select = $sql;
3600| $_SESSION[‘scriptcase’][‘sc_sql_ult_comando’] = $nm_select;
3601| $_SESSION[‘scriptcase’][‘sc_sql_ult_conexao’] = ‘’;
3602| $rf = $this->Db->Execute($nm_select);

$this->produto ele enxerga, mas $this->quantidade não! Pelo menos isso é o que diz o debug:
i: UPDATE produtos SET qtde_estoque = qtde_estoque - WHERE id = 1
1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘WHERE id = 1’ at line 1[/i]

Meus queridos, creio que os senhores concordam comigo, é um bug novinho, saído do forno.

Detalhe, se no campo campo quantidade, se eu usar a opção de gravar variável, e usar essa variável na query, ela funciona normal.
Imagina ter que ficar guardando um monte de campo em global???

Pra mim é um erro grave, que antigamente não existia.

Eu ia te falar isso rrma ai chegou um pessoal aqui na sala, eu lembrei eu tive esse problema e tive que ficar guardando em global, ficar resetando global, me deu maior dor de cabeça isso, agora está funcionando mas é horrivel ter que ficar toda hora guardando em global.

Pois é, já notifiquei o email de bugs e o Yuri, vamos aguardar.

Boa noite pessoal, alguém sabe dizer se já foi solucionado esse bug, estou usando a versão 9.2.016, e não estou conseguindo capturar dado do campo para utilizar ele como condição na consulta SQL.

Oi Cleiton. Em qual evento deseja capturar os campos e o que quis dizer como condição na consulta SQL?

Bom dia Haroldo, eu consegui resolver o que precisava usando o gatilhos no banco de dados.
Mas eu estava usando o SC_SELECT para fazer uma consulta usando como condição na cláusula Where um campo de tela para pegar o código de referência de um produto, mas ele não estava carregando o código.