Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

felipeecampos

Consulta em 2 campos DATE MYSQL

Recommended Posts

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,

 

 

Alguém????

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo, duas coisas.... primeiro, isto é um fórum, não um serviço de help desk onde você faz uma pergunta e terá resposta imediatamente.... pega mal você se cadastrar no fórum ontem, postar uma dúvida e ficar cobrando uma solução no dia seguinte como se estivesse PAGANDO POR ISSO... <_<

 

Segundo, seu problema não tem nada haver com delphi, é um problema de não saber usar SQL ... pelo que vejo, você tem dois campos de data (data e data_retorno) que quer usar no mesmo filtro SQL .... para pesquisar nos dois ao mesmo tempo, tudo o que precisaria é usar o OR. Como não tenho como testar, acredito que o sql ficaria +/- assim:

 

 

begin
    if (CheckBox3.Checked = true)        // pesquisa por data
    or (CheckBox10.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);
        //Nesse caso precisará incluir mais dois parâmetros
        ADOQuery1_Consultas_Marcadas.Parameters[2].Value:=ConverteData(DateTimePicker3.DateTime);
        ADOQuery1_Consultas_Marcadas.Parameters[3].Value:=ConverteData(DateTimePicker4.DateTime);

        ADOQuery1_Consultas_Marcadas.open;
    end;
    <...>
end;

 

Uma dica: padronize seu código.... use nome nos componentes que facilitem você saber o que é ele sem ter que olhar em tela (exemplo: chkPesqDataRetorno ao invés de CheckBox10)... tornará sua vida bem mais fácil para programar e dar manutenção no futuro. :sleep:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo, duas coisas.... primeiro, isto é um fórum, não um serviço de help desk onde você faz uma pergunta e terá resposta imediatamente.... pega mal você se cadastrar no fórum ontem, postar uma dúvida e ficar cobrando uma solução no dia seguinte como se estivesse PAGANDO POR ISSO... <_<

 

Segundo, seu problema não tem nada haver com delphi, é um problema de não saber usar SQL ... pelo que vejo, você tem dois campos de data (data e data_retorno) que quer usar no mesmo filtro SQL .... para pesquisar nos dois ao mesmo tempo, tudo o que precisaria é usar o OR. Como não tenho como testar, acredito que o sql ficaria +/- assim:

begin
    if (CheckBox3.Checked = true)        // pesquisa por data
    or (CheckBox10.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);
        //Nesse caso precisará incluir mais dois parâmetros
        ADOQuery1_Consultas_Marcadas.Parameters[2].Value:=ConverteData(DateTimePicker3.DateTime);
        ADOQuery1_Consultas_Marcadas.Parameters[3].Value:=ConverteData(DateTimePicker4.DateTime);

        ADOQuery1_Consultas_Marcadas.open;
    end;
    <...>
end;

Uma dica: padronize seu código.... use nome nos componentes que facilitem você saber o que é ele sem ter que olhar em tela (exemplo: chkPesqDataRetorno ao invés de CheckBox10)... tornará sua vida bem mais fácil para programar e dar manutenção no futuro. :sleep:

 

Meu amigo, peço desculpas pelo dois erros que cometi, realmente sem justificativa, enfim. Venho lhe agradecer que o código que me passaste não está +/- correto, está CORRETÍSSIMO, funcionou perfeitamente, agora só estou dando uma ajeitada pra ficar do jeito que eu quero, mas o filtro em si, ficou ótimo, obrigado pelas dicas também.

 

 

Obrigado.

 

 

 

RESOLVIDO!!!!!!!!!!!!!!!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Chrnos, tenho outra dúvida, 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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.