Consulta em 2 Campos DATE

Delphi

07/08/2014

Olá pessoal, Boa noite.


Estou com uma dúvida e bronca que não consigo resolver, sou iniciante em programação, mexo apenas com delphi e pouquíssimos em outras linguagens, enfim, vamos lá.

Meu problema é o seguinte, fiz um programa para uma clínica médica, bem básico, marca consulta, retorno, imprimi prontuário, exames, etc, o programa já está sendo usado, só que estou fazendo uma atualização e estou com problemas para desenvolver, é o seguinte.

Na minha aba relatório, tenho uma função que pega os dados das consultas que estão marcadas e imprimi para o médico ter em mãos as consultas, o recepcionista seleciona pela data desejada (ATUAL) e o sistema busca as consultas normais pela data desejada, enfim, dentro da minha tabela "Marcar_consultas" existe um campo chamado "data" que pelo comando sql faço essa busca, só que nesta mesma tabela "marcar_consultas" existe um campo chamado "data_retorno" que é os pacientes que já vieram de uma consulta, estão em um retorno, então o problema é que eu consiga fazer meu código buscar pelos 2 campos, não só por um. Irei mandar aqui como está meu código.

begin
if CheckBox3.Checked = true then // pesquisa por data
begin// faz a pesquisa pela data solicitada
ADOQuery1_Consultas_Marcadas.Close;
ADOQuery1_Consultas_Marcadas.SQL.Clear;
ADOQuery1_Consultas_Marcadas.SQL.Add(' Select *');
ADOQuery1_Consultas_Marcadas.SQL.Add(' From marcar_consultas where data between :h1 and :h2');
ADOQuery1_Consultas_Marcadas.SQL.Add ('and Nome_Convenio like ' + quotedstr('%' +edit5.Text+'%')); // pesquisa por conv
ADOQuery1_Consultas_Marcadas.SQL.Add ('and Nome like ' + quotedstr('%' +edit4.Text+'%')); // pesquisa por conv
ADOQuery1_Consultas_Marcadas.SQL.Add ('and `Consulta/Retorno` like ' + quotedstr('%' +edit8.Text+'%')); // consulta retorno ou fechada
ADOQuery1_Consultas_Marcadas.SQL.Add ('and `Consulta/Retorno` like ' + quotedstr('%' +edit9.Text+'%')); // consulta retorno ou fechada
ADOQuery1_Consultas_Marcadas.SQL.Add ('ORDER BY hora ASC');
ADOQuery1_Consultas_Marcadas.Parameters[0].Value:=ConverteData(DateTimePicker3.DateTime);
ADOQuery1_Consultas_Marcadas.Parameters[1].Value:=ConverteData(DateTimePicker4.DateTime);

ADOQuery1_Consultas_Marcadas.open;
end;


////////////////////////////////////////////////////////////

begin
if CheckBox10.Checked = true then // pesquisa por data_retorno
begin// faz a pesquisa pela data solicitada
//if (Edit1.Text<>'') and(Edit4.Text<>'')then
ADOQuery1_Consultas_Marcadas.Close;
ADOQuery1_Consultas_Marcadas.SQL.Clear;
ADOQuery1_Consultas_Marcadas.SQL.Add(' Select *');
ADOQuery1_Consultas_Marcadas.SQL.Add(' From marcar_consultas where data_retorno between :h1 and :h2');
ADOQuery1_Consultas_Marcadas.SQL.Add ('and Nome_Convenio like ' + quotedstr('%' +edit5.Text+'%')); // pesquisa por conv
ADOQuery1_Consultas_Marcadas.SQL.Add ('and Nome like ' + quotedstr('%' +edit4.Text+'%')); // pesquisa por conv
ADOQuery1_Consultas_Marcadas.SQL.Add ('and `Consulta/Retorno` like ' + quotedstr('%' +edit8.Text+'%')); // consulta retorno ou fechada
ADOQuery1_Consultas_Marcadas.SQL.Add ('and `Consulta/Retorno` like ' + quotedstr('%' +edit9.Text+'%')); // consulta retorno ou fechada
ADOQuery1_Consultas_Marcadas.SQL.Add ('ORDER BY hora_retorno ASC');
ADOQuery1_Consultas_Marcadas.Parameters[0].Value:=ConverteData(DateTimePicker3.DateTime);
ADOQuery1_Consultas_Marcadas.Parameters[1].Value:=ConverteData(DateTimePicker4.DateTime);
ADOQuery1_Consultas_Marcadas.open;
end;


Será que alguém pode me ajudar? queria que ao invés de ter dois checkbox pra ele escolher uma por vez, ter data e data_retorno na mesma pesquisa por data.

OBS: Este código está funcionando perfeitamente, só precisando destes ajustes rs!

Obrigado desde já.


Felipe Campos,
Felipe Campos

Felipe Campos

Curtidas 0

Respostas

Felipe Campos

Felipe Campos

07/08/2014

Alguém????
GOSTEI 0
Felipe Campos

Felipe Campos

07/08/2014

Alguém que possa ajudar?
GOSTEI 0
Marcos Saffran

Marcos Saffran

07/08/2014

Olá Felipe,
se entendi bem, tendo apenas um checkbox você verificará se ele está marcado ou não:
ADOQuery1_Consultas_Marcadas.Close;
ADOQuery1_Consultas_Marcadas.SQL.Clear;
ADOQuery1_Consultas_Marcadas.SQL.Add(' Select *');
if CheckBox3.Checked = true then // pesquisa por data (checkbox marcado)
  ADOQuery1_Consultas_Marcadas.SQL.Add(' From marcar_consultas where data between :h1 and :h2')
else // checkbox desmarcado
  ADOQuery1_Consultas_Marcadas.SQL.Add(' From marcar_consultas where data_retorno between :h1 and :h2');
ADOQuery1_Consultas_Marcadas.SQL.Add ('and Nome_Convenio like ' + quotedstr('%' +edit5.Text+'%')); // pesquisa por conv
ADOQuery1_Consultas_Marcadas.SQL.Add ('and Nome like ' + quotedstr('%' +edit4.Text+'%')); // pesquisa por conv
ADOQuery1_Consultas_Marcadas.SQL.Add ('and `Consulta/Retorno` like ' + quotedstr('%' +edit8.Text+'%')); // consulta retorno ou fechada
ADOQuery1_Consultas_Marcadas.SQL.Add ('and `Consulta/Retorno` like ' + quotedstr('%' +edit9.Text+'%')); // consulta retorno ou fechada
ADOQuery1_Consultas_Marcadas.SQL.Add ('ORDER BY hora ASC');
ADOQuery1_Consultas_Marcadas.Parameters[0].Value:=ConverteData(DateTimePicker3.DateTime);
ADOQuery1_Consultas_Marcadas.Parameters[1].Value:=ConverteData(DateTimePicker4.DateTime);

ADOQuery1_Consultas_Marcadas.open;
GOSTEI 0
Felipe Campos

Felipe Campos

07/08/2014

Olá Felipe,
se entendi bem, tendo apenas um checkbox você verificará se ele está marcado ou não:
ADOQuery1_Consultas_Marcadas.Close;
ADOQuery1_Consultas_Marcadas.SQL.Clear;
ADOQuery1_Consultas_Marcadas.SQL.Add(' Select *');
if CheckBox3.Checked = true then // pesquisa por data (checkbox marcado)
  ADOQuery1_Consultas_Marcadas.SQL.Add(' From marcar_consultas where data between :h1 and :h2')
else // checkbox desmarcado
  ADOQuery1_Consultas_Marcadas.SQL.Add(' From marcar_consultas where data_retorno between :h1 and :h2');
