Fórum Consultar entre datas - c/ data vazia #278710
25/04/2005
0
Uso Delphi 6 com Paradox. Na entrada de dados ( Cadastro ) uso DBEdit. No DataModule defini o MaskEdit do Campo Data como !99/99/0000;1;_ .
Estou com problemas para montar uma SQL envolvendo campo data quando está em branco (vazia). Fiz diversas pesquisas no Fórum mas um problema ainda existe.
Preciso listar pedidos não entregues ( data inicial esta vazia ) ou pedidos entregues em determinado período ( data inicial pode ou não estar preenchida e data final preenchida ).
Na tela do programa que seleciono os período faço:
Nro. Pedido: Ped_Ini a Ped_Fim // intervalo de nro. de pedidos
Dt. Entregua: EntIni a EntFim // intervalo de datas - MaskEdit
Abaixo está o código que estou usando para listar os pedidos desejados, mas quando data inicial está vazia ele não encherga.
Muito obrigado a todos
Neto
With Query1 do
Begin
Sql.Clear;
Active := False;
Close;
Sql.Clear;
Sql.Add(´SELECT * FROM CadPed A´);
Sql.Add(´WHERE A.Ped_Cod >= :CodIni and A.Ped_Cod <= :CodFim´);
// Data de Entrega
If EdtEntIni.Text = ´ / / ´ then // Data de Entrega
Begin
Sql.Add(´And A.Ped_DtEntrega <= :EntFim´);
End
else
Sql.Add(´And A.Ped_DtEntrega BetWeen :EntIni And :EntFim´);
// Passagem de parametros
ParamByName(´CodIni´).AsString := FrR0220.EdtCodIni.Text;
ParamByName(´CodFim´).AsString := FrR0220.EdtCodFim.Text;
If EdtEntIni.Text = ´ / / ´ then // Data de entrega prevista
Begin
ParamByName(´EntFim´).Value := StrToDate(EdtEntFim.Text);
end
else
Begin
ParamByName(´EntIni´).Value := StrToDate(EdtEntIni.Text);
ParamByName(´EntFim´).Value := StrToDate(EdtEntFim.Text);
end;
Active := True;
Open;
End;
Neto
Curtir tópico
+ 0Posts
25/04/2005
Rafael Santana
verifique se no local onde vc colocou IF EdtEntIni.Text = ´ / / ´
COLOQUE A MESMA QUANTIDADE DE ESPAÇOS DE DATA, ou seja, ´ / / ´
Gostei + 0
25/04/2005
Neto
Quando executo a aplicação vou acompanhando com o Debugador (F7).
Percebo que ele entra corretamente na intrução que preve que a data inicial está vazia.
O problema talves não seja este poque ele passa na rotina (If..) corretamente, mas o danado não retorna os registros com data vazia.
Onde será o furo
Abraços
Neto
Gostei + 0
25/04/2005
Neto
Alguem se dispõe? Agradeço muito.
Abraços
Neto
Gostei + 0
25/04/2005
Edilcimar
Gostei + 0
25/04/2005
Neto
O Problema paresse ser outro.
Vamos lá, mais dicas por favor.
Neto
Gostei + 0
25/04/2005
Neto
Obrigado
Neto
Gostei + 0
25/04/2005
Daniel_mc
ai na hora de compara é o seguinte
If MaskEdit1.text <>´ / / ´ then...
Gostei + 0
25/04/2005
Rjun
Query1.Sql.Clear; Query1.Active := False; Query1.Sql.Add(´Select * From CadPed A´); Query1.Sql.Add(´Where A.Ped_Cod Between :CodIni And :CodFim´); // Passa parâmetros de código ParamByName(´CodIni´).AsString := FrR0220.EdtCodIni.Text; ParamByName(´CodFim´).AsString := FrR0220.EdtCodFim.Text; // Data de Entrega if EdtEntIni.Text = ´ / / ´ then begin Sql.Add(´And A.Ped_DtEntrega <= :EntFim´); ParamByName(´EntFim´).Value := StrToDate(EdtEntFim.Text); end else begin Sql.Add(´And A.Ped_DtEntrega BetWeen :EntIni And :EntFim´); ParamByName(´EntIni´).Value := StrToDate(EdtEntIni.Text); ParamByName(´EntFim´).Value := StrToDate(EdtEntFim.Text); end; Query1.Active := True;
Considerações :
Linhas 1 e 4 fazem a mesma coisa
Linhas 2 e 3. Ou você usa Active := False ou usa Close;
Mesma coisa aqui
Ou usa Active := True ou usa open.
Gostei + 0
25/04/2005
Rjun
Query1.Active := False; Query1.Sql.Clear; Query1.Sql.Add(´Select * From CadPed A´); Query1.Sql.Add(´Where A.Ped_Cod Between :CodIni And :CodFim´); // Passa parâmetros de código Query1.ParamByName(´CodIni´).AsString := FrR0220.EdtCodIni.Text; Query1.ParamByName(´CodFim´).AsString := FrR0220.EdtCodFim.Text; // Verifica se data inicial esta em branco if (EdtEntIni.Text = ´ / / ´) then begin Query1.Sql.Add(´And A.Ped_DtEntrega <= :EntFim´); Query1.ParamByName(´EntFim´).Value := StrToDate(EdtEntFim.Text); end else begin Query1.Sql.Add(´And A.Ped_DtEntrega BetWeen :EntIni And :EntFim´); Query1.ParamByName(´EntIni´).Value := StrToDate(EdtEntIni.Text); Query1.ParamByName(´EntFim´).Value := StrToDate(EdtEntFim.Text); end; Query1.Active := True;
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)