Translate Error. Value out of bounds.
13/02/2015
0
Delphi 2010 + Sql Server 2000 ( via BDE )...
Tenho que gerar um relatório através de uma stored procedure que contém diversos parâmetros, inclusive alguns DateTime.
Faço a declaração do parâmetro normalmente :
stRelatorio.ParamByName('@DataInif').asDateTime := strtodatetime(DataInif.Text + ' 00:00')
Mas quando executo a procedure, aparece esse maldito erro : Translate Error. Value out of bounds.
Duas questões :
> Já isolei os demais parâmetros da procedure e o erro ocorre SEMPRE nos campos data dessa mesma rotina
> Tenho outros 40 relatórios que usam procedure no mesmo sistema e em nenhum dele esse erro ocorre
Alguma ideia ?
Abraços,
Marcos P
Post mais votado
13/02/2015
stRelatorio.ParamByName('@DataInif').asDateTime := StrToDate(DataInif.Text);
ou
stRelatorio.ParamByName('@DataInif').asDateTime := StrToDateTime(DataInif.Text + ' 00:00:00');
Att.Cauê Nishijima
Cauê Nishijima
Mais Posts
13/02/2015
Marcos P
Muito obrigado por sua resposta !
Nenhuma das duas formas funcionou ( na verdade, já tinha tentando ambas... ) !
Assim como já tentei com FormatDateTime, sem sucesso...
Com o erro ocorre no Open da procedure e no trace do Sql Server nem existe a chamada à procedure, o erro parece ser algo interno no momento do Delphi preparar a execução...
Tá osso !!!
13/02/2015
Renato Rubinho
Tenta assim:
stRelatorio.ParamByName('@DataInif').asDateTime := Trunc(DT1.Date) + StrToTime('00:00:00');
ou
stRelatorio.ParamByName('@DataInif').asDateTime := EncodeDateTime(YearOf(DT1.Date), MonthOf(DT1.Date), DayOf(DT1.Date),0,0,0,0);
ou
stRelatorio.ParamByName('@DataInif').asSTRING := '13/02/2015'; //Não sei qual formato texto que o Sql Server pode interpretar a data
13/02/2015
Marcos P
As boas novas : Com nenhuma das três sintaxes ocorre o erro "Valeu Out of Bounds" e a procedure é chamada no Sql Server.
As más notícias : Das três formas que você mencionou é passado "NULL" em DataInif para a procedure, mesmo com uma data válida no form !
Melhorou, mas não resolveu...
16/02/2015
Emerson Nascimento
18/02/2015
Renato Rubinho
Conseguiu resolver?
Muito estranho mesmo.
Uma alternativa é mudar o tipo do parâmetro para string, receber a data como string e converter na procedure.
18/02/2015
Marcos P
Obrigado pela ajuda de todos !
18/02/2015
Marcos P
Vou testar a conversão para string via procedure, embora precisasse resolver isso do lado do Delphi, sem alterar a estrutura no banco.
Aviso na sequencia....
18/02/2015
Marcos P
Vou testar a conversão para string via procedure, embora precisasse resolver isso do lado do Delphi, sem alterar a estrutura no banco.
Aviso na sequencia....
18/02/2015
Marcos P
Fiz, apenas para testar : stRelatorio.ParamByName('@DataIni').AsString := 'ABC';
No debug, tudo certo : stRelatorio.ParamByName('@DataIni').AsString | 'ABC';
No trace do Sql Server o parâmetro é passado como NULL : exec dbo.sprelelatorio @Situacao = 0, @Cidade = 0, ..., @DataIni = NULL, @Vendedor = 'ABC'
Já recriei a procedure no form, mudei a ordem e os tipos do parâmetro e... nada acontece !
Alguém tem alguma ideia ?
18/02/2015
Renato Rubinho
Posta seu código para tentar caçar algum detalhe.
18/02/2015
Marcos P
Já resolvi e agora o tratamento está correto... mas o valeu out of bounds, persiste !
Estou revisando mais uma vez, porque agora, com as datas iniciais ( Time = 00:00:00 ), parece que está funcionando.
Já aviso...
18/02/2015
Marcos P
O sintoma é o mesmo do exemplo abaixo... os parâmetros são corretamente preparados no Delphi, mas no Open da procedure ocorre o erro ( sendo que o trace do sql server nem mesmo recebe a chamada ao objeto no banco ).
[img]http://arquivo.devmedia.com.br/forum/imagem/378439-20150218-130110%20%281%29.png[/img]
18/02/2015
Renato Rubinho
Seu campo é DateTime mesmo?
Tenta passar só date :
stRelatorio.ParamByName('@DataInif').asDate := DT1.Date;
ou
stRelatorio.ParamByName('@DataInif').Value := DT1.Date;
ou
stRelatorio.ParamByName('@DataInif').asDate := Trunc(DT1.Date);
ou
stRelatorio.ParamByName('@DataInif').Value := Trunc(DT1.Date);
18/02/2015
Marcos P
Sim, na procedure os campos são todos DateTime :
CREATE PROCEDURE spRel024_faixa ( @Situacao int, @Cidade int, @AdsPerc smallint, @AdsPtoAdic float, @AdsPtoRest float, @Vendedor char(5), @pDataIni datetime, @pDataFim datetime, @pDataInif datetime, @pDataFimf datetime) AS
Tentei com as quatro variações que você sugeriu e nas quatro ocorreu o Value out of Bounds !
( a última tentativa ficou... )
// Value out of bounds na conversao desses campos data !!! stRelatorioFaixas.ParamByName('@pDataIni').Clear; stRelatorioFaixas.ParamByName('@pDataIni').Value := Trunc(DataIni.Date); stRelatorioFaixas.ParamByName('@pDataFim').Clear; stRelatorioFaixas.ParamByName('@pDataFim').Value := Trunc(DataFim.Date); stRelatorioFaixas.ParamByName('@pDataInif').Clear; stRelatorioFaixas.ParamByName('@pDataInif').Value := Trunc(DataInif.Date); stRelatorioFaixas.ParamByName('@pDataFimf').Clear; stRelatorioFaixas.ParamByName('@pDataFimf').Value := Trunc(DataFimf.Date);
Clique aqui para fazer login e interagir na Comunidade :)