Autor Tópico: SC não disponibiliza conteúdo de campos do form no evento onBeforeDelete?  (Lida 5446 vezes)

rrma

  • Global Moderator
  • Expert
  • *****
  • Mensagens: 816
  • Quem com porcos se mistura tanto bate até que fura
    • Email
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?
Rodrigo Araújo

Haroldo

  • Expert
  • *****
  • Mensagens: 6260
  • Conhecimento diminui limitações.△TFA△
    • Infinitus Web Gestão Empresarial/Gestão ITIL/Consultoria Scriptcase
Re:SC não disponibiliza conteúdo de campos do form no evento onBeforeDelete?
« Responder #1 Online: Agosto 22, 2012, 04:15:09 pm »
qual evento?

rrma

  • Global Moderator
  • Expert
  • *****
  • Mensagens: 816
  • Quem com porcos se mistura tanto bate até que fura
    • Email
Re:SC não disponibiliza conteúdo de campos do form no evento onBeforeDelete?
« Responder #2 Online: Agosto 22, 2012, 04:16:27 pm »
onBeforeDelete
Rodrigo Araújo

Haroldo

  • Expert
  • *****
  • Mensagens: 6260
  • Conhecimento diminui limitações.△TFA△
    • Infinitus Web Gestão Empresarial/Gestão ITIL/Consultoria Scriptcase
Re:SC não disponibiliza conteúdo de campos do form no evento onBeforeDelete?
« Responder #3 Online: Agosto 22, 2012, 04:20:06 pm »
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.

Robert Berbert

  • Expert
  • *****
  • Mensagens: 769
  • Desenvolver é sempre estar se atualizando.
    • Conesoft
    • Email
Re:SC não disponibiliza conteúdo de campos do form no evento onBeforeDelete?
« Responder #4 Online: Agosto 22, 2012, 04:28:00 pm »
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.
-- Design ou programador eis a questão.

rrma

  • Global Moderator
  • Expert
  • *****
  • Mensagens: 816
  • Quem com porcos se mistura tanto bate até que fura
    • Email
Re:SC não disponibiliza conteúdo de campos do form no evento onBeforeDelete?
« Responder #5 Online: Agosto 22, 2012, 04:29:08 pm »
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 
(mysqlt): UPDATE produtos SET qtde_estoque = qtde_estoque - WHERE id = 1    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!
Rodrigo Araújo

rrma

  • Global Moderator
  • Expert
  • *****
  • Mensagens: 816
  • Quem com porcos se mistura tanto bate até que fura
    • Email
Re:SC não disponibiliza conteúdo de campos do form no evento onBeforeDelete?
« Responder #6 Online: Agosto 22, 2012, 04:38:37 pm »
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:
(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


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

rrma

  • Global Moderator
  • Expert
  • *****
  • Mensagens: 816
  • Quem com porcos se mistura tanto bate até que fura
    • Email
Re:SC não disponibiliza conteúdo de campos do form no evento onBeforeDelete?
« Responder #7 Online: Agosto 22, 2012, 04:43:00 pm »
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.
Rodrigo Araújo

Robert Berbert

  • Expert
  • *****
  • Mensagens: 769
  • Desenvolver é sempre estar se atualizando.
    • Conesoft
    • Email
Re:SC não disponibiliza conteúdo de campos do form no evento onBeforeDelete?
« Responder #8 Online: Agosto 22, 2012, 05:21:57 pm »
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.
-- Design ou programador eis a questão.

rrma

  • Global Moderator
  • Expert
  • *****
  • Mensagens: 816
  • Quem com porcos se mistura tanto bate até que fura
    • Email
Re:SC não disponibiliza conteúdo de campos do form no evento onBeforeDelete?
« Responder #9 Online: Agosto 22, 2012, 05:23:26 pm »
Pois é, já notifiquei o email de bugs e o Yuri, vamos aguardar.
Rodrigo Araújo