Translate Error. Value out of bounds.

13/02/2015

0

Olá pessoal,

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

Marcos P

Responder

Post mais votado

13/02/2015

Marcos tenta o seguinte:

stRelatorio.ParamByName('@DataInif').asDateTime := StrToDate(DataInif.Text);


ou

stRelatorio.ParamByName('@DataInif').asDateTime := StrToDateTime(DataInif.Text + ' 00:00:00');



Att.Cauê Nishijima

Cauê Nishijima

Cauê Nishijima
Responder

Mais Posts

13/02/2015

Marcos P

Cauê,

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 !!!
Responder

13/02/2015

Renato Rubinho

Buenas,

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
Responder

13/02/2015

Marcos P

rrubinho,

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...
Responder

16/02/2015

Emerson Nascimento

tente com .AsSQLTimeStamp
Responder

16/02/2015

Emerson Nascimento

tente com .AsSQLTimeStamp juntamente com a função DateTimeToSQLTimeStamp() (SqlTimSt.pas)
Responder

18/02/2015

Renato Rubinho

Marcos,

Conseguiu resolver?
Muito estranho mesmo.
Uma alternativa é mudar o tipo do parâmetro para string, receber a data como string e converter na procedure.
Responder

18/02/2015

Marcos P

Estou retomando o assunto hoje... aviso na sequencia !

Obrigado pela ajuda de todos !
Responder

18/02/2015

Marcos P

"AsSQLTimeStamp", assim como as demais formas indicadas pelo rrubinho, chegam como NULL no Sql Server.

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....
Responder

18/02/2015

Marcos P

"AsSQLTimeStamp", assim como as demais formas indicadas pelo rrubinho, chegam como NULL no Sql Server.

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....
Responder

18/02/2015

Marcos P

Nem como string estou conseguindo passar esse parâmetro !

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 ?
Responder

18/02/2015

Renato Rubinho

Você alterou o tipo do campo na procedure também para receber como string ?
Posta seu código para tentar caçar algum detalhe.
Responder

18/02/2015

Marcos P

Já achei o "detalhe" aqui... são quatro reports / procedures na mesma unit e, na hora de passar os parâmetros, acabei trocando a chamada.

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...
Responder

18/02/2015

Marcos P

Segue o código e o debug, tentei todas as formas indicadas por vocês e nenhuma delas funciona.

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]
Responder

18/02/2015

Renato Rubinho

Que novela, hein?... rsrs
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);
Responder

18/02/2015

Marcos P

rrubinho,

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);
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar