Fórum Consultar entre datas - c/ data vazia #278710

25/04/2005

0

Olá a todos amigos Delphianos.
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

Neto

Responder

Posts

25/04/2005

Rafael Santana

Cara, o teu código, aparentemente, está correto.
verifique se no local onde vc colocou IF EdtEntIni.Text = ´ / / ´

COLOQUE A MESMA QUANTIDADE DE ESPAÇOS DE DATA, ou seja, ´ / / ´


Responder

Gostei + 0

25/04/2005

Neto

Oi Rafael, obrigado pelo interesse em ajudar.
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


Responder

Gostei + 0

25/04/2005

Neto

Preciso de mais alguma dica, para este problema.
Alguem se dispõe? Agradeço muito.
Abraços
Neto


Responder

Gostei + 0

25/04/2005

Edilcimar

se a data no piradox estiver vazia ele não conterá ´ / / ´ ela está limpa


Responder

Gostei + 0

25/04/2005

Neto

Estou testando ´ / / ´, no MaskEdit, não na montagem da SQL.
O Problema paresse ser outro.
Vamos lá, mais dicas por favor.
Neto


Responder

Gostei + 0

25/04/2005

Neto

Amigos por favor ajudem-me, nesse caso
Obrigado
Neto


Responder

Gostei + 0

25/04/2005

Daniel_mc

Olha só companheiro, já aconteceu isto comigo e o que me parece é que como o Rafael disse voce deve estar usando espaços de menos. Porque quando o maskedit está sem entrada, ou sej vazio, na verdade ele contem a String ´ / / ´(são 2 espaços/2 espaços/2 espaços). Testa ai camarada!

ai na hora de compara é o seguinte

If MaskEdit1.text <>´  /  /  ´ then...



Responder

Gostei + 0

25/04/2005

Rjun

A primeira coisa que você devia fazer, era dar uma arrumada nesse código :


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 :

1 - Sql.Clear; 2 - Active := False; 3 - Close; 4 - Sql.Clear;


Linhas 1 e 4 fazem a mesma coisa
Linhas 2 e 3. Ou você usa Active := False ou usa Close;

Mesma coisa aqui

Active := True; Open;


Ou usa Active := True ou usa open.


Responder

Gostei + 0

25/04/2005

Rjun

Corrigindo o código acima.

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; 



Responder

Gostei + 0

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

Aceitar