Tarih Bulma

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
ozcank
Üye
Mesajlar: 937
Kayıt: 28 Nis 2005 05:29

Tarih Bulma

Mesaj gönderen ozcank »

Arkadaşlar şöyle birşey yapmak istiyorum;
Table1 de TTARIH var, ve girilen çeşitli tarihler var ben , 5 ay olur 6 ay olur 7 ay olur, bu aylar içerisinde ki günü gelmiş tarihleri bulup işlem yapıldığı zaman (ileri bir tarih vermek süretiyle) o ay içerisinden çıkartıp mesaj (Bu ay Cihazın Bakımı Var !) vermesini engellemk istiyorum. Tabi bu o ay içerisinde ki tarihleri bitirene kadar dönecek.

Mesela ;
01/03/2006 da bakım var ve bu gün 22/02/2006 ,01/03/2006 tarihine geldiği zaman "Bu ay Cihazın Bakımı Var !" mesajını verecek ve bu tarih yeni bir ay tarihi alana kadar mesajı verecek 01/04/2006 tarihini aldığı zaman o tarihe kadar mesaj vermeyecek.
Kullanıcı avatarı
naile
Admin
Mesajlar: 1873
Kayıt: 11 Haz 2003 10:11

Mesaj gönderen naile »

Bakım tarihinin ayı ile günün tarihinin ayını karşılaştırarak yapabilirsiniz. Ayı da MonthOf ile alabilirsiniz.
ozcank
Üye
Mesajlar: 937
Kayıt: 28 Nis 2005 05:29

Mesaj gönderen ozcank »

Kod olarak yardım edebilirmisiniz?
Kullanıcı avatarı
naile
Admin
Mesajlar: 1873
Kayıt: 11 Haz 2003 10:11

Mesaj gönderen naile »

Tablonda sorgulama yaptıktan sonra çektiği ntarih bilgisini if le sorgulaman lazım;

Kod: Tümünü seç

if MonthOf(Table1Tarih.AsDateTime)=MonthOf(Date) then
  //Uyarı verir
Ama tabi böylede eğer sonuç olarak birden fazla satır dönecekse ne yapacaksın? Eğer döngü kursan busefer tek tek her satıra bakar ve her satır için ayrı ayrı uyarı verir.
ozcank
Üye
Mesajlar: 937
Kayıt: 28 Nis 2005 05:29

Mesaj gönderen ozcank »

Şu şekilde yapabilirmiyiz;

TTARIH e girilen kayıtları hangi aya ait ise o ay geldiğinde sadece ilgili ayı taratıp mesela 5. ay ise 5. ay daki kayıtlar bitene kadar o mesaj verdirebilirmiyiz? 6. Ayda varsa 6. ay için döngü devam edecek.ama kodunu nasıl yazacam onu bilmiyorum.Yardım ederseniz çok sevinirim.
Kullanıcı avatarı
naile
Admin
Mesajlar: 1873
Kayıt: 11 Haz 2003 10:11

Mesaj gönderen naile »

Yaparsın ama sql kullanacağın için table yerine query kullanmalısın. Ayrıca hani vt yi kullandığını yazmamışsın, eğer ms sql server kullanıyorsan onda da Month fonksiyonu var onu kullanabilirsin:

Kod: Tümünü seç

Select * From Tablo
Where Month(Tarih) = Month(GetDate())
Tarih, senin tablondaki tarih alanı, Getdate ise günün tarihini veren fonksiyon.

Ama dediğim gibi ms sql server değilse bu fonksiyonlar çalışmayabilir.
ozcank
Üye
Mesajlar: 937
Kayıt: 28 Nis 2005 05:29

Mesaj gönderen ozcank »

PARADOX kullanıyorum .
ozcank
Üye
Mesajlar: 937
Kayıt: 28 Nis 2005 05:29

Mesaj gönderen ozcank »

