[firebase-br] SQL Doido

José Mauricio Barbisan Zottis zottissistemas em gmail.com
Sábado Junho 19 14:07:24 -03 2021


Foi só um teste, como o select é por cliente, ele não fica lento.
fiz um teste colocando no delphi os valores dos parâmetros, aparece os
valores, porém, mesmo declarando manualmente ou via programação o dataType,
na execução não aparece.

estou fazendo o teste com a passagem dos valores diretamente no SQL mas tô
me batendo para formatar corretamente a data que passar a data
Esta dando o erro: Only one operand can be of type TIMESTAMP

Montei o SQL assim:

   var vDataI, vDataF : string;

       vdataI  := FormatDateTime('MM-dd-yyyy',dtpPeriodoColeta1.Date);
       vdataF  := FormatDateTime('MM-dd-yyyy',dtpPeriodoColeta2.Date);

         with qryColetasAgrupadas do
           begin
             Close;
             SQL.Clear;
             SQL.Add('select (select d.descricao from descricao_residuos d
where d.codigo = v.cod_descricao)descricao, ');
             SQL.Add('       (select sum(f.peso_coletado) from far_mtr f
where f.cod_cliente = v.cod_cliente and f.cod_valores_cliente = v.codigo ');
             SQL.Add('   and f.data_coleta between ' + vdataI + ' and ' +
vdataF + ' ) peso ');
             SQL.Add('  from valores_cliente v ');
             SQL.Add('  where v.cod_cliente = ' + BuscaCOD_CLIENTE.AsString
);


Em sáb., 19 de jun. de 2021 às 13:42, Nobyte X via lista <
lista em firebase.com.br> escreveu:

> Muito lento 2minutos para trazer 20k de registros, isso é por conta de
> executsr no delphi?
>
> Em sáb, 19 de jun de 2021 13:16, José Mauricio Barbisan Zottis via lista <
> lista em firebase.com.br> escreveu:
>
> > o teste sem Cód Cliente
> > Obtidos 23723
> >
> > ------ Info. Desempenho ------
> > Tempo de Preparação = 31ms
> > Tempo de Execução = 1m 56s 672ms
> > Tempo Médio Leitura = 5.072,70 ms
> > Memória Actual = 30.248.424
> > Memória Max = 44.449.920
> > Buffers de Memória = 2.048
> > Leituras do disco para a Memória Intermédia = 140.656
> > Escritas da Memória Intermédia para o disco = 137
> > Leituras da Memória Intermédia = 1.884.583
> >
> >
> > Em sáb., 19 de jun. de 2021 às 12:58, José Mauricio Barbisan Zottis <
> > zottissistemas em gmail.com> escreveu:
> >
> > > Opa, agradeço pelo retorno, o peso que se refere, não acontece, fiz um
> > > teste sem o uso de parâmetros e o retorno foi satisfatório, e olhe que
> a
> > > base é grande.
> > > também fiz o teste com AsString
> > > fiz teste usando cast para varchar, numeric, etc.
> > >
> > > fiz vários SQL, fazendo pequenas Views no Banco e juntando, também nada
> > > funcionou, inverti a lógica e aparece os dados, mas quando rodo no
> > Delphi,
> > > não aparece
> > > O SQL que pelo menos aparece a descrição ´pe este, mas a soma do peso
> não
> > > aparece.
> > > tentei também com between, com <= e <= e nada
> > >
> > > select (select d.descricao from descricao_residuos d where d.codigo =
> > > v.cod_descricao)descricao,
> > >        (select sum(f.peso_coletado) from far_mtr f where f.cod_cliente
> =
> > > v.cod_cliente and f.cod_valores_cliente = v.codigo and f.data_coleta >=
> > > :vardataI and f.data_coleta <= :vardataF ) peso,
> > >       cast( round((select sum(f.peso_coletado) from far_mtr f where
> > > f.cod_cliente = v.cod_cliente and f.cod_valores_cliente = v.codigo and
> > > f.data_coleta >= :vardataI and f.data_coleta <= :vardataF ),2)as
> > > varchar(30)) peso2
> > >   from valores_cliente v
> > >   where v.cod_cliente = :varCodCliente
> > >
> > >
> > > Em sáb., 19 de jun. de 2021 às 12:21, Mário Reis via lista <
> > > lista em firebase.com.br> escreveu:
> > >
> > >> Duvido da eficiência desse teu código companheiro. Deve ter um peso
> > >> tremendo. Eu partiri esse query em vários outros mais pequenos e
> > >> dependentes, mas enfim!
> > >> Ainda assim, arriscaria que o problema está aqui:
> > >>              *ParamByName('vardataI').AsDate  *       :=
> > >>                  dtpPeriodoColeta1.Date;
> > >>              ParamByName('vardataI').AsDate
> > >>                  dtpPeriodoColeta2.Date;
> > >> Não sei que componentes usa, mas tb já tive um problema idêntico e
> > >> resolvi, passando o parâmetro data como AsString
> > >> em vez de AsDate e funcionou. Até hoje faço assim com os componentes
> do
> > >> TIBDatabase... TIBQuery etc...
> > >> P/favor tente e nos diga o resultado.
> > >> Espero ter ajudado. Obrigado
> > >>
> > >> Com os meus melhores cumprimentos
> > >> Mário Agostinho Reis
> > >> 919262146
> > >>
> > >> Esta mensagem contém informação de natureza confidencial e é
> > >> exclusivamente dirigida ao(s) destinatário(s) indicado(s). Se, por
> > engano,
> > >> receber este email agradecemos que não o copie nem o reenvie e que nos
> > >> notifique do ocorrido através do email de resposta.
> > >>
> > >>
> > >> José Mauricio Barbisan Zottis via lista <lista em firebase.com.br>
> > escreveu
> > >> no
> > >> dia sexta, 18/06/2021 à(s) 23:16:
> > >>
> > >> > Pessoal, boa noite.
> > >> > Tenho um SQL que já tentei de tudo quanto é jeito e todas as
> > tentativas
> > >> via
> > >> > IBEx´pert da certo, porém quando passo pro componente no Delphi(7)
> não
> > >> > aparece nada.
> > >> > Alguém saberia o que pode estar acontecendo?
> > >> >
> > >> > o SQL é este:
> > >> >
> > >> > select v.cod_cliente,
> > >> >        sum(v.peso_coletado)peso_coletado,
> > >> >        v.descricao
> > >> >   from
> > >> > (select f.cod_cliente,
> > >> >        f.peso_coletado,
> > >> >        f.data_coleta,
> > >> >        f.cod_valores_cliente,
> > >> >       (select dr.descricao from descricao_residuos dr where
> dr.codigo
> > =
> > >> > (select v2.cod_descricao from valores_cliente v2
> > >> >                             where v2.codigo =
> > >> > f.cod_valores_cliente))descricao
> > >> > from far_mtr f)v
> > >> > where v.cod_cliente = :varCodCliente
> > >> >   and v.data_coleta between :vardatai and :vardataf
> > >> >   group by v.cod_cliente,
> > >> >            v.descricao
> > >> >
> > >> > , no componente chamo assim(Como faço hà anos)
> > >> >
> > >> >          with qryColetasAgrup do
> > >> >            begin
> > >> >              Close;
> > >> >              ParamByName('varCodCliente').AsInteger :=
> > >> > qryBuscaCOD_CLIENTE.Value;
> > >> >              ParamByName('vardataI').AsDate         :=
> > >> > dtpPeriodoColeta1.Date;
> > >> >              ParamByName('vardataI').AsDate         :=
> > >> > dtpPeriodoColeta2.Date;
> > >> >              Prepare;
> > >> >              Open;
> > >> >            end;
> > >> >
> > >> > --
> > >> > ______________________________________________
> > >> > FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> > >> > Para saber como gerenciar/excluir seu cadastro na lista, use:
> > >> > http://www.firebase.com.br/fb/artigo.php?id=1107
> > >> > Para consultar mensagens antigas:
> > >> > http://www.firebase.com.br/pesquisa_lista.html
> > >> >
> > >> ______________________________________________
> > >> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> > >> Para saber como gerenciar/excluir seu cadastro na lista, use:
> > >> http://www.firebase.com.br/fb/artigo.php?id=1107
> > >> Para consultar mensagens antigas:
> > >> http://www.firebase.com.br/pesquisa_lista.html
> > >>
> > >
> > >
> > > --
> > >
> > >
> >
> > --
> > ______________________________________________
> > FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> > Para saber como gerenciar/excluir seu cadastro na lista, use:
> > http://www.firebase.com.br/fb/artigo.php?id=1107
> > Para consultar mensagens antigas:
> > http://www.firebase.com.br/pesquisa_lista.html
> >
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use:
> http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas:
> http://www.firebase.com.br/pesquisa_lista.html
>


--


Mais detalhes sobre a lista de discussão lista