Arama sırasında otomatik tarih artırma

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
dogan
Üye
Mesajlar: 173
Kayıt: 17 Eki 2014 10:11

Arama sırasında otomatik tarih artırma

Mesaj gönderen dogan »

Merhaba.

İki tarih arasında arama işlemi yapıyorum, 01.05.2015 ve 02.05.2015 kayıt bulunamaz ise bu tarihleri birer gün ve 30 gün boyunca nasıl artıra bilirim.

Kod: Tümünü seç

        
        begin
          Urunler.Close;
          Urunler.SQL.Clear;
          Urunler.SQL.Add('SELECT * FROM URUN');
          Urunler.SQL.Add('Where URUNADIADI');
          Urunler.SQL.Add('And TARIH BETWEEN :Tarih1 And :Tarih2 Order By ID');
          Urunler.ParamByName('Tarih1').AsDate := StrToDate('01.05.2015');
          Urunler.ParamByName('Tarih2').AsDate := StrToDate('02.05.2015');
          Urunler.Prepared := True;
          Urunler.Open;
          if Not IsEmpty then
          begin

          end
          else
          begin

          end;
          [url][/url]
Kullanıcı avatarı
SimaWB
Üye
Mesajlar: 1316
Kayıt: 07 May 2009 10:42
Konum: İstanbul
İletişim:

Re: Arama sırasında otomatik tarih artırma

Mesaj gönderen SimaWB »

IncDay fonksiyonu verilen tarihin bir gün ilerisini döndürür(Yada 2. parametresi kullanılarak istenilen gün kadar sonrasını).
30 gün için yapılacaksa, 1'den 30'a kadar bir döngü ile IncDay kullanılarak çözülebilir.
There's no place like 127.0.0.1
Kullanıcı avatarı
dogan
Üye
Mesajlar: 173
Kayıt: 17 Eki 2014 10:11

Re: Arama sırasında otomatik tarih artırma

Mesaj gönderen dogan »

SimaWB yazdı:IncDay fonksiyonu verilen tarihin bir gün ilerisini döndürür(Yada 2. parametresi kullanılarak istenilen gün kadar sonrasını).
30 gün için yapılacaksa, 1'den 30'a kadar bir döngü ile IncDay kullanılarak çözülebilir.

Hocam bilgi için teşekkür ederim;

IncDay araştırdım, tarzınız değil biliyorum ama ben şansımı deneyeceğim :mrgreen: takıldığım nokta döngü, 30 gün kurgu konusunda yardımcı olabilirseniz sevinirim...
Kullanıcı avatarı
SimaWB
Üye
Mesajlar: 1316
Kayıt: 07 May 2009 10:42
Konum: İstanbul
İletişim:

Re: Arama sırasında otomatik tarih artırma

Mesaj gönderen SimaWB »

30 günle ilgili sıkıntıyı anlayamadım?

Kod: Tümünü seç

IncDay(Tarih, 2); IncDay(Tarih, 3); ..... IncDay(Tarih, 30);
şeklinde bir döngü içinde çalıştırsanız olmaz mı?
There's no place like 127.0.0.1
Kullanıcı avatarı
dogan
Üye
Mesajlar: 173
Kayıt: 17 Eki 2014 10:11

Re: Arama sırasında otomatik tarih artırma

Mesaj gönderen dogan »

SimaWB yazdı:30 günle ilgili sıkıntıyı anlayamadım?

Kod: Tümünü seç

IncDay(Tarih, 2); IncDay(Tarih, 3); ..... IncDay(Tarih, 30);
şeklinde bir döngü içinde çalıştırsanız olmaz mı?

Sorunda döngü zaten bu döngüyü kuramadım :D
Kullanıcı avatarı
esistem
Üye
Mesajlar: 464
Kayıt: 02 Eki 2007 11:22
İletişim:

Re: Arama sırasında otomatik tarih artırma

Mesaj gönderen esistem »

Kod: Tümünü seç

var
x:integer;
begin
for x:=1 to 30 do begin
incday(tarih,x);
end;
end;
Kullanıcı avatarı
xozcanx
Üye
Mesajlar: 362
Kayıt: 05 Oca 2012 12:55

Re: Arama sırasında otomatik tarih artırma

Mesaj gönderen xozcanx »

Hocam Sonuç veriyor. Daha kısa bir yolu vardır belki ama benim ilk aklıma gelen yöntem bu oldu
Tarih1.Date =TDateTimePicker nesnesidir

Kod: Tümünü seç

var
 SAY :integer;
procedure TForm2.Button1Click(Sender: TObject);
  procedure Sorgula(tarih:TDate);
  var sorgu :String;
  Begin
    with IBQuery1 do
    Try
      if Active then Close;
      SQL.Clear;
      SQL.Add('Select * From AAAA  Where TARIH='+QuotedStr(FormatDateTime('yyyy-mm-dd',Tarih1.date)));
      Open; Last;
      if RecordCount=0 then
      tarih1.Date:=Tarih1.Date+1;;

      if RecordCount>0 then
      Begin
        ShowMessage('Sonucun Bulundugu Döngü Sayısı : '+IntToStr(SAY));
        SAY:=31;
      end;
    Finally

    End;
  End;
begin
  with IBQuery1 do
  Try
    if Active then Close;
    SQL.Clear;
    SQL.Add('Select * From AAAA  Where TARIH='+QuotedStr(FormatDateTime('yyyy-mm-dd',Tarih1.date)));
    Open; Last;
    if RecordCount=0 then
    repeat
      Sorgula(incday(tarih1.Date,1));
      say:=say+1;
    until SAY>=30;
  Finally

  End;
end;
Düzeltme Nedeni;
@esistem'in uyarısı üzerine Open; dedikten Sonra Last; ifadesi eklendi.
En son xozcanx tarafından 28 May 2015 05:14 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Nasibinde varsa, alırsın karıncadan bile ders, Nasibinde yoksa, bütün cihan önüne serilse, sana ters..
Kullanıcı avatarı
esistem
Üye
Mesajlar: 464
Kayıt: 02 Eki 2007 11:22
İletişim:

Re: Arama sırasında otomatik tarih artırma

Mesaj gönderen esistem »

Aman diyim Query lerde RecordCount kullanmayın yeri gelince fena şaşırırsınız.
Kullanıcı avatarı
xozcanx
Üye
Mesajlar: 362
Kayıt: 05 Oca 2012 12:55

Re: Arama sırasında otomatik tarih artırma

Mesaj gönderen xozcanx »

Evet hocam haklısınız ben kullanıyorum fakat sonuna Last; diyerek son kayda ulaşmasını sağlıyorum ki tam sonucu alayım. dediğiniz gibi bu ifadeyi kullanmazsam fazla sonuç geldiği zamanlarda sonucu eksik gösteriyor. Uyarı için Teşekkürler.
Nasibinde varsa, alırsın karıncadan bile ders, Nasibinde yoksa, bütün cihan önüne serilse, sana ters..
Cevapla