Ben bu şekle getirdim ama RO5BAKTAR,ROILKBAKTAR,RO1BAKTAR,ROMEMBAKTAR,ROSONBAKTAR farklı tarih alana kadar mesaj verdiremedim yardım ederseniz çok sevinirim.

Kod: Tümünü seç

procedure TForm1.Button22Click(Sender: TObject);
Var
Tarih:String;
Goster1,Goster2,Goster3,Goster4,Goster5:Boolean;
begin
Tarih:=DateToStr(Date);
Goster1:=Table1.Locate('RO5BAKTAR',Tarih,[LoPartialKey]);
Goster2:=Table1.Locate('ROILKBAKTAR',Tarih,[LoPartialKey]);
Goster3:=Table1.Locate('RO1BAKTAR',Tarih,[LoPartialKey]);
Goster4:=Table1.Locate('ROMEMBAKTAR',Tarih,[LoPartialKey]);
Goster5:=Table1.Locate('ROSONBAKTAR',Tarih,[LoPartialKey]);
If Goster1 Then  Begin
ShowMessage('Bu Ay (5 Mikron Sediment) Bakım yapılması gereken müşteriler mevcuttur !!! ');
Form22.Show;
end else  if Goster2 Then Begin
ShowMessage('Bu Ay (İlk Karbon) Bakım yapılması gereken müşteriler mevcuttur !!! ');
Form22.Show;
end else  if Goster3 Then Begin
ShowMessage('Bu Ay (1 Mikron Sediment) Bakım yapılması gereken müşteriler mevcuttur !!! ');
Form22.Show;
end else  if Goster4 Then Begin
ShowMessage('Bu Ay (Membran) Bakım yapılması gereken müşteriler mevcuttur !!! ');
Form22.Show;
end else  if Goster5 Then Begin
ShowMessage('Bu Ay (Son Karbon) Bakım yapılması gereken müşteriler mevcuttur !!! ');
Form22.Show;
end else
Form22.Show;
end;
ozcank
Üye
Mesajlar: 937
Kayıt: 28 Nis 2005 05:29

Mesaj gönderen ozcank »

Şu şekilde yapabilirmiyiz;

TTARIH e girilen kayıtları hangi aya ait ise o ay geldiğinde sadece ilgili ayı taratıp mesela 5. ay ise 5. ay daki kayıtlar bitene kadar o mesaj verdirebilirmiyiz? 6. Ayda varsa 6. ay için döngü devam edecek.ama kodunu nasıl yazacam onu bilmiyorum.Yardım ederseniz çok sevinirim.
Kullanıcı avatarı
naile
Admin
Mesajlar: 1873
Kayıt: 11 Haz 2003 10:11

Mesaj gönderen naile »

SQL kullanman lazım, bunun için table yerine query kullanmalısın.
Yazacağın sql cümlesi şöyle olmalı:

Kod: Tümünü seç

Query1.Close;
Query1.SQL.Text := 'SELECT * FROM TablonunIsmi WHERE TTARIH BETWEEN :T1 AND :T2';
Query1.ParamByName('T1').AsDateTime := StartOfAMonth(YearOf(Date),MonthOf(Date));
Query1.ParamByName('T1').AsDateTime := EndOfAMonth(YearOf(Date),MonthOf(Date));
Query1.Open;
Tarih alanın between ile iki tarih arasındakileri sorgulayarak getirir. Bu iki tarihe parametre gönderdim. İlk değer startofamonth fonksiyonu ile verilen yıl ve ayın ilk gününü döndürür, endofamonth ise son gününü. MonthOf verilen tarihin ayını, YearOf da yılını veriri, Date de günün tarihini verir. Ayrıntılı bilgi için:
http://delphiturkiye.com/index.php?page=datetime.htm
ozcank
Üye
Mesajlar: 937
Kayıt: 28 Nis 2005 05:29

Mesaj gönderen ozcank »

naile arkadaşım ben mesajları nasıl ekleyecem?

