Erro : Arithmetic exception, numeric overflow, or string truncation
Olá pessoal,
Estou usando o Delphi 2006 com o FireBird 2.1, e está ocorrendo o erro : Arithmetic exception, numeric overflow, or string truncation, quando tento fazer uma pesquisa, usando a Estrutura: DBXpress, com SQLConnection, SQLDataSet, DataSetProvider e ClientDataSet...
Ocorreu o seguinte, tem um campo Integer na Tabela, e conforme a sequencia aumentou, por exemplo se pesquisar 30900, consulta normal, acima de 32000 por exemplo, ocorre o erro.
Continua aceitando a Inclusão de novos registros normal, porém ocorre este problema na Pesquisa, curiosamente estou com o mesmo problema para para fazer pesquisa com campo do tipo VARCHAR, usando o LIKE ultrapassando 8 caracteres...
Alguém já viu este problema, poderia ser alguma DLL para atualizar?
Desde já obrigado pela Atenção,
José Aparecido
Estou usando o Delphi 2006 com o FireBird 2.1, e está ocorrendo o erro : Arithmetic exception, numeric overflow, or string truncation, quando tento fazer uma pesquisa, usando a Estrutura: DBXpress, com SQLConnection, SQLDataSet, DataSetProvider e ClientDataSet...
Ocorreu o seguinte, tem um campo Integer na Tabela, e conforme a sequencia aumentou, por exemplo se pesquisar 30900, consulta normal, acima de 32000 por exemplo, ocorre o erro.
Continua aceitando a Inclusão de novos registros normal, porém ocorre este problema na Pesquisa, curiosamente estou com o mesmo problema para para fazer pesquisa com campo do tipo VARCHAR, usando o LIKE ultrapassando 8 caracteres...
Alguém já viu este problema, poderia ser alguma DLL para atualizar?
Desde já obrigado pela Atenção,
José Aparecido
Jose Aparecido
Curtidas 0
Respostas
Rafael Mattos
25/05/2011
vc alterou o tamaho no banco de dados desse campo ?
pq isso é estouro de campo.
pq isso é estouro de campo.
GOSTEI 0
José Aparecido
25/05/2011
Olá, obrigado pelo retorno, demorei de verificar porque confundi o E-Mail que estava para contato...
Quanto a este problema que está ocorrendo, acredito que o problema não está no Banco e sim no acesso ao mesmo.
Não houve nehuma alteração na tablela, tanto que continua aceitando novas inclusões normal, o problema está na com pesquisas, direto pelo Banco, pelo IBOConsole por exemplo, funciona normal, o problema está quando acesso pela aplicação...
Apesar da mensagem dá a entender que é estouro de campo, mas não é, porque também não estou conseguindo fazer pesquisa com LIKE de um campo VARCHAR(40), quando coloco mais de 8 caracteres na pesquisa, também ocorre erro.
De qualquer forma, obrigado pelo retorno...
GOSTEI 0
Rafael Mattos
25/05/2011
posta a parte da pesquisa do seu código
GOSTEI 0
José Aparecido
25/05/2011
Oi Rafael, ainda não tinha visto sua mensagem, devido estar o retorno num e-mail que não estou verificando com muita frequencia, vou alterar no site...
Enfim, você pediu pra postar o código, vou tentar colocar as partes aqui...
Não sei se você está acostumado com uma das formas que trabalhamos com Query por aqui, vou tentar descrever abaixo o código...
//Chamada para a Query
with dmClientMovimento.cds_Lote do
begin
Close;
//Params.ParamByName('pTipoPesq').AsInteger := 6;
//Params.ParamByName('pCodigo').AsInteger := dmClientCadastro.cds_Prospect.FieldByName('PRSCODIGO').AsInteger; Params.ParamByName('pTipoPesq').AsInteger := 4;
Params.ParamByName('pDescricao').AsString := dmClientCadastro.cds_Prospect.FieldByName('PRSFONE').AsString;
Open; //Código Query ( SQLDataSet )
SELECT LO.*
FROM TMLOTE LO
WHERE ( (:pTipoPesq = 1 AND LO.TURCODIGO =:pCodigo AND LO.LOTNUMERO =:pCodLote AND LO.STFCODIGO =:pStatus)
OR (:pTipoPesq = 2 AND LO.OPECODIGO =:pCodigo AND LO.LOTNUMERO =:pCodLote AND LO.STFCODIGO =:pStatus)
OR (:pTipoPesq = 3 AND LO.LOTDATAAG <= :pData AND LO.OPECODIGO = :pCodigo AND LO.STFCODIGO = :pStatus)
OR (:pTipoPesq = 4 AND LO.LOTFONE =:pDescricao)
OR (:pTipoPesq = 5 AND LO.LOTNOME LIKE :pDescricao)
OR (:pTipoPesq = 6 AND LO.PRSCODIGO =:pCodigo)
OR (:pTipoPesq = 7 AND LO.OPECODIGO = :pCodigo AND LO.STFCODIGO = :pStatus AND ( ( LO.LOTDATAAG < :pData ) OR ( LO.LOTDATAAG = :pData AND LO.LOTHORAAG <= :pHora ) ) )
OR (:pTipoPesq = 8 AND LO.OPECODIGO = :pCodigo AND LO.STFCODIGO = :pStatus)
OR (:pTipoPesq = 0) )
ORDER BY LO.LOTDATAAG, LO.LOTHORAAG, LO.LOTNUMERO
Então, todas as Opções estão funcionando, com a excessão do que expliquei ocorre o Erro e excessão..., por exemplo a Opção = 4, funciona com números até determinada faixa de valor, superior a este, dá o erro que estamos discutindo... A Opção que tem a Clausula LIKE, só aceita até 8 Caratacteres, acima disso também dá erro... Obs.: O Campo da Pesquisa com LIKE ( Opção 5 ) é um VARCHAR(40) ; O Campo Pesquisado na Opcação 6, é TIpo Integer... Bom, é isso, obrigado pela atenção, José Aparecido
with dmClientMovimento.cds_Lote do
begin
Close;
//Params.ParamByName('pTipoPesq').AsInteger := 6;
//Params.ParamByName('pCodigo').AsInteger := dmClientCadastro.cds_Prospect.FieldByName('PRSCODIGO').AsInteger; Params.ParamByName('pTipoPesq').AsInteger := 4;
Params.ParamByName('pDescricao').AsString := dmClientCadastro.cds_Prospect.FieldByName('PRSFONE').AsString;
Open; //Código Query ( SQLDataSet )
SELECT LO.*
FROM TMLOTE LO
WHERE ( (:pTipoPesq = 1 AND LO.TURCODIGO =:pCodigo AND LO.LOTNUMERO =:pCodLote AND LO.STFCODIGO =:pStatus)
OR (:pTipoPesq = 2 AND LO.OPECODIGO =:pCodigo AND LO.LOTNUMERO =:pCodLote AND LO.STFCODIGO =:pStatus)
OR (:pTipoPesq = 3 AND LO.LOTDATAAG <= :pData AND LO.OPECODIGO = :pCodigo AND LO.STFCODIGO = :pStatus)
OR (:pTipoPesq = 4 AND LO.LOTFONE =:pDescricao)
OR (:pTipoPesq = 5 AND LO.LOTNOME LIKE :pDescricao)
OR (:pTipoPesq = 6 AND LO.PRSCODIGO =:pCodigo)
OR (:pTipoPesq = 7 AND LO.OPECODIGO = :pCodigo AND LO.STFCODIGO = :pStatus AND ( ( LO.LOTDATAAG < :pData ) OR ( LO.LOTDATAAG = :pData AND LO.LOTHORAAG <= :pHora ) ) )
OR (:pTipoPesq = 8 AND LO.OPECODIGO = :pCodigo AND LO.STFCODIGO = :pStatus)
OR (:pTipoPesq = 0) )
ORDER BY LO.LOTDATAAG, LO.LOTHORAAG, LO.LOTNUMERO
Então, todas as Opções estão funcionando, com a excessão do que expliquei ocorre o Erro e excessão..., por exemplo a Opção = 4, funciona com números até determinada faixa de valor, superior a este, dá o erro que estamos discutindo... A Opção que tem a Clausula LIKE, só aceita até 8 Caratacteres, acima disso também dá erro... Obs.: O Campo da Pesquisa com LIKE ( Opção 5 ) é um VARCHAR(40) ; O Campo Pesquisado na Opcação 6, é TIpo Integer... Bom, é isso, obrigado pela atenção, José Aparecido
GOSTEI 0
Emerson Nascimento
25/05/2011
não será o 'comprimento' do parâmetro ?
GOSTEI 0
Jose Aparecido
25/05/2011
Olá pessoal, esta seria uma dica interessante, no FB 1.5 nunca tive problemas com isso, no caso de campo VARCHAR, passar o parâmetro como String, mas agora no FB 2.1 pode ser que tenha mais alguns cuidados... vou fazer uma pesquisa "simples" para verificar isso...
Obrigado,
José Aparecido
Obrigado,
José Aparecido
GOSTEI 0
Guilherme Silva
25/05/2011
Cara eu estudo java e quando dá esse erro, é por que houve um erro de aritmética mesmo, como por exemplo dividir 4 por 0.
GOSTEI 0
Guilherme Silva
25/05/2011
Não entendo nada de delphi, mas faz esse teste troca o 0 por 1.
GOSTEI 0
Denis Portas
25/05/2011
Verifique o tamanho do parâmetro que você está mandando na abertura do clientdataset, já vi muitos desenvolvedores concatenado % para Like porem o tamanho do parâmetro não comporta mais um carácter.
GOSTEI 0