Pesquisa em campos timestamp no firebir , e no delphi

11/03/2010

como eu faço essa proc funcionar corretamete, do jeito que ela esta ai nao me retorna nada ,se eu tirar a clausula where ela retorna o problema esta no between ?   CREATE or ALTER PROCEDURE PRC_CONSULTA_CAIXA_PERIDO(
DataI timestamp ,DataF timestamp ) RETURNS
(
 TIPO_LANCAMENTO VARCHAR (50) ,VL_LANCAMENTO NUMERIC (9,2),NR_MATRICULA INTEGER,USUARIO varchar (50),
 VL_DESPEZA NUMERIC (18,2),VL_RECEITA numeric (18,2),VL_SALDO NUMERIC (18,2),fL_RECEITA smallint
 )
AS
BEGIN  for  SELECT
    B.DS_TIPO_LANCAMENTO,
    A.VL_LANCAMENTO,
    M.NR_MATRICULA,
    D.nm_login ,
    CASE B.Fl_Receita WHEN 1 THEN 0 ELSE A.VL_LANCAMENTO END as VL_DESPEZA,
    CASE B.Fl_Receita WHEN 1 THEN A.VL_LANCAMENTO ELSE 0 END AS VL_RECEITA ,
    CASE B.Fl_Receita WHEN 1 THEN A.VL_LANCAMENTO ELSE 0 END -CASE B.Fl_Receita WHEN 1 THEN 0 ELSE A.VL_LANCAMENTO END AS VL_SALDO,
    B.fl_receita
   
    FROM TB_MOVIMENTACAO_CAIXA  A
        INNER JOIN TB_TIPO_LANCAMENTO  B  ON (A.ID_TIPO_LANCAMENTO=B.ID_TIPO_LANCAMENTO)
        INNER JOIN TB_ABERTURA_CAIXA  C   ON (A.ID_ABERTURA_CAIXA=C.ID_ABERTURA_CAIXA )
        INNER JOIN TB_USUARIO  D ON (A.id_usuario = D.ID_USUARIO)
        inner join tb_motoqueiro m on (m.id_motoqueiro =a.id_motoqueiro)
    WHERE (a.dt_lancamento between :datai and :dataf)
    order by A.id_movimentacao_caixa desc
    INTO
     :TIPO_LANCAMENTO ,:VL_LANCAMENTO ,:NR_MATRICULA ,:USUARIO , :VL_DESPEZA ,:VL_RECEITA ,:VL_SALDO ,:fl_receita
     DO
     begin
     suspend ;
     end
END       outra coisa e la no delphi como eu vou fazer a pesquisa
  with ds.DataSet do
  begin
    close;
    tclientdataset(ds.DataSet).Params[0].AsDate := dtpI.Date;
    tclientdataset(ds.DataSet).Params[1].AsDate := dtpF.Date + 1;
    // tclientdataset(ds.DataSet).Params[0].AsDate:= StrToDate('11/03/2010') ;
    // tclientdataset(ds.DataSet).Params[1].AsDate := StrToDate('11/03/2010')+1 ;
    Open;
    lblTotal.Caption := IntToStr(ds.DataSet.RecordCount);
    DBGrid1.SetFocus;   end;
Carlos Faria

Carlos Faria

Curtidas 0

Respostas

Rodrigo Mourão

Rodrigo Mourão

11/03/2010

Olá Carlos,

Bem a principio seu select esta correto so nao ha necessidade se colocar os parenteses mas nao tem nada haver. O Problema pode esta na hora de passar os parametros para o firebird.

AS inves de passar como .asDate Passa como .AsString  e teste.

Att,

GOSTEI 0
Carlos Faria

Carlos Faria

11/03/2010

So fazendo uma retificacao aqui , essa proc ta funcionando o problema esta nao clausula where , onde eu nao sei muito trabalhar com o firebir   Eu preciso fazer um filtro entre exemplo 05/03/20   tem que ser entre (05/03/2010 00:00:00 ) e (05/03/2010 23:59:59)   la no sqlserver eu fazia simplesmente o seguinto   Proc_x (@dataI smalldatetime , @dataf smalldatetime ) as select table ...... where campo beween (@datai) and (@dataf)   so isso aqui ja me bastava ..   no delphii eu adiconava dois componentes tdatetime pricture e ficaria assim   cds.close ; cds.params[0].asstring := formatdatetime('yyyy-mm-dd 00:00:00',dtpI.date) ; cds.params[1].asstring := formatdatetime('yyyy-mm-dd 23:59:59',dtpf.date) ; cds.open     pronto 100% perfeito e funcional , porem no firebird parece que isso muda e nao se faz assim     fico no aguardo  
GOSTEI 0
Rodrigo Mourão

Rodrigo Mourão

11/03/2010

Entao, como eu falei abaixo: Tente passar como string, da mesma forma. A data no FireBird e igual no SqlServer yyyy-mm-dd

Att,

GOSTEI 0
Carlos Faria

Carlos Faria

11/03/2010

Rapaz agente respondeu simultaneamente rs bom eu ja tentei parece que nao funciona ,eu fiz exatamente como fazia no sql , declarei os parametros do tipo string o problema e qual o formato no firebird como ficaria o   Cdsparamas[0].asstring := formatdatetime (---------------,datetimepicture.date) ;   talves esteja aqui o problema
GOSTEI 0
Carlos Faria

Carlos Faria

11/03/2010

funcionou perfeitamento agora so nao entendi pq la no firebird direto ele nao me da o retorno     select * from PRC_CONSULTA_CAIXA_PERIDO (:datai,:dataf)   executei esse select acima e nao me trouxe nada no firebird ,pq ?   essa mesma proc no delphi ja trouxe os resultados !
GOSTEI 0
Rodrigo Mourão

Rodrigo Mourão

11/03/2010

Bem pode ser problema em como esta passando a data no IBexpert. Passe como 2010-03-01 por exemplo. MAs no Delphi esta correto ???

Att,

GOSTEI 0
Carlos Faria

Carlos Faria

11/03/2010

Ok no chamado , grande Rodrigo !
GOSTEI 0
POSTAR