Tarih Bulma
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Tarih Bulma
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.
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.
Tablonda sorgulama yaptıktan sonra çektiği ntarih bilgisini if le sorgulaman lazım;
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.
Kod: Tümünü seç
if MonthOf(Table1Tarih.AsDateTime)=MonthOf(Date) then
//Uyarı verir
Ş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.
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.
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:
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.
Kod: Tümünü seç
Select * From Tablo
Where Month(Tarih) = Month(GetDate())
Ama dediğim gibi ms sql server değilse bu fonksiyonlar çalışmayabilir.
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;
Ş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.
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.
SQL kullanman lazım, bunun için table yerine query kullanmalısın.
Yazacağın sql cümlesi şöyle olmalı:
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
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;
http://delphiturkiye.com/index.php?page=datetime.htm
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;
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;
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:
Artık hangisine göre sorgulayacağınıda sqlde kendin yazarsı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.
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'
[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;
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:
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;