Valor total

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.

Caro Herberto,

Isso…

É 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.
[size=9pt]sc_lookup(resultado,“SELECT SUM(valormensal) FROM rendimentosdespesas where registo=’{registo}’”);[/size]

Não aconselho você a fazer isso…

O problema aí é que existe algum registro na sua tabela rendimentosdespesas que tem o valormensal =[size=10pt] null[/size] 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.

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]’”);
}
}

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.

Obrigado, Funcionou…

Herberto,

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

T+