pesquisa por datas e depois filtrar por nome

24/10/2017

0

Boa Tarde,
Estou com uma duvida e gostaria da ajuda de vocês.
Tenho dois campos na minha tabela, Cliente(varchar) e data inicial e data final(date), como faço para fazer uma pesquisa por exemplo entre datas e de depois pelo nome do cliente.

Desde já agradeço!
Júnior Brito

Júnior Brito

Responder

Posts

24/10/2017

Julio Costa

ENTRE DATAS

SELECT * FROM TABELA
WHERE data BETWEEN '2017-10-01' AND '2017-10-24'

POR CLIENTE

SELECT * FROM TABELA
WHERE cliente='julio';
Responder

24/10/2017

Ismael Sousa

SELECT *
FROM cliente AS c
WHERE c.datacriacao BETWEEN '01/01/2017' AND '31/01/2017'
AND c.nome LIKE ('%nome%')
Responder

24/10/2017

Júnior Brito

Tenho esse código para realizar a pesquisa entre datas, mas preciso fazer a busca pelo nome. Nesse caso abaixo pesquisa somente pela data.

procedure TfrmModelo.btnpesquisarClick(Sender: TObject);
begin
with dm.CDSPROPOSTA do
  begin

    close;
  FetchParams;

  Params.ParamByName('DATAINI').AsDate:=dtpInicial.Date;
   Params.ParamByName('DATAFIM').AsDate:=dtpFinal.Date;

  Open;

  end;
 if (cbxField.Text <> EmptyStr) and
    (edtValor.Text <> EmptyStr)   then
     begin


       ds.DataSet.Filter := 'Upper('+ Ds.DataSet.Fields[ListaField[cbxField.ItemIndex]].FieldName  +') like  '+QuotedStr(UpperCase(edtValor.Text)+'%');
       ds.DataSet.filtered := true;
       if not ds.dataset.Active then
       ds.DataSet.Open;
     end;


     end;
Responder

24/10/2017

Júnior Brito

O select no TSLQDataSet esta assim gostaria de procurar por data ou por nome desse jeito esta pesquisando somente a data, ignorando a pesquisa por cliente por exemplo:

select
ASSOCIADO,
CPF_CNPJ,
DEV_ANALISTA,
DIAS_ANALISTA,
DIAS_GERENTE,
DIAS_VOTE,
DT_FORM,
DT_VOTE,
DTFIN_ANALISTA,
DTFIN_GERENTE,
DTFIN_VOT,
DTIN_ANALISTA,
DTIN_GERENTE,
FERIADO,
HORA_ANALISTA,
HORAFIN_GERENTE,
HORAS_GERENTE,
HORAS_VOTE,
HR_FORM,
HR_VOTE,
HRFIN_ANALISTA,
HRFIN_VOT,
HRIN_ANALISTA,
HRIN_GERENTE,
MODALIDADE,
MOT_ANALISTA,
NIVEL_PRO_GERENTE,
NR_PROPOSTA,
OBS_FORM,
PA,
PROPOSTA_CRL,
PROPOSTA_ID,
STATUS_ANALISTA,
STATUS_VOTE,
USU_ANALISTA,
USU_FORM,
USU_GERENTE,
USU_VOTE,
PRODUTIVIDADE_ANALI,
PRODUTIVIDADE_GER,
PRODUTIVIDADE_VOT,
PRODUTIVIDADE_ANALI_DIAS,
PRODUTIVIDADE_GER_DIAS,
PRODUTIVIDADE_VOT_DIAS,
VOT_DT2,
VOT_DT3,
VOT_DT4,
VOT_DT5,
VOT_DT6,
VOT_DT7,
VOT_DT8,
VOT_DT9,
VOT_HORA2,
VOT_HORA3,
VOT_HORA4,
VOT_HORA5,
VOT_HORA6,
VOT_HORA7,
VOT_HORA8,
VOT_HORA9,
VOT_STATUS2,
VOT_STATUS3,
VOT_STATUS4,
VOT_STATUS5,
VOT_STATUS6,
VOT_STATUS7,
VOT_STATUS8,
VOT_STATUS9,
VOT_USU2,
VOT_USU3,
VOT_USU4,
VOT_USU5,
VOT_USU6,
VOT_USU7,
VOT_USU8,
VOT_USU9,
VALOR FROM PROPOSTAS WHERE DTIN_GERENTE BETWEEN :DATAINI AND :DATAFIM
Responder

25/10/2017

Natanael Ferreira

Faça um teste alterando a cláusula Where do seu SQL para:
WHERE(ASSOCIADO LIKE: NOME) OR (DTIN_GERENTE BETWEEN: DATAINI AND : DATAFIM)

E o seu botão de pesquisas para:
 with dm.CDSPROPOSTA do
  begin
    close;
    FetchParams;
    Params.ParamByName('NOME').AsDate := '%' + Edit1.Text + '%';
    Params.ParamByName('DATAINI').AsDate := dtpInicial.Date;
    Params.ParamByName('DATAFIM').AsDate := dtpFinal.Date;
    Open;
  end;

  if (cbxField.Text <> EmptyStr) and (edtValor.Text <> EmptyStr) then
  begin
    ds.DataSet.Filter := 'Upper(' + ds.DataSet.Fields[ListaField[cbxField.ItemIndex]].FieldName +
      ') like  ' + QuotedStr(UpperCase(edtValor.Text) + '%');
    ds.DataSet.filtered := true;
    if not ds.DataSet.Active then
      ds.DataSet.Open;
  end;
Responder

25/10/2017

Natanael Ferreira

Depois que postei, vi alguns erros. Altere para:
WHERE (ASSOCIADO LIKE: NOME) OR (DTIN_GERENTE BETWEEN: DATAINI AND : DATAFIM)

with dm.CDSPROPOSTA do
  begin
    close;
    FetchParams;
    Params.ParamByName('NOME').AsString := '%' + Edit1.Text + '%';
    Params.ParamByName('DATAINI').AsDate := dtpInicial.Date;
    Params.ParamByName('DATAFIM').AsDate := dtpFinal.Date;
    Open;
  end;

  if (cbxField.Text <> EmptyStr) and (edtValor.Text <> EmptyStr) then
  begin
    ds.DataSet.Filter := 'Upper(' + ds.DataSet.Fields[ListaField[cbxField.ItemIndex]].FieldName +
      ') like  ' + QuotedStr(UpperCase(edtValor.Text) + '%');
    ds.DataSet.filtered := true;
    if not ds.DataSet.Active then
      ds.DataSet.Open;
  end;
Responder

25/10/2017

Júnior Brito

Valeu, me ajudou muito.
Como são dois tipos de busca como eu faço para atualizar.
O que acontece agora é quando faço a busca pela data ex: 01/10/2017 a 10/10/2017 ele traz o resultado normal, porem ao tentar realizar uma nova pesquisa ele me retorna os dados da pesquisa feita anteriormente não atualiza.
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar