Pesquisa retornando poucos registros
22/01/2013
0
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...
Felipe Menegossi
Posts
22/01/2013
Douglas
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.
22/01/2013
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 =/
23/01/2013
Douglas
Mas tenta mudar a fonte do banco também para este padrão.
Ansi_Charset.
23/01/2013
Rodolpho Silva
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.
23/01/2013
Jose Medeiros
Acho que para podermos ajudar melhor, seria interessante você postar o código que está usando nessa consulta.
23/01/2013
Felipe Menegossi
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...
27/01/2013
Felipe Menegossi
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...
Clique aqui para fazer login e interagir na Comunidade :)