ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Comando Between retornando apenas 10 registros

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
dooux
Novato
Novato


Registrado: Terça-Feira, 2 de Junho de 2015
Mensagens: 22

MensagemEnviada: Sex Jan 19, 2018 1:19 pm    Assunto: Comando Between retornando apenas 10 registros Responder com Citação

Boa tarde galera!!

Estou com um probleminha com uma consulta, talvez alguém ja tenha passado pelo mesmo e possa me ajudar. Uso o firebird, e fazendo uma consulta entre datas ela só retorna dez registros sempre, porém no banco(uso SQL Lite) ele retorna correto, o problema é que tenho esse mesmo código, praticamente identico rodando em outra parte do sistema e funciona.
Alguém já passou por isso?

OBS: Uso uma função CovDataBanco que converte o formato da data para o formato do banco:
***************
Function CovDataBanco(Data:TDateTime):string;
Var
d,m,a: Word;
Begin
DecodeDate(Data, a,m,d);
Result := IntToStr(m) + '/' + IntToStr(d) + '/' + IntToStr(a);
End;
**************

Segue o código:
//*********************************************************

DataInicial := (frmConsultaLancamentos.maskedit1.Text);
DataFinal := (frmConsultaLancamentos.maskedit2.Text);
sSql := 'SELECT R.PLACA, R.DATA, R.ID_OPERADOR, R.HORAE, U.* FROM REIMPRESSAO R, USUARIOS U WHERE DATA BETWEEN ' + QuotedStr(CovDataBanco(StrToDate(DataInicial))) + ' AND ' + QuotedStr(CovDataBanco(StrToDate(DataFinal))) + ' AND R.ID_OPERADOR = U.ID_USUARIO ' + ' ORDER BY DATA';

Dm.ibqAuxiliar.Close;
Dm.ibqAuxiliar.SQL.Clear;
Dm.ibqAuxiliar.SQL.Text := sSql;
Dm.ibqAuxiliar.Open;
while not Dm.ibqAuxiliar.Eof do
Begin
with Dm.ibqAuxiliar DO
Begin
sTexto := FieldByName('PLACA').AsString);
sTexto := sTexto + ' ' + FieldByName('DATA').AsString);
sTexto := sTexto + ' ' + FieldByName('USU_NOME').AsString;
sTexto := sTexto + ' ' + FieldByName('HORAE').AsString;
AddRelatorio(sTexto);
Dm.ibqAuxiliar.Next;
End;
end;
AddRelatorio('-----------------------------------------');
AddRelatorio('TOTAL DE REIMPRESSÕES.......: ' +
IntToStr(Dm.ibqAuxiliar.RecordCount));

//********************************************

O estranho é que se uso o codigo no banco ele roda:

SELECT R.*, U.* FROM REIMPRESSAO R, USUARIOS U
WHERE DATA BETWEEN '01/01/2017' AND '01/19/2018' ORDER BY DATA

//******************************************

Alguém já passou por isso? :/
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Sex Jan 19, 2018 2:31 pm    Assunto: Responder com Citação

Boa tarde,

Acho que ficou um pouco confuso porque em um momento você disse que está utilizando o Firebird e em outro o SQL Lite, mas de qualquer forma experimente fazer uns testes utilizando parâmetros na query pois dessa forma não é necessário deixar a data em um formato específico:

Código:
sSql := 'SELECT R.PLACA, R.DATA, R.ID_OPERADOR, R.HORAE, U.* FROM REIMPRESSAO R ' +
        'INNER JOIN USUARIOS U ON R.ID_OPERADOR = U.ID_USUARIO ' +
        'WHERE DATA BETWEEN :DataInicial AND :DataFinal ' +
        'ORDER BY DATA';

Dm.ibqAuxiliar.Close;
Dm.ibqAuxiliar.SQL.Clear;
Dm.ibqAuxiliar.SQL.Text := sSql;
Dm.ibqAuxiliar.ParamByName('DataInicial').AsDate := StrToDate(DataInicial);
Dm.ibqAuxiliar.ParamByName('DataFinal').AsDate := StrToDate(DataFinal);
Dm.ibqAuxiliar.Open;


obs: não deve ter relação com a questão mas no código acima também está sendo utilizada a sintaxe com Join

Espero que ajude

_________________
Assinatura: https://www.imoveisemexposicao.com.br/imoveis-alugar-guarulhos!cumbica-comercial_ou_industrial-galpão
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
dooux
Novato
Novato


Registrado: Terça-Feira, 2 de Junho de 2015
Mensagens: 22

MensagemEnviada: Sex Jan 19, 2018 7:52 pm    Assunto: Responder com Citação

Oi amigo, o SQL Lite é apenas um programa de gerenciamento de BD, tipo o IB Expert, quando executo o comando nos dois da certo, o banco é Firebird mesmo.

Já tinha tentado dessa forma que voce colocou acima, não deu certo tbm. :/

Obrigado por responder.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Seg Jan 22, 2018 8:52 am    Assunto: Responder com Citação

Você testou a query direto no BD da forma que segue abaixo?

Código:
SELECT R.PLACA, R.DATA, R.ID_OPERADOR, R.HORAE, U.*
FROM REIMPRESSAO R
INNER JOIN USUARIOS U ON R.ID_OPERADOR = U.ID_USUARIO
WHERE DATA BETWEEN '01/01/2017' AND '01/19/2018'
ORDER BY DATA


Reparei que a query que você disse que testou direto no BD está sem o filtro para relacionar os registros da tabela REIMPRESSAO com os da USUARIOS.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
dooux
Novato
Novato


Registrado: Terça-Feira, 2 de Junho de 2015
Mensagens: 22

MensagemEnviada: Ter Jan 23, 2018 10:01 pm    Assunto: RESOLVIDO Responder com Citação

Boa noite,
Desculpe a demora, estive fora uns dias.

Oi imex, cara muito obrigado, usando seu código resolveu.

Tinha esquecido esse pequeno detalhe. Wink

Muito obrigado mesmo, a vc e a todos que responderam.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB