geçenayki kayıtlar-bu ayki kayıtlar-buğünkü kayıtlar nasıl

Firebird ve Interbase veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
forumsad
Üye
Mesajlar: 296
Kayıt: 29 Tem 2010 10:47

geçenayki kayıtlar-bu ayki kayıtlar-buğünkü kayıtlar nasıl

Mesaj gönderen forumsad »

arkadaşlar kayıt sayılarını bu formatta almam lazım

geçen ayki kayıt ayıı
bu ayki kayıt sayısı
buğünkü kayıt sayısı

************************************************************

Kod: Tümünü seç

procedure bugunkuOturumSayisi;
var
top:integer;
tarih1:string;
begin
tarih1:=DateToStr(Date);
DMvt.IBQuery1.Close;
DMvt.IBQuery1.sql.Clear;
DMvt.IBQuery1.sql.add('select count(*) from TBL_HESAP');
DMvt.IBQuery1.sql.add('WHERE TARIH=:t1');

DMvt.IBQuery1.Params.ParamByName('t1').Value:=tarih1;
DMvt.IBQuery1.Open;

top := DMvt.IBQuery1.Fields[0].AsInteger;
//ShowMessage(IntToStr(top));
end;
bugünkü kayıt sayısını yukardaki şekilde alıyorum ama
bu ayı ve geçen ayı nasıl alacağım konusunda bir fikir verebilirmisiniz

saygılarımla
forumsad
Üye
Mesajlar: 296
Kayıt: 29 Tem 2010 10:47

Re: geçenayki kayıtlar-bu ayki kayıtlar-buğünkü kayıtlar na

Mesaj gönderen forumsad »

Kod: Tümünü seç

implementation
uses DateUtils;
{$R *.dfm}

//function EndOfAMonth ( const Year, Month : Word ) : TDateTime;
//function EndOfTheMonth(const AValue: TDateTime): TDateTime;
function EndOfTheMonth(const AValue: TDate): TDate;
begin
end;
function StartOfTheMonth(const AValue: TDateTime): TDateTime;
begin
end;

procedure TForm1.Button1Click(Sender: TObject);
var
ilkgun: TDateTime;
songun: TDateTime;
mydate1 : TDateTime;
mydate2 : TDateTime;
begin
//myDate1 := StartOfTheMonth(2013, 7);
//myDate2 := EndOfAMonth(2013, 7);
ilkgun:=StartOfTheMonth(Now);
songun:= EndOfTheMonth(Date);
  ShowMessage(DateToStr(ilkgun)+'-'+DateToStr(songun));
ShowMessage(DateToStr(myDate1));
ShowMessage(DateToStr(myDate2));
end;
aynı ayın ilkgünü ve son gününü bulma ile ilğili bir şeyler buldum

bu ayki kayıtlar için ayın ilk gününü bulursak iki tarih arası sorgulama yaparak buğüne kadarki kayıtsayısını bulabilirim denemelere devam
yanlız yukardaki kodlarda tarih 1899 gibi garip geliyor??

http://prog-example.ru/procedures-funct ... fthemonth/ burdaki örnek bende hata veriyor ve tarih yanlış geliyor???
Kullanıcı avatarı
esistem
Üye
Mesajlar: 464
Kayıt: 02 Eki 2007 11:22
İletişim:

Re: geçenayki kayıtlar-bu ayki kayıtlar-buğünkü kayıtlar na

Mesaj gönderen esistem »

Selam;
ayın ilk günü veya son gününü bulmanıza gerek yok, ayın ilk günü her halukarda ayın 1 i olduğundan, sorgularınızı şöyle yaparsanız sorunsuz çalışır,
mesela 3. ay için ; tarih>='01.03.2013' AND tarih<'01.04.2013' gibi, yani ayın 1inden büyük ve eşit olanları ve diğer ayın 1inden küçük olanları ver diyebilirsiniz.
Fazla detaya girmeye gerek yok yani.
forumsad
Üye
Mesajlar: 296
Kayıt: 29 Tem 2010 10:47

Re: geçenayki kayıtlar-bu ayki kayıtlar-buğünkü kayıtlar na

Mesaj gönderen forumsad »

Kod: Tümünü seç

  function AyinIlkGunu(Date: TDateTime): TDateTime;
  var
    Year, Month, Day: Word;
  begin
    DecodeDate(Date, Year, Month, Day);
    Result := EncodeDate(Year, Month, 1);
  end;

  function AyinSonGunu(Date: TDateTime): TDateTime;
  var
    Year, Month, Day: Word;
  begin
    DecodeDate(Date, Year, Month, Day);
    if Month = 1 then
    else
    begin Month := 1; inc(Year) end;
    Result := EncodeDate(Year, Month, 1) - 1;
  end;

