Delphi Dünyası Facebook'ta

Kodbank İndir

! CODEBANK 2012 !

İNDİRMEK&DETAYLI BİLGİ ALMAK İÇİN BURAYI TIKLAYINIZ.

Gönderen Konu: tarih karşılaştırma  (Okunma sayısı 339 defa)

0 Üye ve 1 Ziyaretçi konuyu incelemekte.

Çevrimdışı Tahsin49

  • Delphi 1 Level 3
  • ***
  • İleti: 20
  • Rep: +0/-0
tarih karşılaştırma
« : 31 Ocak 2012 22:46:27 »
bir program üzerinde çalışıyorum
ancak bir konuyu bir türlü çözemedim çok yollara başvurdum yardım edermisiniz?

personel Tablom var bunun Fieldler
 
Adı Soyadı          Terfi Tarihi   
Ali                        18.02.1988
Mehmet               29.01.1976
Sultan                 30.04.2000  gibi
 burda programı açtığımda terfii gelen kişiler olduğu için uyarı alıyorum
ancak!
Bunun yanıda aynı zamanda Bilgisayarın sistem tarihi ile Teri tarihini karşılaştırıp ay olarak çakışanları
bir DBGride listelemesini DbGirid den seçtiğimde ise DBEdit lerde görerek editleri Bir başka Tableye kaydetmek istiyorum.


