Şimdi Ara

DELPHİ İLE ALAKALI BİR SORU

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
3 Misafir - 3 Masaüstü
5 sn
16
Cevap
0
Favori
667
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • Delphi de doğum tarihi(mesela 02.05.1985) bilgisi verilen bir kişinin yaşı nasıl hesaplanır?



  • http://www.delphibasics.co.uk/Article.asp?Name=Dates

    hem vaktim olamdığı hemde elimin altında delphi olamdığı için şuan üsteki linke bir bak eminim yardımcı olacaktır.

    öss den sonra bende yardım edebilirm
  • Formatı iki adet Datetime deişkene alıp bildiğiniz çıkarma işlemi yaparsınız... Delphide yazmadım hata olabilir ama

    var
    basla,bit,sonuc : Tdatetime;

    begin

    basla := Date;
    bit := strtodate ('02.05.1985'); // tarih formatı farklı olabilir...

    sonuc := bit - Basla;

    edit1.text := formatdatetime ('yyyy',sonuc) ;

    end;


    format datetime kısmına HELP den bakıp sadece yıl gösterecek şekilde ayarlarsınız ben doğru yazdığıma emin deilim...
  • hem vaktim olamdığı hemde elimin altında delphi olamdığı için şuan üsteki linke bir bak eminim yardımcı olacaktır.

    öss den sonra bende yardım edebilirm
    Umarım sınavım iyi geçmiştir.Herkese büyük geçmiş olsun.Zamanın olursa tarih konusunda yardımlarını beklerim.Adreste istediklerim yoktu.Ben, projemin rapor kısmında belli yaşlarda olanların toplam sayılarını gösterecem.Mesela
    1-5 yaş arasında 10 kişi
    6-11 yaş arasında 23 kişi
    12-18 yaş arasında 32 kişi ,... gibi
  • mesajın için sağol Aspci79.Kabaca anladım fakat biraz daha yardımınız gerekli .projemin rapor kısmında belli yaşlarda olanların toplam sayılarını gösterecem.Mesela
    1-5 yaş arasında 10 kişi
    6-11 yaş arasında 23 kişi
    12-18 yaş arasında 32 kişi ,... gibi.Ben, tabloda yer alan doğum tarihlerini(01.02.2005 formatında) hesaplatıp yaşlara göre gruplandıracam.Yukardaki örnekteki olduğu gibi.
  • var
    birbes:integer;

    if (yas=>1) and (yas=<5) then birbes=birbes+1; //yas 1 e esşit veya büyükse ve 5e eşit ve küçükse birbes isimli integer değişkeknini bir artır. bunu gibi pek çok amntık kurabilirsin. ama bu bayağı analaşılır.


    gibi mantığı anladın sanırım
  • var
    birbes:integer;

    if (yas=>1) and (yas=<5) then birbes=birbes+1; //yas 1 e esşit veya büyükse ve 5e eşit ve küçükse birbes isimli integer değişkeknini bir artır. bunu gibi pek çok amntık kurabilirsin. ama bu bayağı analaşılır.

    Ama yaşlarımız tarih formatında örneğin(01.01.1980) gibi.Nasıl if (yas=>1) and (yas=<5) yapabiliriz ki?Yani yaş ı integer olarak tanıtamayız .date formatında çünkü.
  • Yapay Zeka’dan İlgili Konular
    röle ile ilgili kısa bir soru
    11 yıl önce açıldı
    Sistem 4 ile ilgili soru?
    14 yıl önce açıldı
    Daha Fazla Göster
  • quote:

    Orjinalden alıntı: hayrettinsahin

    var
    birbes:integer;

    if (yas=>1) and (yas=<5) then birbes=birbes+1; //yas 1 e esşit veya büyükse ve 5e eşit ve küçükse birbes isimli integer değişkeknini bir artır. bunu gibi pek çok amntık kurabilirsin. ama bu bayağı analaşılır.

    Ama yaşlarımız tarih formatında örneğin(01.01.1980) gibi.Nasıl if (yas=>1) and (yas=<5) yapabiliriz ki?Yani yaş ı integer olarak tanıtamayız .date formatında çünkü.


    Yukarıda nasıl çıkarma yapabileceğini anlattım ya benim teknikle sayı olarak çıkar. drony nin anlattığı gibi kıyas yap...

    formatdatetime('yy',sonuc) = 30 gibi ...

    Kafama takıldı yazacağım..

    var
    sayac:integer;
    begin
    try
    table1.first;
    sayac:=0;

    while not table1.eof
    begin
    ... // burada her kayıt için çıkarma işlemi yapacaksın.. arada ki farkı almak için yukarıda yazdığım için tekrarlamayacağım...
    if (strtoint(formatdatetime('yy',sonuc)) > 1) and (strtoint(formatdatetime('yy',sonuc)) < 5) then
    begin
    sayac := sayac + 1; belirttiğimiz aralıktaysa 1 arttırdık...
    end;
    table1.next; //sonraki kayıta geçtik..
    end;

    showmessage ('1 ile 5 yaş aralığındaki kayıt sayısı '+ inttostr(sayac)+ 'tır...');
    ...

    Bu en basit uygulamadır.



    < Bu mesaj bu kişi tarafından değiştirildi irfanmatak -- 20 Haziran 2005, 1:47:05 >




  • Şu hataya bir bakar mısınız?(Resimdeki)Ben adotable nesnesini kullandım.Ayrıca adotable nesnesiyle bağlantıyı kurduğum tablodan ilk veri yi(mesela 01.02.1980) nasıl basla değişkenine aktarılıyor.Burayı çözemedim. Verdiğim rahatsızlıktan dolayı özür dilerim.
  • quote:

    Orjinalden alıntı: hayrettinsahin

    Şu hataya bir bakar mısınız?(Resimdeki)Ben adotable nesnesini kullandım.Ayrıca adotable nesnesiyle bağlantıyı kurduğum tablodan ilk veri yi(mesela 01.02.1980) nasıl basla değişkenine aktarılıyor.Burayı çözemedim. Verdiğim rahatsızlıktan dolayı özür dilerim.


    Verdiğiniz resimde baktığım her satırda 1 adet hata gördüm...

    Ben burada sadece size fikir vermesi için yukarıdaki kodu örnek olarak yazdım zaten Delphide bile yazmadım o kodu yazdığımda Linux üzerindeyim :)

    Adotable nesnesi ile bu şekilde bir döngü oluşturmak kayıt sayınız artınca kullanışsız olacaktır en sağlam yol SQL Burada bir çok syntax error var noktalı virgül eksik açıklama başına "//" eklemelisiniz. vs. Onları bir giderin sonra devam edelim...




  • quote:


    var
    sayac:integer;
    begin
    try
    table1.first;
    sayac:=0;

    while not table1.eof
    begin
    ... // burada her kayıt için çıkarma işlemi yapacaksın.. arada ki farkı almak için yukarıda yazdığım için tekrarlamayacağım...
    if (strtoint(formatdatetime('yy',sonuc)) > 1) and (strtoint(formatdatetime('yy',sonuc)) < 5) then
    begin
    sayac := sayac + 1; belirttiğimiz aralıktaysa 1 arttırdık...
    end;
    table1.next; //sonraki kayıta geçtik..
    end;

    showmessage ('1 ile 5 yaş aralığındaki kayıt sayısı '+ inttostr(sayac)+ 'tır...');
    ...

    Aspci79, bana while döngüsündeki begin kısmını da yazar mısın?Örnek olarak yani.




  • Ben bu işlemi projede kullanacam.Bu işlem için Query sorgulamasını yani SQL i kullanacağım.

    Mesela SELECT COUNT(*) FROM BILGILER WHERE W(APPSTARTDATE - DOGUM_TARIHI >1) AND W(APPSTART - DOGUM_TARIHI <5)gibi.

    Ama burada W=?(Tarihi yıl cinsinden verecek komut.)Ayrıca bu işlem şayet çalışırsa sadece 1 -5 yaş arası birey sayısını verir.Fakat bana diğer yaş gruplarının sayısı da lazım.Aynı form da birden fazla Query nesnesi kullanılır mı(Quick rapor da ) kullanılırsa nasıl kullanılır?
    .
  • quote:

    Orjinalden alıntı: hayrettinsahin

    Ben bu işlemi projede kullanacam.Bu işlem için Query sorgulamasını yani SQL i kullanacağım.

    Mesela SELECT COUNT(*) FROM BILGILER WHERE W(APPSTARTDATE - DOGUM_TARIHI >1) AND W(APPSTART - DOGUM_TARIHI <5)gibi.

    Ama burada W=?(Tarihi yıl cinsinden verecek komut.)Ayrıca bu işlem şayet çalışırsa sadece 1 -5 yaş arası birey sayısını verir.Fakat bana diğer yaş gruplarının sayısı da lazım.Aynı form da birden fazla Query nesnesi kullanılır mı(Quick rapor da ) kullanılırsa nasıl kullanılır?
    .

    quote:


    Aspci79, bana while döngüsündeki begin kısmını da yazar mısın?Örnek olarak yani


    Şu an müsait deilim ama akşam size örnek bir uygulama hazırlarım. SQL temelli..



    < Bu mesaj bu kişi tarafından değiştirildi irfanmatak -- 22 Haziran 2005, 13:14:43 >




  • quote:

    Şu an müsait deilim ama akşam size örnek bir uygulama hazırlarım. SQL temelli..

    Sabırsızlıkla bekliyorum
  • Mantık olarak bir taslak çalışma çıkardım ortaya...

    quote:

    unit Unit1;

    interface

    uses
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
    Dialogs, StdCtrls, ComCtrls, DBTables, DB, ExtCtrls, DBCtrls, Grids,
    DBGrids;

    type
    TForm1 = class(TForm)
    DataSource1: TDataSource;
    DBGrid1: TDBGrid;
    DBNavigator1: TDBNavigator;
    Query1: TQuery;
    Table1: TTable;
    Label1: TLabel;
    Label2: TLabel;
    Button1: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    UpDown1: TUpDown;
    UpDown2: TUpDown;
    Edit3: TEdit;
    Query1ID: TFloatField;
    Query1AD: TStringField;
    Query1DOGUMTARIH: TDateField;
    Table1ID: TFloatField;
    Table1AD: TStringField;
    Table1DOGUMTARIH: TDateField;
    procedure Button1Click(Sender: TObject);
    private
    { Private declarations }
    Function Farkal(Dogumtarihi:Tdatetime):String;
    public
    { Public declarations }
    end;

    var
    Form1: TForm1;

    implementation

    {$R *.dfm}

    procedure TForm1.Button1Click(Sender: TObject);
    Var
    Sonuc:String;
    begin
    edit3.Text := '';
    edit3.Text := farkal(Table1DOGUMTARIH.Value);
    //yaş farkı döndü....şimdi arayı filtreliyeceğiz...

    if (inttostr(edit3.Text) < 5) and (inttostr(edit4.Text) > 1) then //-> 1 ile 5 arası yaşlar...
    begin
    // 1 İLE 5 yaş ARASI RAPOR
    end;

    if (inttostr(edit3.Text) < 15) and (inttostr(edit4.Text) > 5) then // -> 5 - 15 arası
    Begin
    //...
    end;

    if (inttostr(edit3.Text) < 30) and (inttostr(edit4.Text) > 15) then // -> 15-30 arası
    Begin
    //...
    end;

    if (inttostr(edit3.Text) > 30) then // -> 30 dan büyükler...
    Begin
    //...
    end;

    end;

    function TForm1.Farkal(Dogumtarihi:Tdatetime): String;
    var
    sonuc:Tdatetime;
    begin
    sonuc := date - Dogumtarihi;
    Farkal := Formatdatetime ('yy',sonuc);
    end;


    end.


    Burada çevirme işlemini bir functiona yaptırdım... Ama raporlama pek pratik olmadı.
    Bu koddaki çevirme işlemini SQL kodunuzlada kullanabilirsiniz ama en pratik yol kişinin yaşını veriyi kaydederken database e almak.... Farkal functionuyla kişinin yaşını hesaplatıp veri tabanına yazarsanız büyük kolaylık olur sizin için ...

    Select * from TABLO where YAS < 5 and YAS > 1 ... gibi

    Eğer saf SQL kullanarak bir sorgu oluşturmak istersek bu çok komplike bir sorgu olur. Yani direk hesaplatmaları SQL içinde yapmamız gerekir. Buda biraz zaman alıcı bir durum olduğu için şu an yazamıyorum belki fikir verir size en azından hatasız... Kod tarafımdan kontrol edilmiştir...

    Kolay gelsin...




  • Tüm yaptıklarımızı bir kenara bırakalım.Bir de böyle deneyelim.
    1-Tarih formatında girdiğim edit ler otomatik olarak yaş formatına nasıl çevirilir?
    2-Veyahutta yaş(örneğin 23) olarak girersek 1 yıl sonra otomatik olarak bu yaş(24 oldu) ı artırabilir miyiz?
    3-Veya yaş olarak değerleri girecez ve proje çalıştırılınca güncelle diye bir button olacak.Ve buttona tıklanıldığında yaş lar otomatik olarak değişecek.Olabilir mi?Yorumları bekliyorum.Olmazsa diğer yönteme devam edecem.

    quote:

    Farkal functionuyla kişinin yaşını hesaplatıp veri tabanına yazarsanız büyük kolaylık olur sizin için ...

    Select * from TABLO where YAS < 5 and YAS > 1 ... gibi

    Burdaki gibi olabilir.Fakat ben yapamadım.




  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.