procedure TForm1.Button3Click(Sender: TObject);
begin
    ShowMessage(DateToStr(AyinIlkGunu(Now)));
    ShowMessage(DateToStr(AyinSonGunu(Now)));
end;
ayın ilk gününü ve son gününü bize döndüren hazır bir örnek buldum..
şimdi ay içindeki kayıtsayısını getirecek kodu hazırlayabiliriz..

esistem hocam teşekkürler uyarınızı dikkate alacağım..
forumsad
Üye
Mesajlar: 296
Kayıt: 29 Tem 2010 10:47

Re: geçenayki kayıtlar-bu ayki kayıtlar-buğünkü kayıtlar na

Mesaj gönderen forumsad »

Kod: Tümünü seç


//***********************************************************************
function AyinIlkGunu(Date: TDateTime): TDateTime;
  var
    Year, Month, Day: Word;
  begin
    DecodeDate(Date, Year, Month, Day);
    Result := EncodeDate(Year, Month, 1);
  end;

  function AyinSonGunu(Date: TDateTime): TDateTime;
  var
    Year, Month, Day: Word;
  begin
    DecodeDate(Date, Year, Month, Day);
    if Month = 1 then
    else
    begin Month := 1; inc(Year) end;
    Result := EncodeDate(Year, Month, 1) - 1;
  end;
//***********************************************************************


procedure buAykiOturumSayisi;
var
top:integer;
tarih1,tarih2:string;
begin

tarih1:=DateToStr(AyinIlkGunu(Now));
tarih2:=DateToStr(Now);

DMvt.IBQuery1.Close;
DMvt.IBQuery1.sql.Clear;
DMvt.IBQuery1.sql.add('select count(*) from TBL_HESAP');
DMvt.IBQuery1.sql.add('WHERE TARIH between :t1 and :t2');

DMvt.IBQuery1.Params.ParamByName('t1').Value:=tarih1;
DMvt.IBQuery1.Params.ParamByName('t2').Value:=tarih2;
DMvt.IBQuery1.Open;
DMvt.IBTransaction1.CommitRetaining;
top := DMvt.IBQuery1.Fields[0].AsInteger;
ShowMessage(IntToStr(top));
end;
kodu yukardaki şekilde toparladım tek bir sorun kaldı 12 tane kayıt var 2 adeti 6'ıncı aya ait 10 tanesi 7'inci aya sonucun 10 olarak dönmesi gerekirken
12 olarak dönüyor..

saygılarımla
Kullanıcı avatarı
esistem
Üye
Mesajlar: 464
Kayıt: 02 Eki 2007 11:22
İletişim:

Re: geçenayki kayıtlar-bu ayki kayıtlar-buğünkü kayıtlar na

Mesaj gönderen esistem »

Kod: Tümünü seç


    //***********************************************************************
    function AyinIlkGunu(Date: TDateTime): TDateTime;
      var
        Year, Month, Day: Word;
      begin
        DecodeDate(Date, Year, Month, Day);
        Result := EncodeDate(Year, Month, 1);
      end;

      function AyinSonGunu(Date: TDateTime): TDateTime;
      var
        Year, Month, Day: Word;
      begin
        DecodeDate(Date, Year, Month, Day);
        if Month = 1 then
        else
        begin Month := 1; inc(Year) end;
        Result := EncodeDate(Year, Month, 1) - 1;
      end;
    //***********************************************************************


    procedure buAykiOturumSayisi;
    var
    top:integer;
    tarih1,tarih2:string;
    begin

    tarih1:=DateToStr(AyinIlkGunu(Now));
    tarih2:=DateToStr(Now);

    DMvt.IBQuery1.Close;
    DMvt.IBQuery1.sql.Clear;
    DMvt.IBQuery1.sql.add('select count(*) from TBL_HESAP');
    DMvt.IBQuery1.sql.add('WHERE TARIH between '+quotedstr(tarih1)+' and '+quotedstr(tarih2));
    DMvt.IBQuery1.Open;
    top := DMvt.IBQuery1.Fields[0].AsInteger;
    ShowMessage(IntToStr(top));
    end;
