iki tarih arasında otomatik kayıt oluşturma

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
erdogan_ozkaya
Üye
Mesajlar: 839
Kayıt: 03 Eki 2007 02:00

iki tarih arasında otomatik kayıt oluşturma

Mesaj gönderen erdogan_ozkaya »

Merhaba Arkadaşlar,

Formda 2 tane datetime ekleyeceğim ve butona bastığım 2 tarih arasında boş kayıt oluşturacak

tablodaki alanlar TARIH, ACIKLAMA açıklamayı boş bırakacak ve gün gün tarihi akleyecek.

aşağıdaki kod ile edit1.text girdiğim sayı kadar gün atıyor edit1.text yerine belirttiğim tarih aralığını yapmak istiyorum

umarım anlatabilmişimdir :)

teşekkürler.

Kod: Tümünü seç

procedure TForm1.Button2Click(Sender: TObject);
var
      i : Integer;

      GUN_SAYISI:integer;
      TARIH:tdate;
begin
   if StrToIntDef (edit1.text,0) <1 then begin
   ShowMessage('Lütfen Gün Sayısı Giriniz');
   edit1.SetFocus;
   exit;
end;

GUN_SAYISI:=strtoint(edit1.text);
TARIH:=datetimepicker1.date;
for i:= 1 to ( GUN_SAYISI-1 ) do
begin
   ADOTable1.insert;
   ADOTable1tarih.value        :=IncDay(TARIH);



   ADOTable1.post;
   TARIH:= IncDay(TARIH);
end;
  ADOTable1.Insert;

  ADOTable1tarih.value:=IncDay(TARIH);

  ADOTable1.post;
  ADOTable1.requery;
  ADOTable1.Last;
end;
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2381
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Re: iki tarih arasında otomatik kayıt oluşturma

Mesaj gönderen freeman35 »

while ilk_tarih<=son_tarih do begin
...

Kolay gele
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5

Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
erdogan_ozkaya
Üye
Mesajlar: 839
Kayıt: 03 Eki 2007 02:00

Re: iki tarih arasında otomatik kayıt oluşturma

Mesaj gönderen erdogan_ozkaya »

hocam cevap için teşekkürler acaba koda ekleyebilir misiniz ?
xxxjedixxx
Üye
Mesajlar: 216
Kayıt: 10 Ara 2013 03:50

Re: iki tarih arasında otomatik kayıt oluşturma

Mesaj gönderen xxxjedixxx »

Tarih sınırı nasıl olacak belirtmemişsin. Kodu aşağıdaki mantıkta yazdım.

Tarihler eşitse kayıt girilmiyor ve uyarı veriyor.

Örneğin;
Tarihler 30.05.2014 ve 31.05.2014 olarak girilirse, sadece 31.05.2014 tarihi kaydediliyor. Senin kodundan ilk tarihi dahil etmediğini anlıyorum.

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
var Tarih: TDate;
begin
  if DateTimePicker1.Date >= DateTimePicker2.Date then
  begin
    ShowMessage('İlk tarih son tarihten farklı ve küçük olmalıdır.');
    Exit;
  end;

  Tarih := DateTimePicker1.Date + 1; // ilk tarihi dahil etmediğimizi anlıyorum.
  while Tarih <= DateTimePicker2.Date do
  begin
    ADOTable1.Insert;
    ADOTable1.FieldByName('TARIH').AsDateTime := Tarih; // ADOTable1tarih 'i anlamadığım için böyle yazdım
    ADOTable1.FieldByName('ACIKLAMA').AsString := '';
    ADOTable1.Post;
    Tarih := Tarih + 1;
  end;
  ADOTable1.Requery;
  ADOTable1.Last;
end;
erdogan_ozkaya
Üye
Mesajlar: 839
Kayıt: 03 Eki 2007 02:00

Re: iki tarih arasında otomatik kayıt oluşturma

Mesaj gönderen erdogan_ozkaya »

hocam ayın 1 den 10 na olacak ayın biri ve 10 dahil olacak ?


çok teşekkür ederim
erdogan_ozkaya
Üye
Mesajlar: 839
Kayıt: 03 Eki 2007 02:00

Re: iki tarih arasında otomatik kayıt oluşturma

Mesaj gönderen erdogan_ozkaya »

hocam çok teşekkürler aşağıdaki gibi oldu.

Kod: Tümünü seç

procedure TSERVIS_SABLONU_PENCERE.btn1Click(Sender: TObject);
var
   Tarih: TDate;
