Caros,

Estou tendo uma dificuldade muito curiosa e, pra mim, incompreensível.
Em um relatório, tento consultar uma view e obtenho um erro de
conversão de data.

A view que criei é assim:

CREATE VIEW VCONT (
  CODPROJETO, 
  CODGRUPO, 
  DATAOCORRENCIA, 
  NOMEOPERADOR, 
  CODOPERADOR, 
  TEMPO
) 
AS 
  select h.CodProjeto, 
         c.CodGrupo, 
         cast(cast(h.DataOcorrencia as varchar(11)) as timestamp), 
         o.NomeOperador,
         o.CodOperador, 
         TempoTotal Tempo 
  from Chamado c 
       left outer join Historico h on c.codChamado = h.codChamado 
                               and c.CodProjeto = h.CodProjeto 
       left outer join Operador o on h.codOperador = o.codOperador

Vejam que estou reduzindo um campo do tipo datetime para varchar(11).
O IBExpert reclama, mas na conexão do relatório funciona corretamente.
Eu precisei fazer a view somente por causa desta conversão. Quero
agrupar na consulta do relatório por data, não data e hora, pois
difere em 16/12/2008 10:00:00.0000 e 16/12/2008 10:00:00.0001.
A consulta que fiz é assim:

/* Consulta sobre a view*/
select CodProjeto, 
       Max(DataOcorrencia) DataOcorrencia, 
       NomeOperador, 
       CodOperador, 
       SUM( calctime(Tempo)) Tempo
from vcont2
where DataOcorrencia between :datai and :dataf
   and CodProjeto = :CodProjeto
   and Tempo > '00:00'
group by CodProjeto, NomeOperador, CodOperador,DataOcorrencia
order by NomeOperador, DataOcorrencia

Obs.: CALCTIME é uma função para soma de tempo e está tudo ok.

O erro ocorre justamente quando tento passa o resultado do campo
DataOcorrencia(DATETIME) da view (que converti para varchar(11) e
depois pra timestamp) como parâmetro da consulta.
A mensagem de erro é:  "EDBEngineError 13059: General SQL error.
arithmetic exception, numeric overflow, or string truncation".

O pior de tudo é que em minha máquina (virtual) de desenvolvimento
(onde o Delphi está instalado) funciona corretamente, mas em uma
máquina de testes (também virtual) dá esse erro. O mesmo aplicativo, o
mesmo banco de dados, a mesma base de dados. O que pode ter no
ambiente que gere esse erro?

Talvez pra simplificar... Existe como eu agrupar em uma consulta como
a acima um campo do tipo DATETIME só pela data, desprezando o tempo?

Espero poder contar com o conhecimento dos colegas.

Abraço.

Luciano Gomes


Responder a