s.a.
firebird 1,5 veritabanı var. tarih alanım var date olarak tanımlı
dbedit1 e 10102006 yazcağım ve onexit olayında tarihi formatlamak istiyorum. onexit olayı çalışınca tarih şu şeklide olacak.araya ben ayrıraç koymayacağım. 10.10.2006. ama burada bir sorun var. bazı bilgisayaralarda tarih ayıracı nokta değil / .
ne yapmalıyım.
iyi çalışmalar.
tarih alanını formatlamak.
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Öncelikli olarak bilmen gereken önemli bir husus var.
- Eğer TDbEdit kullanarak girişi yaptığın Field tarih alanı (ftDate) ise onExit olayından hemen önce tablonun alan validate işlemi devreye girer ve yanlış girişlerde sana fırsat vermeden ValidateError exceptionu üretir.
- Bunun önüne geçmek için üç değişik yöntem izlenebilir.
1. Tarih alanı girişi TEdit ile yapılır ve işlem OnBeforePost olayında uygun tarih formatında ilgili alana aktarma yapılması sağlanır.
2. Tarih alanı girişi yapılacak TDBEdit; Try Except bloğu içerisine alınır, hata alındığında tarih tamamlama / düzeltme işlemi yapılır ve hata bertaraf edilerek yola devam edilmesi sağlanır.
3. TDBEdit için kendisinden yeni bir bilşen türetilerek bu işlemin bileşen tarafından otomatik yapılması sağlanabilir. (bileşen için örnek link)
- Bunların ışığında ek olarak sorunun cevabı olarak şunu bildirebilirim, tarih alanı girişi sırasında Enter, Escape, Backspace, '0'..'9' gibi kabul edilebilecek karakter ve kontroller dışındaki girişlerde basılan tuş ne olursa olsun onun yerine system tarih ayracını koydurabilirsin.
- DateSeparator kelimesi sistemin dil seçeneklerindeki tarih ayracı içeren sabitidir. Bunun benzeri sabitler ThousandSeparator, DecimalSeparator, DateSeparator, TimeSeparator olarak sıralanabilir. SysUtils uniti içerisinde bulunan fonksiyonlardır ve ilgili sabiti sistemden bulup bize sunarlar.
.. gibi bir örnek soruna cevap olacaktır.
- Başarılar...
- Eğer TDbEdit kullanarak girişi yaptığın Field tarih alanı (ftDate) ise onExit olayından hemen önce tablonun alan validate işlemi devreye girer ve yanlış girişlerde sana fırsat vermeden ValidateError exceptionu üretir.
- Bunun önüne geçmek için üç değişik yöntem izlenebilir.
1. Tarih alanı girişi TEdit ile yapılır ve işlem OnBeforePost olayında uygun tarih formatında ilgili alana aktarma yapılması sağlanır.
2. Tarih alanı girişi yapılacak TDBEdit; Try Except bloğu içerisine alınır, hata alındığında tarih tamamlama / düzeltme işlemi yapılır ve hata bertaraf edilerek yola devam edilmesi sağlanır.
3. TDBEdit için kendisinden yeni bir bilşen türetilerek bu işlemin bileşen tarafından otomatik yapılması sağlanabilir. (bileşen için örnek link)
- Bunların ışığında ek olarak sorunun cevabı olarak şunu bildirebilirim, tarih alanı girişi sırasında Enter, Escape, Backspace, '0'..'9' gibi kabul edilebilecek karakter ve kontroller dışındaki girişlerde basılan tuş ne olursa olsun onun yerine system tarih ayracını koydurabilirsin.
- DateSeparator kelimesi sistemin dil seçeneklerindeki tarih ayracı içeren sabitidir. Bunun benzeri sabitler ThousandSeparator, DecimalSeparator, DateSeparator, TimeSeparator olarak sıralanabilir. SysUtils uniti içerisinde bulunan fonksiyonlardır ve ilgili sabiti sistemden bulup bize sunarlar.
Kod: Tümünü seç
procedure TForm1.DBEdit1KeyPress(Sender: TObject; var Key: Char);
Const
KabulEdilen = ['0'..'9', #13, #8, #27];
begin
If NOT (Key in KabulEdilen) then Key := DateSeparator;
end;
- Başarılar...
Kod: Tümünü seç
procedure TForm1.DBEdit1KeyPress(Sender: TObject; var Key: Char);
Const
KabulEdilen = ['0'..'9', #13, #8, #27];
begin
If NOT (Key in KabulEdilen) then Key := DateSeparator;
end;
Peki hocam ben bişe sormak istiyorum. Girmiş olduğumuz dbedit nesnesinin içine sadece rakam giriliyo ancak bunun formatını tarih formatı gibi almasını nasıl sağlayabiliriz

Şimdiden Teşekkürler..
@erdoganturkmen
- Bu sorunun da iki yolu var. İlki TDbEdit'in evet EditMask'ı yok ama bağlı olduğu veritabanındaki alana ait EditMask özelliği var. TMaskEdit ile aynı özelliklere sahiptir.
- Veritabanı active edildikten sonra aşağıdaki tanımları yaparsan hem EditMask değerini hem de ekranda gösterilecek formu dilediğin şekle getirmiş olursun.
- İkinci yolu ise her girilen karakter ile string operasyon yapıp ilgili şekle getirirsin.
- Unutmadan ekleyim bilmeyenler olabilir... Burada mask verirken / (bölüm) işareti kullanıyoruz ama aslında dateseparator ile kendiliğinden değişecektir. tarih ayracı sistemde nokta ise bu bölüm işaretleri kendiliğinden nokta olarak görüntülenir...
- Bu sorunun da iki yolu var. İlki TDbEdit'in evet EditMask'ı yok ama bağlı olduğu veritabanındaki alana ait EditMask özelliği var. TMaskEdit ile aynı özelliklere sahiptir.
- Veritabanı active edildikten sonra aşağıdaki tanımları yaparsan hem EditMask değerini hem de ekranda gösterilecek formu dilediğin şekle getirmiş olursun.
Kod: Tümünü seç
AdoQuery1.FieldByName('Tarih').EditMask := '!99/99/00;1;_';
TDateTimeField( AdoQuery1.FieldByName('Tarih') ).DisplayFormat := 'dd/mm/yy';
- Unutmadan ekleyim bilmeyenler olabilir... Burada mask verirken / (bölüm) işareti kullanıyoruz ama aslında dateseparator ile kendiliğinden değişecektir. tarih ayracı sistemde nokta ise bu bölüm işaretleri kendiliğinden nokta olarak görüntülenir...
