Autor Tópico: Valor total  (Lida 1245 vezes)

Herberto Silva

  • Avançado
  • ****
  • Mensagens: 335
  • Programador Freelancer
    • Desenvolvimento de Software
    • Email
Valor total
« Online: Abril 09, 2012, 01:36:14 pm »
Tenho uma tabela que possui valores num campo chamado valor mensal do tipo decimal
atribui este codigo no evento onvalidate sucess
$xregisto={registo};
sc_lookup(resultado,"SELECT SUM(valormensal) FROM rendimentosdespesas where registo=$xregisto");
$xvalor = sc_format_num({resultado}[0][0], 2,',', '.');
sc_exec_sql("UPDATE processofamiliar SET saldo=$xvalor where numero=$xregisto");

só que o valor da variavel aparece-me sempre vazia
originando o erro
Erro ao aceder a base 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 numero=1' at line 1
e quando verifico a sintax:
UPDATE processofamiliar SET saldo= where numero=1

Close

Alguem pode me explicar porque isto acontece, ou eventualmente dar uma sugestão.

Cumprimentos,
Herberto Silva
herberto.silva@sapo.pt
skype: herbertobfsilva
www.software-global.info

jovitomelo

  • Global Moderator
  • Expert
  • *****
  • Mensagens: 916
    • Simples Assim
    • Email
Re:Valor total
« Responder #1 Online: Abril 09, 2012, 02:54:53 pm »
Caro Herberto,

Isso...
sc_lookup(resultado,"SELECT SUM(valormensal) FROM rendimentosdespesas where registo=$xregisto");

É igual a isso... e evita a criação de uma variável, podendo ser cometidos erros nesta criação, erros esses que podem vir da aplicação como um todo.
sc_lookup(resultado,"SELECT SUM(valormensal) FROM rendimentosdespesas where registo='{registo}'");

Não aconselho você a fazer isso...
sc_lookup(resultado,"SELECT SUM(valormensal) FROM rendimentosdespesas where registo=$xregisto");
$xvalor = sc_format_num({resultado}[0][0], 2,',', '.');

O problema aí é que existe algum registro na sua tabela rendimentosdespesas que tem o valormensal = null e qualquer operação com valores nulos (seja com operadores numéricos, lógicos ou concatenações) o resultado é sempre NULL.

Você deve testar o resultado do SELECT, com isso evitaria esse tipo de erro... por exemplo:

$nao_salva_xvalor_igual_a_zero = 'S';
sc_lookup(resultado,"SELECT SUM(valormensal) FROM rendimentosdespesas where registo='{registo}'");
if(!empty({resultado}))
{
    $xvalor = sc_format_num({resultado}[0][0], 2,',', '.');
    sc_exec_sql("UPDATE processofamiliar SET saldo=$xvalor where numero='{registo}'");
}
else
{
   if($nao_salva_xvalor_igual_a_zero == 'S')
    {
        sc_error_message({registro} . " Inexistente!");
        sc_error_exit();
    }
    else
    {
        sc_exec_sql("UPDATE processofamiliar SET saldo=0 where numero='{registo}'");
    }
}


Enfim, dê uma verificada.

Forte abraço.
Jovito Melo
Maceió - Alagoas

Herberto Silva

  • Avançado
  • ****
  • Mensagens: 335
  • Programador Freelancer
    • Desenvolvimento de Software
    • Email
Re:Valor total
« Responder #2 Online: Abril 09, 2012, 03:58:28 pm »
Boas..
Tenho valores em todos os registos valormensal na tabela rendimentosdespesas. na estrutura da tabela tenho valoremensal do tipo decimal(8,2)    
ALTEREI o CODIGO com PARA A VARIAVEL GLOBAL e continuo a  obter um valor nulo em $valor
coloquei uma mensagem para ver o que obtenho depois da soma e obtenho sempre o mesmo erro.
ERROR   
Array Valores
Erro ao aceder a base 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 numero='1'' at line 1

View SQL:
UPDATE processofamiliar SET saldo= where numero='1'

Close

o Codigo alterado é o seguinte:

$nao_salva_xvalor_igual_a_zero = 'S';
sc_lookup(resultado,"SELECT SUM(valormensal) FROM rendimentosdespesas where registo='[xnumero5]'");
sc_error_message({resultado} . " Valores");
if(!empty({resultado}))
{
   
    $xvalor = sc_format_num({resultado}[0][0], 2,',', '.');
    sc_exec_sql("UPDATE processofamiliar SET saldo=$xvalor where numero='[xnumero5]'");
}
else
{
   if($nao_salva_xvalor_igual_a_zero == 'S')
    {
        sc_error_message({registo} . " Inexistente!");
        sc_error_exit();
    }
    else
    {
        sc_exec_sql("UPDATE processofamiliar SET saldo=0 where numero='[xnumero5]'");
    }
}
Cumprimentos,
Herberto Silva
herberto.silva@sapo.pt
skype: herbertobfsilva
www.software-global.info

jovitomelo

  • Global Moderator
  • Expert
  • *****
  • Mensagens: 916
    • Simples Assim
    • Email
Re:Valor total
« Responder #3 Online: Abril 09, 2012, 04:15:00 pm »
Herberto,

Observando mais atentamente o seu problema, concluí que vc não pode obter $xvalor como retorno de sc_format_num({resultado}[0][0], 2,',', '.');

Ou seja $xvalor = sc_format_num({resultado}[0][0], 2,',', '.') => Está retornando o valor NULL;

Eu acredito que a macro sc_format_num({resultado}[0][0], 2,',', '.') colocará o seu campo com essa formatação no FORM, ela não retorna valor algum (ou seja NULL).

Além do mais isso está totalmente inócuo, uma vez que vc está fazendo o UPDATE na tabela, ou seja o valor armazenado na tabela será com o formato exigido pelo DB e não a formatação que vc deseja.

Assim sendo,

Substitua => $xvalor = sc_format_num({resultado}[0][0], 2,',', '.');
Por => $xvalor = {resultado}[0][0];

E o problema será sanado.

« Última modificação: Abril 09, 2012, 05:05:50 pm por jovitomelo »
Jovito Melo
Maceió - Alagoas

Herberto Silva

  • Avançado
  • ****
  • Mensagens: 335
  • Programador Freelancer
    • Desenvolvimento de Software
    • Email
****** RSOLVIDO ********
« Responder #4 Online: Abril 09, 2012, 04:56:21 pm »
Obrigado, Funcionou...
« Última modificação: Abril 09, 2012, 05:41:51 pm por herberto »
Cumprimentos,
Herberto Silva
herberto.silva@sapo.pt
skype: herbertobfsilva
www.software-global.info

jovitomelo

  • Global Moderator
  • Expert
  • *****
  • Mensagens: 916
    • Simples Assim
    • Email
Re:Valor total
« Responder #5 Online: Abril 09, 2012, 05:03:58 pm »
Herberto,

Por favor, altere [*** RESOLVIDO ***] ao título do post.

T+
Jovito Melo
Maceió - Alagoas