 |
ActiveDelphi .: O site do programador Delphi! :.
|
| Exibir mensagem anterior :: Exibir próxima mensagem |
| Autor |
Mensagem |
dooux Novato

Registrado: Terça-Feira, 2 de Junho de 2015 Mensagens: 22
|
Enviada: Sex Jan 19, 2018 1:19 pm Assunto: Comando Between retornando apenas 10 registros |
|
|
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 |
|
 |
imex Moderador

Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Sex Jan 19, 2018 2:31 pm Assunto: |
|
|
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 |
|
 |
dooux Novato

Registrado: Terça-Feira, 2 de Junho de 2015 Mensagens: 22
|
Enviada: Sex Jan 19, 2018 7:52 pm Assunto: |
|
|
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 |
|
 |
imex Moderador

Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Seg Jan 22, 2018 8:52 am Assunto: |
|
|
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 |
|
 |
dooux Novato

Registrado: Terça-Feira, 2 de Junho de 2015 Mensagens: 22
|
Enviada: Ter Jan 23, 2018 10:01 pm Assunto: RESOLVIDO |
|
|
Boa noite,
Desculpe a demora, estive fora uns dias.
Oi imex, cara muito obrigado, usando seu código resolveu.
Tinha esquecido esse pequeno detalhe.
Muito obrigado mesmo, a vc e a todos que responderam. |
|
| Voltar ao Topo |
|
 |
|
|
Enviar Mensagens Novas: Proibido. Responder Tópicos Proibido Editar Mensagens: Proibido. Excluir Mensagens: Proibido. Votar em Enquetes: Proibido.
|
|