Pesquisa retornando poucos registros

22/01/2013

1

Olá.
Tenho uma aplicação desenvolvida com Delphi 2010 utilizando Datasnap 2010, Firebird 2.5 com DBExpress e me apareceu um problema estranho.
Tenho uma tabela de Movimento de Estoque no meu banco de dados que registra a movimentação de entrada e saída dos produtos no estoque e suas origens(entrada/saída com nota, entrada/saída por perda e etc.). Aparentemente estava funcionando normalmente até que meu cliente informou que só estavam aparecendo os registros até 28/05/2012(a tabela tem registros desde 19/04/2012).

A consulta SQL não tem nenhum tipo de filtro por data ou coisa do tipo limitando.

Se eu rodo a pesquisa no IBExpert ou IBOConsole, ele me retorna todos os registros(com registros datados até hoje, por exemplo), só na aplicação que vem esse resultado "cortado". Apliquei um filtro por data na aplicação, para testar e o problema continua.

Quando faço uma pesquisa de 19/04/2012 até 22/01/2013 ele me retorna 11056 registros(a tabela tem 30784 no total, a data do ultimo registro é 09/01/2013) e o ultimo registro mostrado é de 28/05/2012, se faço uma pesquisa de 01/11/2012 até 22/01/2013 ele me retorna 709 registros e o último que ele mostra é de 21/11/2012.

Se alguém tiver alguma ideia do que esteja acontecendo aqui, por favor, me dê uma luz pq já estou desde Dezembro/2012 com esse problema e já estou sem alternativas...
Responder

Posts

22/01/2013

Douglas

Caro Felipe Menegossi,

será que não pode ser o charset na configuração do teu banco no FireBird.

tente colocar charset = WIN1252.

É só uma ideia derrepente funciona.
Responder
Caro Felipe Menegossi,

será que não pode ser o charset na configuração do teu banco no FireBird.

tente colocar charset = WIN1252.

É só uma ideia derrepente funciona.


Fiz a configuração do Charset no banco e na conexão da aplicação, mas o problema continua =/
Responder

23/01/2013

Douglas

Não sei se configurou.

Mas tenta mudar a fonte do banco também para este padrão.

Ansi_Charset.
Responder

23/01/2013

Rodolpho Silva

Podemos começar pela seguinte forma:

1) Faça um filtro na sua aplicação, desde que [b]não use filtro de data![/b] Use outro qualquer.
2) Faça o mesmo filtro em SQL e rode pelo IBExpert.

Se ambos possuírem o mesmo resultado, verifique a formatação das datas do S.O, tando no servidor como na aplicação cliente.
Responder

23/01/2013

Jose Medeiros

bom dia,

Acho que para podermos ajudar melhor, seria interessante você postar o código que está usando nessa consulta.


Responder
bom dia,

Acho que para podermos ajudar melhor, seria interessante você postar o código que está usando nessa consulta.



O código que usei para testar é esse:
SELECT MOV.MOVCODIGO, MOV.PROCODIGO, MOV.MOVDATA, MOV.MOVHORA, MOV.INFNFE_ID, 
       MOV.TPMCODIGO, MOV.MOVQTDE, MOV.MOVPESO MOV.ESTATUAL
FROM MOVIMENTO MOV


Essa consulta no IBExpert trás todos os 30 mil e num sei quantos registros, já que não tem filtros, mas na Aplicação traz só uns 12 mil. Testei fazer a consulta também no lado server, antes de passar pro Client, mesmo problema.

A consulta parametrizada é essa:
SELECT MOV.MOVCODIGO, MOV.PROCODIGO, MOV.MOVDATA, MOV.MOVHORA, MOV.INFNFE_ID, 
       MOV.TPMCODIGO, MOV.MOVQTDE, MOV.MOVPESO, PRO.PRODESCRICAO, MOV.ESTATUAL,
       TPM.TPMDESCRICAO, CAST(NTF.DEMI AS DATE) AS DEMI 
FROM MOVIMENTO MOV
LEFT JOIN PRODUTO PRO ON(MOV.PROCODIGO = PRO.PROCODIGO)
LEFT JOIN TIPOMOVIMENTO TPM ON(MOV.TPMCODIGO = TPM.TPMCODIGO)
LEFT JOIN NFE NTF ON(MOV.INFNFE_ID = NTF.INFNFE_ID)
WHERE ((:TP_PESQUISA = 0) AND (:PROCODIGO = 0 OR MOV.PROCODIGO = :PROCODIGO)) OR
      ((:TP_PESQUISA = 1) AND (MOV.INFNFE_ID LIKE :NFE)) OR
      ((:TP_PESQUISA = 2) AND (MOV.MOVDATA BETWEEN :DT_INI AND :DT_FIM) AND (:PROCODIGO = 0 OR MOV.PROCODIGO = :PROCODIGO )) OR
      (:TP_PESQUISA = 999)
ORDER BY MOV.MOVDATA, MOV.MOVHORA


Já fiz configurações de charset na aplicação e no banco. Os formatos de data, hora, monetário, ponto flutuante e etc. estão formatados corretamente tbm...
Responder
Gente, resolvi o problema!

Fiz um SQLDataSet com a mesma pesquisa e retirei todas as Provider Flags de todos os campos do DataSet e os dados vieram corretamente. Provavelmente isso estava acontecendo por causa de uns Indexes que tenho na tabela no Firebird. Exportei esse banco para o SQL Server e deixei as configurações como no início(que não fncionava no Firebird) e funcionou normal... Então, creio que deve ter algum bug dos Indexes do Firebird com as Provider Flags...
Responder
×
+1 DevUP
Acesso diário, +1 DevUP
Parabéns, você está investindo na sua carreira