Erro de sql na execução

Tenho essa sql

SELECT
codigo as CODIGO,
descricao_codigo as DESCRICAO_CODIGO,

case CONTROLE_DC
when ‘C’ then VALOR else 0
end as CREDITO,

case CONTROLE_DC
when ‘D’ then VALOR else 0
end as DEBITO

FROM
holl_lancamentos

WHERE nfuncional = 510
AND local = ‘TESTE’
AND mes_referente = ‘[JAN-2015]’

ORDER BY
controle_dc ASC, codigo DESC

Se eu executo direto na tabela ela funciona, porem se eu executo pelo sc ele retorna a seguinte mensagem

ERRO
Erro ao acessar o banco de dados
[Microsoft][ODBC SQL Server Driver][SQL Server]Erro ao converter tipo de dados varchar em numeric.
SELECT CODIGO, DESCRICAO_CODIGO, case CONTROLE_DC when ‘C’ then VALOR else ‘’ end as credito, case CONTROLE_DC when ‘D’ then VALOR else ‘’ end as debito from holl_lancamentos where nfuncional = 510 AND local = ‘TESTE’ AND mes_referente = ‘JAN-2015’ order by controle_dc ASC, codigo DESC

O que pode estar ocorrendo ?

Carlos

nfuncional é int?
‘[JAN-2015]’ isso seria uma variável global?
Se você interpretar o código direto no sql builder funciona?

Caso você esteja querendo dizer que ‘[JAN-2015]’ é um campo, seria {}, e mesmo assim isto não funcionaria, você deveria fazer um filtro dentro do sql

Seu tipo de conexão do SC com o Sgbd pode estar causando erro de interpretação. Troque o tipo…já tive esse problema com data aqui.
O desenvolvimento estava com um tipo e a produção com outro… aí deu zica…

Aproveitando esse tópico esta ocorrendo o seguinte erro aqui agora…em um código que funcionava normalmente. Inclusive dei várias baixas nos boletos.

ERRO:

ERRO Erro ao acessar o banco de dados [Microsoft][ODBC SQL Server Driver][SQL Server]Sintaxe incorreta próxima a '8'. update boletos set valor_pago = 61,8 , data_credito = '2015-02-12', juros = 0 , descontos = 0 ,status = 'Baixado' where idcontas = 35

UPDATE:

$sql_c = "update boletos set valor_pago = $_vlrpago, data_credito = '$_dtcredito', juros = $_vlracres, descontos = $_vlrdesc, status = 'Baixado' where idcontas = ".{dslan[0][0]}; sc_exec_sql($sql_c);//atualiza a tabela boletos com BAIXADO

Que diabo de caboclo baixou nessa joça ??

Esse erro está por causa da virgula e não ponto no campo float.

Solução: coloque o valor entre aspas simples ou para não mudar o código edite sua conexão em avançado e troque virgula por ponto

Rodrigo, eu já dei várias baixas em boletos do mesmo cliente com o mesmo valor, com vírgula e não deu problemas.
O campo no banco é Decimal(15,2)…
Se colocar em aspas simples dá erro de conversão Varchar …etc

Mudei o separador decimal na conexão de (.) para (,) .
estou gerando todo o codigo novamente e vou publicar completo com fontes…

Legal, verifique o procedimento também no ambiente de produção, talvez não seja necessário publicar novamente.

mesma coisa…não funcionou…
Mas o que me intriga é que já baixei 1001 boletos e agora essa %$@%$#@ vem dar esse erro…

Bom nesse caso é porque suas variáveis estão sendo reconhecidas como varchar.
Faz o seguinte:

$sqlU = “update orcamento_itens set total = replace(’$valor’,’,’,’.’) where id = 1”;
sc_exec_sql($sqlU);
echo $sqlU;

$sql_c = "update boletos set valor_pago = replace(’$_vlrpago’,’,’,’.’), data_credito = ‘$_dtcredito’, juros = replace(’$_vlracres’,’,’,’.’), descontos = replace(’$_vlrdesc’,’,’,’.’), status = ‘Baixado’ where idcontas = ".{dslan[0][0]};
sc_exec_sql($sql_c);//atualiza a tabela boletos com BAIXADO

nada…

Testei a select diretamente no banco e deu o mesmo erro.
só aceita se mandar (.) e não (,) … erro localizado e confirmado.

agora a pergunta que não cala… Por que os outros lançamentos deram certo ? por que só deu o erro agora ? por que todas as outras aplicações que tem o mesmo método de update com dados similares não dão erro ?

Acredito que na configuração de conexão onde setamos o separador decimal do banco como (.) e se o valor lido pelo codigo no SC estiver com (,) ele automaticamente converte para (.), como estava ocorrendo…
agora essa select tá dando isso…

Jean,

Dá um echo na variável $_vlrpago antes de executar o update, pra ver como ele está definido no SC.

Antes de eu enviar o código eu testei e funcionou. Sua base é mysql ?

O que pode estar acontecendo é que seu código não tilha casa decimal e nesse caso tem.

Olha que interessante. Foi justamente o que havia falado na minha primeira postagem com relação ao problema da data do amigo que abriu o post.
Fui conferir em produção e a conexão estava tipo PDO… e o correto é Native SQL…
mudei o tipo e funcionou…

Engraçado é que a configuração original era Native SQL e misteriosamente aparece como PDO…

aí vem outra pergunta ?

É possível ao atualizar toda a pasta base dos fontes a configuração zuar ?