ADOQuery1_Consultas_Marcadas.SQL.Add ('and Nome_Convenio like ' + quotedstr('%' +edit5.Text+'%')); // pesquisa por conv
ADOQuery1_Consultas_Marcadas.SQL.Add ('and Nome like ' + quotedstr('%' +edit4.Text+'%')); // pesquisa por conv
ADOQuery1_Consultas_Marcadas.SQL.Add ('and `Consulta/Retorno` like ' + quotedstr('%' +edit8.Text+'%')); // consulta retorno ou fechada
ADOQuery1_Consultas_Marcadas.SQL.Add ('and `Consulta/Retorno` like ' + quotedstr('%' +edit9.Text+'%')); // consulta retorno ou fechada
ADOQuery1_Consultas_Marcadas.SQL.Add ('ORDER BY hora ASC');
ADOQuery1_Consultas_Marcadas.Parameters[0].Value:=ConverteData(DateTimePicker3.DateTime);
ADOQuery1_Consultas_Marcadas.Parameters[1].Value:=ConverteData(DateTimePicker4.DateTime);

ADOQuery1_Consultas_Marcadas.open;



Olá, obrigado pela resposta, mas desse jeito não é do jeito que eu preciso, desse jeito que fizeste ele vai procurar um campo ou outro, eu quero que quando eu seleciono a data ele percorra os 2 campos "data" e "data_retorno" e ache na pesquisa resultados dos registro dos dois CAMPOS.

Abraço,
GOSTEI 0
Marcos Saffran

Marcos Saffran

07/08/2014

Nesse caso tente o seguinte:
ADOQuery1_Consultas_Marcadas.SQL.Add(' From marcar_consultas where data between :h1 and :h2 and data_retorno between :h3 and :h4')
GOSTEI 0
Felipe Campos

Felipe Campos

07/08/2014

Pessoal, Obrigado pela força, eu consegui fazer funcionar desta forma, tive que adicionar mais 2 parâmetros. Segue:

begin
//if (CheckBox3.Checked = true) // pesquisa por data
if (CheckBox3.Checked = true) then // pesquisa por data_retorno
begin// faz a pesquisa pela data solicitada
ADOQuery1_Consultas_Marcadas.Close;
ADOQuery1_Consultas_Marcadas.SQL.Clear;
ADOQuery1_Consultas_Marcadas.SQL.Add(' Select *');
ADOQuery1_Consultas_Marcadas.SQL.Add(' From marcar_consultas where ((data between :h1 and :h2) or (data_retorno between :h3 and :h4))');
ADOQuery1_Consultas_Marcadas.SQL.Add ('and Nome_Convenio like ' + quotedstr('%' +edit5.Text+'%')); // pesquisa por conv
ADOQuery1_Consultas_Marcadas.SQL.Add ('and Nome like ' + quotedstr('%' +edit4.Text+'%')); // pesquisa por conv
ADOQuery1_Consultas_Marcadas.SQL.Add ('and `Consulta/Retorno` like ' + quotedstr('%' +edit8.Text+'%')); // consulta retorno ou fechada
ADOQuery1_Consultas_Marcadas.SQL.Add ('and `Consulta/Retorno` like ' + quotedstr('%' +edit9.Text+'%')); // consulta retorno ou fechada
ADOQuery1_Consultas_Marcadas.SQL.Add ('ORDER BY hora ASC');
ADOQuery1_Consultas_Marcadas.Parameters[0].Value:=ConverteData(DateTimePicker3.DateTime);
ADOQuery1_Consultas_Marcadas.Parameters[1].Value:=ConverteData(DateTimePicker4.DateTime);
ADOQuery1_Consultas_Marcadas.Parameters[2].Value:=ConverteData(DateTimePicker3.DateTime);
ADOQuery1_Consultas_Marcadas.Parameters[3].Value:=ConverteData(DateTimePicker4.DateTime);

ADOQuery1_Consultas_Marcadas.open;
end;


mesmo assim, obrigado pela força meus queridos, estou postando a solução para caso alguém tenha o mesmo problema,


RESOLVIDO!!!!!!!


Obrigado!!!
GOSTEI 0
Felipe Campos

Felipe Campos

07/08/2014

Tenho outra dúvida pessoal, ao ordenar por ASC meus 2 campos, hora e hora_retorno, o campo hora_retorno é um campo NULL, então quando o registro fica sem nada, ele ordena esse campo por primeiro, teria como deixar este campo sempre por ultimo?? Obrigado.
GOSTEI 0
POSTAR