şeklinde deneyiniz. parametreleri sizin yazdığınız şekilde kullanamazsınız. Ayrıca sorgu ile veri çekerken commit yapmanıza gerek yoktur, sadece veri kaydı yada değişikliği yaptığınızda commit edin.
forumsad
Üye
Mesajlar: 296
Kayıt: 29 Tem 2010 10:47

Re: geçenayki kayıtlar-bu ayki kayıtlar-buğünkü kayıtlar na

Mesaj gönderen forumsad »

Kod: Tümünü seç

tarih1:=DateToStr(AyinIlkGunu(Now));
tarih2:=DateToStr(Now);

DMvt.IBQuery1.Close;
DMvt.IBQuery1.sql.Clear;
DMvt.IBQuery1.sql.add('select count(*) from TBL_HESAP');
DMvt.IBQuery1.sql.add('WHERE TARIH between '+quotedstr(tarih1)+' and '+quotedstr(tarih2));
DMvt.IBQuery1.Open;

top := DMvt.IBQuery1.Fields[0].AsInteger;
ShowMessage(IntToStr(top));
hocam dediğiniz şekilde denedim tekrar 12 döndü..



şu satır //// DMvt.IBQuery1.Fields[0].AsInteger;//// ile ilğili bir sorun olma ihtimali var mı acaba..

Resim

saygılarımla
Kullanıcı avatarı
esistem
Üye
Mesajlar: 464
Kayıt: 02 Eki 2007 11:22
İletişim:

Re: geçenayki kayıtlar-bu ayki kayıtlar-buğünkü kayıtlar na

Mesaj gönderen esistem »

Kod: Tümünü seç

tarih1:=DateToStr(AyinIlkGunu(Now));
tarih2:=DateToStr(Now);

DMvt.IBQuery1.Close;
DMvt.IBQuery1.sql.Clear;
DMvt.IBQuery1.sql.add('select count(*) from TBL_HESAP');
DMvt.IBQuery1.sql.add('WHERE TARIH>='+quotedstr(tarih1)+' and TARIH<='+quotedstr(tarih2));
DMvt.IBQuery1.Open;

top := DMvt.IBQuery1.Fields[0].AsInteger;
ShowMessage(IntToStr(top));
şeklinde deneyin birde, between kullanmayın. Fakat şuna da dikkat edin, TARIH alanı tabloda mutlaka "DATE" olarak ve sorgunuzdaki tarih formatı ile aynı olmalı. Yani gün.ay.yıl veya yıl.ay.gun neyse her ikiside aynı olmalı.

DMvt.IBQuery1.Fields[0].AsInteger; satırında sorun olamaz, zira zaten bir alan dönüyor geriye.

bu arada tarih2 yi şöle yazmışsınız;

Kod: Tümünü seç

tarih2:=DateToStr(Now);
ayın son günü olmıcakmı o ?
forumsad
Üye
Mesajlar: 296
Kayıt: 29 Tem 2010 10:47

Re: geçenayki kayıtlar-bu ayki kayıtlar-buğünkü kayıtlar na

Mesaj gönderen forumsad »

içinde olduğumuz ay için son gününe ihtiyacımız yok bugünkü tarihi kullandım

mesela buğüm 5'i 1-5'i arasındaki kayıt sayısını getirecek..

Kod: Tümünü seç

procedure buAykiOturumSayisi;
var
top:integer;
tarih1,tarih2:string;
begin

tarih1:=DateToStr(AyinIlkGunu(Date));
tarih2:=DateToStr(Date);

DMvt.IBQuery1.Close;
DMvt.IBQuery1.sql.Clear;
DMvt.IBQuery1.sql.add('select count(*) from TBL_HESAP');
DMvt.IBQuery1.sql.add('WHERE TARIH>='+quotedstr(tarih1)+' and TARIH<='+quotedstr(tarih2));
DMvt.IBQuery1.Open;


top := DMvt.IBQuery1.Fields[0].AsInteger;
ShowMessage(IntToStr(top));
end;
tüm uyarılarınızı dikkate aldım hocam
ama gene 12 dönüyor

tarih formatları vt ile aynı

saygılarımla
Kullanıcı avatarı
esistem
Üye
Mesajlar: 464
Kayıt: 02 Eki 2007 11:22
İletişim:

Re: geçenayki kayıtlar-bu ayki kayıtlar-buğünkü kayıtlar na

Mesaj gönderen esistem »

showmessage ile tarih1 i bi görün bakalım kod doğru sonuç döndürüyormu?
Cevapla