procedure TFTerfi.RzPageControl1MouseUp(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var s,isim:string;
dogumtarihi:TDate;
y1,m1,d1,y2,m2,d2,d3,kalangun:Word;
begin
// Doğum tarihinden belli bir süre kalanları listeleme
   //şu anki tarihin gün ve ayını al
   DecodeDate(Date,y1,m1,d1);
   d3:=d1+5;    //doğum gününe kaç gün kalanlar ,burda  7 gün alındı
      s:='select Distinct Sira,Adi,Unvani,Sicili,Sinifi,Kurumu,Gorevyeri,Derecesi,Ortalama,TTarihi,Giris,Kademe from per where Giris is not null';
      QPer.Close;
      QPer.SQL.Clear;
      QPer.SQL.Add(s);
      QPer.Open;
      QPer.First;
      while not QPer.Eof do begin
         isim:=QPer.FieldByName('Adi').AsString;
         dogumtarihi:=QPer.FieldByName('Giris').AsDateTime;
        //kişinin doğumtarihi gün ayını al
         DecodeDate(dogumtarihi, y2, m2, d2);
         //doğum günü hatırlatmada yıl önemli değildir
         //burda ay ve gün karşılaştırması yapılmalı
         if (m1=m2) and (d3>=d2) then begin
         kalangun:=d2-d1;
        s:='insert into Lis(isim,dogumtarihi,kalangun) values ('''+isim+''','''+
            DateToStr(dogumtarihi)+''','+inttostr(kalangun)+')';
            Query3.Close;
            Query3.SQL.Clear;
            Query3.SQL.Add(s);
            Query3.ExecSQL;
         end;
         QPer.Next;
      end;
   //listele
   s:='select * from Lis';
   Query2.Close;
   Query2.SQL.Clear;
   Query2.SQL.Add(s);
   Query2.Open;
 bu kodu kullanarak listeliyorum ancak geri dönüp geldikçe tekrar tekrar kaydediyor,
ayrıca DBGiritten seçerek DBEditlere aktaramıyorum.
 cevaplar için şimdiden teşekkürler. :klp:

Çevrimdışı Tahsin49

  • Delphi 1 Level 3
  • ***
  • İleti: 20
  • Rep: +0/-0
Ynt: tarih karşılaştırma
« Yanıtla #1 : 31 Ocak 2012 22:47:54 »
belirtmeyi unuttum
 Delphi7 ve vt paradoks  kullanıyorum

Çevrimdışı tawer1

  • Delphi 7 Level 4
  • ****
  • İleti: 333
  • Rep: +0/-0
  • Cinsiyet: Bay
Ynt: tarih karşılaştırma
« Yanıtla #2 : 01 Şubat 2012 09:33:49 »
Alıntı
Çok eski bir konu olmasına rağmen google üzerinden ulaştığım ve soruma yanıt bulamadığım için sorunun cevabını benden sonraki ziyaretçilerin faydalanması açısından yazma gereği hissediyorum.

Tablo yapısı;
CREATE TABLE `tablo` (
`alan1` varchar(350) NOT NULL,
`alan2` enum('1','0') NOT NULL,
UNIQUE KEY `alan1` (`alan1`)
)

Sorgu:
INSERT IGNORE INTO VALUES('alan1','alan2');

Sonuç:
alan1 alanına yapılan kayıtlar tablonun yapısı gereği uniq yani tekil olmak zorundadır ve bu yüzden insert "ekleme" yaparken hata vermesi durumunda IGNORE ile bu hata önlenir ve kayıt önceden eklenmişse eklenmez, yoksa yeni kayıt tabloya eklenir..
Seo yapılandırma servisi

Çevrimdışı Tahsin49

  • Delphi 1 Level 3
  • ***
  • İleti: 20
  • Rep: +0/-0
Ynt: tarih karşılaştırma
« Yanıtla #3 : 06 Şubat 2012 13:28:47 »
soruya detaylı cevap verecek yok galiba
tawer1 cevap için teşekkür  ancak ver tabanım paradoks

Çevrimdışı tawer1

  • Delphi 7 Level 4
  • ****
  • İleti: 333
  • Rep: +0/-0
  • Cinsiyet: Bay
Ynt: tarih karşılaştırma
« Yanıtla #4 : 06 Şubat 2012 13:49:01 »
paradox üniversite yıllarımda sadece 1 kez kullandım uniq varmı yok mu hatırlamıyorum kusura bakma ister veri tabanını mysql yap paradox senelerdir yenilemiyo kendini....
Seo yapılandırma servisi

Çevrimdışı omurolmez

  • Delphi 4 Level 3
  • ***
  • İleti: 177
  • Rep: +0/-0
  • Cinsiyet: Bay
  • Delphi Sürümü: Delphi 6
Ynt: tarih karşılaştırma
« Yanıtla #5 : 09 Şubat 2012 14:05:03 »
"Bence" diye başlayan ve "siz bilirsiniz" diye biten tavsiyelerim,

1. Sorunu(nu)z "tarih karşılaştırma" değil. Bu yüzden cevap alamıyor olabilirsiniz.
2. Tarih karşılaştırma kodunuz ve db kodlarınız doğru görünüyor. Programınızın genel mantığı hatalı, tekrar düşünebilirsiniz.
3. Formunuza TDbEdit bileşeni ekleyin ve DataSource özelliğine, DbGrid bileşeninizin bağlı olduğu DataSource bileşenini atayın. Field özelliğine de, tablonun görüntülenmesini istediğiniz alanını atayın. Böylece, DbGrid de seçili satırdaki alan değeri; DbEdit de görüntülenir.

4. İlk fırsatta Paradox u terkedin.
Ömür Ölmez

Çevrimdışı Tahsin49

  • Delphi 1 Level 3
  • ***
  • İleti: 20
  • Rep: +0/-0
Ynt: tarih karşılaştırma
« Yanıtla #6 : 09 Şubat 2012 22:53:24 »
         Sevgili omurolmaz tavsiyeniz için tşk.
         Ancak kodu yeniden yazarak ve yeni mantıklar yürüterek problemi çözmüştüm,
         Terfi gün ve ayı ile sistem deki gün ve ayı karşılaştırıp listeliyorum.
         Aslında  bana çakışan gün ve  aydan 20 gün önce uyarı vermesi gerekiyor bunu çözemedim hala kod üzerinde çeşitli uygulamalar yapıyorum henüz sonuca varamadım.
         DBEdite gelince Query yi sanal olarak kullandığı için DataSource ye bağlanan DbGrid de DBEdit te boş geçiyordu  ancak başka bir yöntemle dediğin gibi yen mantıklar yürüterek halletim.
         Paradox u terk  et diyorsunuz, ne tafsiye edersiniz, nasıl elde ederim.

İlginize tşk. saygılar

Çevrimdışı omurolmez

  • Delphi 4 Level 3
  • ***
  • İleti: 177
  • Rep: +0/-0
  • Cinsiyet: Bay
  • Delphi Sürümü: Delphi 6
Ynt: tarih karşılaştırma / Veritabanı Seçimi Üzerine
« Yanıtla #7 : 10 Şubat 2012 15:30:00 »
Delphi kitaplığında System.pas içinde TDateTime tanımı şu şekildedir.
Kod:  (Unknown Language)
  1. type
  2.   TDateTime = type Double;

Bunun anlamı şudur :
TDateTime tipinde, tam kısmı 1 güne denk gelir. Ondalık kısmı da 1 günün parçalarına.
Örneğin,
  * 0.5 sayısı 12 saati ifade eder.
  * 5/86400 sayısı 5 saniyeyi ifade eder (1 günde 86400 sn olduğu için).

Şimdi buna göre
Kod:  (Unknown Language)
  1. var
  2.   A, B, C :TDateTime;
  3.   DogumTarihi :TDateTime;
  4.   yil, ay, gun, ay2, gun2 :Word;
  5. begin
  6.   A :=Now;
  7.   B :=A+20;          //B değeri A dan 20 gün öncesidir
  8.   C :=A-5/86400; //C değeri A dan 5 saniye öncesidir
  9.   ShowMessageFmt( 'A: %s'#13#10'B: %s'#13#10'C: %s', [
  10.     DateTimeToStr(A), DateTimeToStr(B), DateTimeToStr(C) ]);
  11.  
  12.   DecodeDate( DogumTarihi, yil, ay, gun);
  13.   DecodeDate( Now + 20 , yil, ay2, gun2);
  14.  
  15.   if (ay=ay2) and (gun=gun2) then { 20 gün sonra doğumgünü };
  16.   { sadece tam 20 gün önce çalıştığında sonuç verir}
  17.  
  18.   if DayOfTheYear(DogumTarihi) >= DayOfTheYear( Now ) + 20 then;
  19.  { doğum gününe [0..20] gün kala çalıştığında sonuç verir }
  20. end;

Paradox 'un terkedilmesi gerektiğini Borland / Codegear firması nedenleriyle birlikte söylüyor. Palette hala bileşenler bulunuyor ama sadece geriye uyumluluk için (Pdox kullanan kodlarımızı yenileyinceye kadar geçici olarak kullanabilelim diye). Öte yandan tek exe uygulamalarda kullanmakta sıkıntı yok. Hatta Pdox/BDE tek exe uygulamalarında tüm istemci/sunuculardan hızlıdır ve SqlLite gibi programlarla kıyaslanır. Ancak hız tek başına yeterli değil. Pdox/BDE nin desteklediği SQL sınırlıdır ve kabul görmüş Ansi SQL standardından eksiktir.

Çok kullanıcılı ortamlarda,
Lisans ücretli yazılımlarda bilinenler Oracle, Microsoft SQL Server.
Ancak Microsoft SQL Server 'ın sınırlı sayıda kullanıcı için lisans ücreti gerektirmeyen sürümü var (Desktop Edition).
My SQL 5
Borland Interbase 7

Açık kaynaklı yazılımlarda,
Postgre SQL,
My SQL (Galiba 4 sürümüne kadar açık kaynak. Üstü sürümlerde çift lisans var galiba.),
Borland Interbase 6
Firebird

Tek kullanıcı / tek exe (In Process Server veya Embedded Server deniyor) uygulamalarda,
SQL Lite (Mozilla ve Chrome tarayıcıları (history, çerezler), Nokia tlf yazılımı vb çok geniş kullanımı var)
MySql Embedded,
Firebird Embedded

Şahsi kanaatim Firebird 'dir. Microsoft SQL Server 'dan ziyade Oracle 'a benzer(transaction logu yoktur. ACID temellidir). Tek eksiği partitioning (multi disk database) dir (Oracle bu konuda, işletim sistemi kurmadan ve diski formatlamadan doğrudan db ye bağlamaya kadar gitmiş).

MySQL 'in Firebird 'den eksiği View ve Stored Procedure desteği idi. Sonradan eklediler mi bilmiyorum. Ancak web üzerinde koşan hizmetler için bazı kolaylıkları, ilaveleri var. Hız ve kullanılan alanı farklı yönetebilmek için altı farklı veri kaydetme tipi var.

İstemci/Sunucu yazılımlarda dosya bazında şifreleme yoktur (Oracle ve Microsoft SQL Server dahil). Bunun yerine, sunucu bilgisayar fiziksel erişim önlenir. Veritabanında yetkilendirme yapılır ve her ihtimale karşı sunucu hizmeti LOCALSYSTEM yerine sadece veritabanı dosyalarına erişimi olan başka bir Windows kullanıcısı ile koşturulur ve sunucunun diğer portları korunur (Firewall).

Tabii ki siz, tablo kayıtlarınızda bazı alanlarınızı, destekledikleri kripto işlevleri ile yine de şifreleyebilirsiniz. Bu konuda MySql in hazır çözümleri Firebird 'den fazladır. Oracle ve Microsoft 'ta durum nedir bilmiyorum. Firebird ise buna cevap olarak, herhangibir dilde yazacağınız dll kitaplıklarınızdaki fonksiyonları, SQL ifadeleri içinde kullanabilme desteği sunar.

Diğer bir konu SSS Tunnel desteğidir. Firebird ve MySql, kolay ve geniş konfigürasyon desteği sağlar. Üçüncü parti açık kaynak SSS/Tunnel yazılımları ile kolayca entegre edilebilirler (G/Ç portları değiştirilebilir, vs, tam konfigürasyon).

Başka bir konu da, yedeklemedir. Sistem çalışır durumdayken yedekleme yapılabilmelidir. Yedekleme sırasında, yedekleme başladığı andaki veriler _!değişebilir!_, azalabilir çoğalabilir. Yedekleme, sorunsuz devam etmelidir (Yukarıdaki listedekilerin tümü bunu destekler).

Burada çok kullanıcılı ortamda seçimdeki püf nokta (başarının sırrı), veritabanı dosyasına, sadece tek bir programın (sadece sunucu hizmetinin) erişmesidir. Kalan herşey bunun üzerine inşa edilir. Pdox, Microsoft Access ve Sql Lite bu noktada kaybederler. Konu hakkında ayrıntılı bilgi hem bu forumda hem de webde mevcut.
« Son Düzenleme: 10 Şubat 2012 15:44:20 by omurolmez »
Ömür Ölmez

Çevrimdışı Tahsin49

  • Delphi 1 Level 3
  • ***
  • İleti: 20
  • Rep: +0/-0
Ynt: tarih karşılaştırma
« Yanıtla #8 : 13 Şubat 2012 22:11:14 »
omurolmez  merhaba

        Cevabın muhteşem, profesyonel birinden ancak bu beklenir.
        Kodunu kendi programıma uygulamaya çalışacam, algoritma birazda olsa bir fikir verdi
        Hazırladığım programda sizin gibi profesyonellerin algoritmalarından esinlenerek kendime göre birşeyler yapmaya çalışıyorum, zaten amatörce çalışıyorum, yaptığım programın ticari bir amacıda yok, çalıştığım ve emeklisi olduğum kuruma bir hizmet ve emeklilik günlerini boş geçirmemek için verdiğim hoş bir uğraş, ilginize sonsuz teşekkürler.
        İsterseniz hazırladığım programı bileşenleri ile birlikte göndereyim, hem algirotmasını ve hemde ara yüzünü  inceleyip yorumlayıp tavsiyelerinizle katkıda buluna bilirsiniz,  tabiki zamanınız varsa yinede :_sry zamanınızı çaldığım için saygılar...

Çevrimdışı barutali

  • Administrator
  • *****
  • İleti: 2.228
  • Rep: +54/-0
  • Cinsiyet: Bay
  • Falan filan ...
  • Delphi Sürümü: 2010 - XE2
Ynt: tarih karşılaştırma
« Yanıtla #9 : 14 Şubat 2012 09:49:51 »
konu ile alakasız olduğu kadar çokda alakalı bir şey söylemek istiyorum..

Paradoks tan kurtulun!



Amatör Küme Programcı

Çevrimdışı sabanakman

  • Global Moderatör
  • *****
  • İleti: 796
  • Rep: +13/-0
  • Cinsiyet: Bay
  • Delphi Sürümü: e) Hepsi
Ynt: tarih karşılaştırma
« Yanıtla #10 : 14 Şubat 2012 12:14:56 »
Şaban Şahin AKMAN

Derin olan kuyu değil kısa olan iptir