begin

  if dtp1.Date >= dtp2.Date then
  begin
    ShowMessage('İlk tarih son tarihten farklı ve küçük olmalıdır.');
    Exit;
  end;

  Tarih := dtp1.Date; // ilk tarihi dahil etmediğimizi anlıyorum.
  while Tarih <= dtp2.Date+1 do
  begin
    qrySERVIS_HAREKETLERI_DB.Insert;


   qrySERVIS_HAREKETLERI_DB.FieldByName('TARIH').value        :=Tarih;
   qrySERVIS_HAREKETLERI_DB.FieldByName('GUZERGAH_ID').AsString:= qryGUZERGAHLAR_DB.FieldByName('GUZERGAH_ID').Text;
   qrySERVIS_HAREKETLERI_DB.FieldByName('FIRMA_ID').AsString:=qryGUZERGAHLAR_DB.FieldByName('FIRMA_ID').Text;
   qrySERVIS_HAREKETLERI_DB.FieldByName('ARAC_ID').AsString:=qryGUZERGAHLAR_DB.FieldByName('ARAC_ID').Text;
   qrySERVIS_HAREKETLERI_DB.FieldByName('FIRMA_FIYAT').AsString:=qryGUZERGAHLAR_DB.FieldByName('FIRMA_FIYATI').Text;
   qrySERVIS_HAREKETLERI_DB.FieldByName('KIRALIK_FIYAT').AsString:=qryGUZERGAHLAR_DB.FieldByName('KIRALIK_FIYATI').Text;


   qrySERVIS_HAREKETLERI_DB.FieldByName('DONEM_YIL').AsString:=KULLANICI_KONTROL_PENCERE.QRY_CALISILAN_FIRMALAR_DBCALISILAN_YIL.Text;
   qrySERVIS_HAREKETLERI_DB.FieldByName('EKLEYEN').AsString:=KULLANICI_KONTROL_PENCERE.QRY_KULLANICI_DBKULLANICI_ADI.Text;
   qrySERVIS_HAREKETLERI_DB.FieldByName('CALISILAN_FIRMA').AsString:=KULLANICI_KONTROL_PENCERE.CALISILAN_FIRMA_KOD.Text;




    qrySERVIS_HAREKETLERI_DB.Post;
    Tarih := Tarih + 1;
  end;
  qrySERVIS_HAREKETLERI_DB.Requery;
  qrySERVIS_HAREKETLERI_DB.Last;
end;
xxxjedixxx
Üye
Mesajlar: 216
Kayıt: 10 Ara 2013 03:50

Re: iki tarih arasında otomatik kayıt oluşturma

Mesaj gönderen xxxjedixxx »

Yeni duruma göre düzeltmen gereken yerler var.

Kod: Tümünü seç

  if dtp1.Date > dtp2.Date then // burası >= değil > olmalı
  begin
    ShowMessage('İlk tarih son tarihten farklı ve küçük olmalıdır.');
    Exit;
  end;

Kod: Tümünü seç

//  while Tarih <= dtp2.Date+1 do yerine aşağıdaki gibi olmalı, yoksa bir gün fazla kayıt atar
while Tarih <= dtp2.Date do 
erdogan_ozkaya
Üye
Mesajlar: 839
Kayıt: 03 Eki 2007 02:00

Re: iki tarih arasında otomatik kayıt oluşturma

Mesaj gönderen erdogan_ozkaya »

hocam ölyde son günü atmıyor yani ayın 10 seçtiğimde 9 kadar ekliyor.
xxxjedixxx
Üye
Mesajlar: 216
Kayıt: 10 Ara 2013 03:50

Re: iki tarih arasında otomatik kayıt oluşturma

Mesaj gönderen xxxjedixxx »

O zaman bir hatan var. while döngüsündeki şarta göre hepsini kaydetmesi lazım. Varsa bir hata Adotable'ın insert ve post sırasıyla alakalıdır. Debug ederek kontrol edebilirsin. Muhtemelen ilk tarih kaydını, bir sonraki döngüde atıyor.
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2381
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Re: iki tarih arasında otomatik kayıt oluşturma

Mesaj gönderen freeman35 »

Ben prensip olarak kimseye kod yazmam, "balık tutmak" örneğini hatırlayın. soruna çözüm yolunu vermişin, hatta bilerek "IncDay(TARIH);" yazmadım çünkü verdiğin kodda sen kullanmışsın
kolay gele
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5

Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
Cevapla