Fórum Translate Error. Value out of bounds. #510565
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
Curtir tópico
+ 0Post 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
Gostei + 1
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 !!!
Gostei + 0
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
Gostei + 1
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...
Gostei + 0
16/02/2015
Emerson Nascimento
Gostei + 1
16/02/2015
Emerson Nascimento
Gostei + 1
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.
Gostei + 1
18/02/2015
Marcos P
Obrigado pela ajuda de todos !
Gostei + 0
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....
Gostei + 0
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....
Gostei + 0
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 ?
Gostei + 0
18/02/2015
Renato Rubinho
Posta seu código para tentar caçar algum detalhe.
Gostei + 1
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...
Gostei + 0
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]
Gostei + 0
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);
Gostei + 1
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);
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)