Query1.Close;
Query1.SQL.Text := 'SELECT * FROM TablonunIsmi WHERE TTARIH BETWEEN :T1 AND :T2';
Query1.ParamByName('T1').AsDateTime := StartOfAMonth(YearOf(Date),MonthOf(Date));
Query1.ParamByName('T1').AsDateTime := EndOfAMonth(YearOf(Date),MonthOf(Date));
Query1.Open;


burdan aşağısını eklemem gerekiyor yardım edermisiniz?
If Goster1 Then Begin
ShowMessage('Bu Ay (5 Mikron Sediment) Bakım yapılması gereken müşteriler mevcuttur !!! ');
Form22.Show;
end else if Goster2 Then Begin
ShowMessage('Bu Ay (İlk Karbon) Bakım yapılması gereken müşteriler mevcuttur !!! ');
Form22.Show;
end else if Goster3 Then Begin
ShowMessage('Bu Ay (1 Mikron Sediment) Bakım yapılması gereken müşteriler mevcuttur !!! ');
Form22.Show;
end else if Goster4 Then Begin
ShowMessage('Bu Ay (Membran) Bakım yapılması gereken müşteriler mevcuttur !!! ');
Form22.Show;
end else if Goster5 Then Begin
ShowMessage('Bu Ay (Son Karbon) Bakım yapılması gereken müşteriler mevcuttur !!! ');
Form22.Show;
end else
Form22.Show;
end;
Kullanıcı avatarı
naile
Admin
Mesajlar: 1873
Kayıt: 11 Haz 2003 10:11

Mesaj gönderen naile »

Sorgu sonucuna bakman lazım, eğer sorgu sonucunda herhangi bir kayıt dönüyorsa o ay için ödemesi olan kayıtlar var demektir. Bunun içinde open dan sonra şunu kullanmalısın:

Kod: Tümünü seç

if Query1.Eof=false then
  //uyarı mesajı

Artık hangisine göre sorgulayacağınıda sqlde kendin yazarsın.
ozcank
Üye
Mesajlar: 937
Kayıt: 28 Nis 2005 05:29

Mesaj gönderen ozcank »

Bu hataları alıyorum ne yapabilirim Delphi 5 kullandığım için mi?

[Error] SISGIR.pas(390): Undeclared identifier: 'StartOfAMonth'
[Error] SISGIR.pas(390): Undeclared identifier: 'YearOf'
[Error] SISGIR.pas(390): Undeclared identifier: 'MonthOf'
[Error] SISGIR.pas(391): Undeclared identifier: 'EndOfAMonth'

Kod: Tümünü seç

Query1.Close; 
Query1.SQL.Text := 'SELECT * FROM TablonunIsmi WHERE TTARIH BETWEEN :T1 AND :T2'; 
Query1.ParamByName('T1').AsDateTime := StartOfAMonth(YearOf(Date),MonthOf(Date)); 
Query1.ParamByName('T1').AsDateTime := EndOfAMonth(YearOf(Date),MonthOf(Date)); 
Query1.Open;
Kullanıcı avatarı
naile
Admin
Mesajlar: 1873
Kayıt: 11 Haz 2003 10:11

Mesaj gönderen naile »

Delphide kullandığın bir fonksiyonda eğer "Undeclared identifier" hatası alırsan F1 kullanıp o fonksiyonun hangi unit içinde olduğunu bulup, kendi unitinde uses kısmına o uniti yazman gerekir.

Bu tarih fonksiyonlarının içinde bulunduğu unit DateUtils. Şunu yapman gerekiyor kendi unitinin başında:

Kod: Tümünü seç

uses DateUtils;
fduman
Moderator
Mesajlar: 2749
Kayıt: 17 Ara 2004 12:02
Konum: Ankara

Mesaj gönderen fduman »

ozcank yazdı:Bu hataları alıyorum ne yapabilirim Delphi 5 kullandığım için mi?
Delphi 5'te DateUtils yoktu sanırım. Varsa bile Delphi 7'deki bütün function'lar olmayabilir.
Cevapla