Incorrect decimal value:

ERRO
Erro ao aceder a base de dados
Incorrect decimal value: ‘’ for column ‘especialidades’ at row 1
UPDATE projectos SET valor_orcamentado = ‘244.00’, despesas = ‘8.61’, honorarios = ‘1845.00’, recursos_humanos = ‘488.00’, total = ‘2341.61’, especialidades = ‘’ WHERE numero = ‘6’

Efetuei a importação das tabelas do mysql para o database builder do SCV9
Na ligação está , virgula como separador decimal
Os campos estão todos como decimal(12,2)
Na apresentação dos formulários ou consultas não dá erro.
Alguns formulários onde tenho cálculo dá o mesmo erro
(ver anexo)

Código no evento onRecord

// Calcular valor orçamentado
sc_lookup(dataset,“select SUM(total_c_iva) FROM projecto_orcamento_linhas where registo=”[xnumero_projecto]"");
{valor_orcamentado} = {dataset[0][0]};
$xvalor_orcamentado = {dataset[0][0]};

// Calcular valor especialidades
sc_lookup(dataset,“select SUM(valor_c_iva) FROM projectos_especialidades_linhas where registo=”[xnumero_projecto]"");
{especialidades} = {dataset[0][0]};
$xvalor_especialidades = {dataset[0][0]};

//total
$wtotal=$wtotal_despesas+$wtotal_honorarios+$wtotal_rh+$xvalor_especialidades;
{total}=$wtotal;
/**

  • Update a record on another table
    */

// SQL statement parameters
$update_table = ‘projectos’; // Table name
$update_where = “numero = ‘[xnumero_projecto]’”; // Where clause
$update_fields = array( // Field list, add as many as needed
“valor_orcamentado = ‘$xvalor_orcamentado’”,
“despesas = ‘$wtotal_despesas’”,
“honorarios = ‘$wtotal_honorarios’”,
“recursos_humanos = ‘$wtotal_rh’”,
“total = ‘$wtotal’”,
“especialidades = ‘$xvalor_especialidades’”,

);

// Update record
$update_sql = ‘UPDATE ’ . $update_table
. ’ SET ’ . implode(’, ', $update_fields)
. ’ WHERE ’ . $update_where;
sc_exec_sql($update_sql);


Screenshot_1369.jpg

Amigo, estranho essa linha:
especialidades = ‘’ WHERE numero = ‘6’

Muda isto:

“especialidades = ‘$xvalor_especialidades’”,

Para:

“especialidades = $xvalor_especialidades”,

Se o campo é numérico, não precisa das aspas. Agora tenha certeza de que a variável $xvalor_especialidades te retorne 0.00 quando for vazio, pois se retornar uma string nula, vai sempre dar erro.

Esqueci de dizer que este cálculo é efetuado num grid. o “6” corresponde ao nº do registo primary key
Este projeto foi convertido da versão 8 e funciona nesta versão sem qualquer problema.
Alterei agora na ligação à BD o separador decimal para , como sempre usei e nos formulários simples com valores numéricos apresenta este erro na atualização(ver anexo)
Curiosamente o campo IVA aparece com o separador . em vez de , como nos restantes campos

Relativamente ao erro do grid, retirei as " das variáveis mas o erro continua.

Sugestões


Screenshot_1avc.jpg

Engraçado… mas estou tendo o mesmo problema de variáveis neste momento em um formulário… foi após a última atualização.

Boas…
efetuei esta última alteração, no SCV9 mas o problema persiste.
Alguma sugestão por parte dos membros ou mesmo pela Netmake ?
Obrigada

Bom dia, resolveu seu problema?

Estou tendo problema similar, já verifiquei em todas as saídas de eventos dando echo no valor do campo de uma variável tipo “decimal” que no Banco MySQL esta como “float”, na saída esta com ponto, mas ao gerar o insert sai com virgula, ai o banco rejeita pois tem de ser ponto.

Sim Resolvi.
Tinha a ver com o charset, como estava na SCV8 em latin1, para a versão 9 mantive o mesmo charset para latin1.
O problema persistia quando estava a tentar alterar para UFT8.
Mantendo o charset a nvel das propriedades do projeto, na ligação da BAsede Dados e na base dedados do próprio MYSQL, o problema desaparece.

Ok obrigado,

Consegui resolver aqui tbem, no meu caso bastava ir em Banco de dados>Editar Conexão selecionar o banco de dados e na aba “Avançado” alterar o separador de decimais.

Se não alterar a conexão o valor pode estar certinho, mas na saída para o banco o SC converte de “.” para “,” e lasca tudo.