Tarihten Tarih Çıkarma

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
çetinkaya

Tarihten Tarih Çıkarma

Mesaj gönderen çetinkaya »

Merhaba arkadaşlar bir poliçe takip programı yazıyorum.Şimdi bu programdaForm3 poliçe eklem formu burada DateTimePicker1 poliçe başlangıç Tarihi, DateTimePicker2 ise poliçe bitiş tarihinin yer aldığı component.Şimdi benim Form4 de yani poliçesi biten müşterilerin olduğu formda poliçe bitiş tarihinin bitmesine son 4 gün kala Form4 de müşterinin kayıt sıra no,adı,soyadı,poliçe bitiş tarihi ve poliçe türü dbgridde yer alacak bu işlemi nasıl yaparım yardımcı olursanız seviniirm...
thelvaci
Kıdemli Üye
Mesajlar: 770
Kayıt: 11 Tem 2010 07:17
Konum: Istanbul
İletişim:

Re: Tarihten Tarih Çıkarma

Mesaj gönderen thelvaci »

Öyle bir soru sormuşsunuz ki; sorunuzun cevabını verebilmek için projeyi bizim yazıyor olmamız icap ediyor. İki tarih arasındaki fark gibi kısa bir soruna yanıt arıyorsanız öncelikle DateUtils unit'ine bakmanızı önereceğim. İkinci olarak da TDateTime hakkında kısa bazı açıklamalar yapayım. Belki faydalı olur. TDateTime veri türü Double bir veri türüdür hepimizin bildiği gibi. Ve yine hepimizin bilebileceği gibi bu veri türü ile matematiksel işlemler yapabiliriz. Örneğin;

Kod: Tümünü seç

var
  dt : TDateTime;
begin
  dt := Now;
  dt := dt + 1; // 1 gün sonrası..
  ShowMessage(DateTimeToStr(dt));
end;
Yukarıdaki basit örneği vermemdeki amaç matematiksel iafedeleri kullanarak tarih hesaplamalarında aslında çok basit bir şekilde başarılı sonuçlar üretebileceğimiz gerçeğini ifade etmektir. Bir TDateTime veri türüne 1 sayısını eklemek bu veri türünü 1 gün ilerisine taşıyorsa eğer, 1/24 eklemek de 1 saat ilerisine taşımalıdır mantıken ;) Aynı şekilde 1/24/60 eklenmesi de 1 dakika ilerisine taşımak anlamına gelir. Aşağıdaki örnek bunun nasıl olabileceğini simüle eden basit bir koddur;

Kod: Tümünü seç

const
  BirSaat = 1 / 24;
  BirDakika = BirSaat / 60;
  BirSaniye = BirDakika / 60;

procedure TForm1.Button1Click(Sender: TObject);
var
  dt : TDateTime;
begin
  dt := Now;
  Memo1.Lines.Add('Orjinal Tarih/Saat:' + DateTimeToStr(dt));

  dt := dt + 1;
  Memo1.Lines.Add('Bir gün sonrası:' + DateTimeToStr(dt));

  dt := Now;
  dt := dt + BirSaat;
  Memo1.Lines.Add('Bir saat sonrası:' + DateTimeToStr(dt));

  dt := Now;
  dt := dt + BirDakika;
  Memo1.Lines.Add('Bir dakika sonrası:' + DateTimeToStr(dt));

  dt := Now;
  dt := dt + BirSaniye;
  Memo1.Lines.Add('Bir saniye sonrası:' + DateTimeToStr(dt));
end;
çetinkaya

Re: Tarihten Tarih Çıkarma

Mesaj gönderen çetinkaya »

vall hocam okadar ısrar ediyorsanı siz bir örnek yapar gönderirsiniz. :D neyse şaka bir tarafa hocam DateUtils uniti nedemek onu alamadım nerde bulurum bu üniti biraz daha konuyu açöarsanız seviniirm. ayrıca program bunu poliçesi biten müşteriler tablousnda saklı tutacak...
thelvaci
Kıdemli Üye
Mesajlar: 770
Kayıt: 11 Tem 2010 07:17
Konum: Istanbul
İletişim:

Re: Tarihten Tarih Çıkarma

Mesaj gönderen thelvaci »

uses DateUtils; yazarsın programının uses bölümüne ve DateUtils üzerinde iken Ctrl+Enter'a basarsın. İlgili unit karşında olacak.
çetinkaya

Re: Tarihten Tarih Çıkarma

Mesaj gönderen çetinkaya »

hocam verdiğiniz cevap için tşk ederim fakat benim projemde memo componenti yok ki ? acaba başka ne tür alternatifler üretebiliriz.. ??
muhcet
Üye
Mesajlar: 12
Kayıt: 01 May 2009 08:37

Re: Tarihten Tarih Çıkarma

Mesaj gönderen muhcet »

anladığım kadarıyla iki tarih arasındaki farkı almak istiyorsun.

var
a,b:tdate;
c:integer;
begin
a:=form1.datetimepicker1.date; // ilk tarih
b:=form2.datetimepicker2.date; // ikinci tarih
c:=daysbetween(b,a); //buradan gelen sonuç integer türünde olacaktır. b ile a'nın yerleri değişmesi gerekebilir.
end;

eğer veritabanından tarihleri alacaksan kullandığın veri tabanına göre kod yazman gerekebilir. örneğin firebird kullanmışsan ve dataset kullanmışsan;
a:=datamodule2.dataset1.tarih.value; şeklinde istediğin kaydı alabilirsin.

bu arada uses kısmına dateutils eklemen gerekiyor.

kolay gelsin.
çetinkaya

Re: Tarihten Tarih Çıkarma

Mesaj gönderen çetinkaya »

evet hocam veritabanım firebird ve intrbase componentleri ile bağlantıyı sağlam..
çetinkaya

Re: Tarihten Tarih Çıkarma

Mesaj gönderen çetinkaya »

var
a,b:tdate;
c:integer;
begin
a:=Form3.IBTable1.’YENI_POLICE_EKLE’;
b:=RZdbDateTimePicker1:=’polıce-başlangıc_tarih;
c:=RZDBDateTimePicker2:=’POLICE_BITIS_TARIHI’;
Form4.IBTable1=’POLICESI_BITEN_MUSTERİLER’;

……… HERHALDE BÖYLE BİR KOD YAZMALIYIM …???
muhcet
Üye
Mesajlar: 12
Kayıt: 01 May 2009 08:37

Re: Tarihten Tarih Çıkarma

Mesaj gönderen muhcet »

ilk olarak datetimepicker1.date olarak kullanman gerekiyor.


RZdbDateTimePicker1.date=’police_baslangic_tarih; 'i ise

a:=RZdbDateTimePicker1.date;

RZDBDateTimePicker2.date=’POLICE_BITIS_TARIHI’; 'i ise

b:=RZDBDateTimePicker2.date;


ve son olarak

c:=now; // c'ye bugünün tarihi atman gerekiyor. böyle olayabilir kod. buna bir bak istersen.

d:=daysbetween(c,b);
if d=4 then showmessage('Son 4 gün kaldı');

gibi birşey olması gerekiyor.
çetinkaya

Re: Tarihten Tarih Çıkarma

Mesaj gönderen çetinkaya »

peki hocam bu kodu poliçesi biten müşteri formunun form create olayına yazsam olur mu..???
muhcet
Üye
Mesajlar: 12
Kayıt: 01 May 2009 08:37

Re: Tarihten Tarih Çıkarma

Mesaj gönderen muhcet »

oncreat veya onshow olayına yazman yeterli olur.
Cevapla