24-04-2008, 20:17
![[Resim: yasvk8.jpg]](http://img241.imageshack.us/img241/5159/yasvk8.jpg)
Merhaba;
Aşağıdaki örneği "DateDiff" fonksiyonuna ve formu boşaltarak temizlemeye basit bir örnek olması amacıyla hazırladım.
Bilindiği gibi "DateDiff", tarih aralığını veren bir fonksiyondur ve iki tarih arasındaki farkı gün, ay, yıl, saat, saniye, hafta v.s. cinslerinden gösterebiliriz. Bu fonksiyonu sorgularda, denetimlerimizin "denetim kaynağında" veya VBA kodlarında kullanabiliriz. Ancak kullanım yerine göre aralarında ufak tefek farklılıklar oluyor. Örneğin formumuzda bir alanın denetim kaynağına yazacağımız zaman
=DateDiff("tarihcinsi";[tarih1];[tarih2])
olarak yazabilirken VBA kodlarında
tanımlayacağımızalan = DateDiff("tarihcinsi",[tarih1],[tarih2])
olarak yazmak gerekebiliyor.
Bununla ilgili ayrıntılı bilgiye http://office.microsoft.com/tr-tr/access...11055.aspx adresinden ulaşabilirsiniz.
Yaptığım basit örneğin hazırlanma aşamalarını kısaca anlatırsam sanırım daha doyurucu olur:
Önce tasarım görünümünde boş bir form açtım ve buraya iki tane metin kutusu yerleştirdim. İlk metin kutusuna "yas", ikincisine "bugun" adını verdim. Her iki metin kutusunun giriş maskesi özelliğini de "Kısa Tarih" yaptıktan sonra "bugun" adlı metin kutusunun "Varsayılan Değer" özelliğine =Date() yazdım. Amacım "yas" metin kutusuna doğum tarihimizi girdiğimiz zaman, "bugun" adlı metin kutusundaki (varsayılan değeri bugünün tarihi olan) tarihten "yas" adındaki metin kutusuna girdiğimiz tarihi çıkartarak bize aradaki farkı vermesiydi. Sonucu da birazdan oluşturacağım ilişkisiz metin kutularında yıl, ay, hafta, gün ve saat cinsinde gösterecektim. Bu yüzden -ve uygulamanın biraz daha profesyonel bir görünüm alması için- "bugun" adlı metin kutusunun (form üzerinde görünmemesi için) Biçim sekmesindeki Görünür özelliğini "Hayır" olarak ayarladım. Daha sonra alt alta 5 tane ilişkisiz metin kutusu yerleştirip bunlara sırasıyla "yil", "ay", "hafta", "gun", "saat" adlarını verdim. "yas" adındaki metin kutusuna doğum tarihimizi girdiğimiz zaman (daha önce gizlediğimiz) "bugun" adlı metin kutusundaki tarihten bu tarihi çıkartarak oluşturduğum ilişkisiz metin kutularında benim belirleyeceğim tarih cinsinden farkları göstermesi için her metin kutusunun adı için bir DateDiff fonksiyonu tanımlayarak, bu fonksiyonların tamamını "yas" adlı metin kutusunun "Çıkıldığında" olay yordamına yazdım. (Bu alana doğum tarihini yazdıktan sonra, alandan çıkar çıkmaz, "yil, ay, hafta, gun, saat" metin kutularında sonuç hemen görüntülenecekti).
Sonuçta "yas" adlı metin kutusunun "Çıkıldığında" olay yordamında şu kodlar oluştu:
Yukarıda görüldüğü gibi yılı "yyyy", ayı "m" v.s. olarak tanımladık. Yani kısaca iki tarih arasındaki farkı yil, ay, hafta, gun ve saat cinsinden almak için bu yola başvurduk.
Daha sonra form üzerinde doğum tarihimizi girip hesaplamamız yapıldıktan sonra tekrar formun temizlenerek yeni bir doğum tarihi girilebilmesi amacıyla alanların boşaltılması için bir buton oluşturdum ve butonun "Tıklatıldığında" olay yordamına aşağıdaki kodları yazdım:
Bunun anlamı şuydu: "Ben -oluşturduğum ve "Komut20" adındaki- butona tıkladığım zaman bana yas, yil, ay, hafta, gun, saat alanlarını boş olarak göster."
Formun, alanların ve bazı denetimlerin biçimleriyle oynayıp, gözüme hoş görünen bir biçime soktuktan sonra yil, ay, hafta, gun, saat alanları üzerinde işlem yapmayacağımdan (zaten kodlarla otomatik olarak yapıldığından) ve "yas" alanına doğum tarihini girip "Enter" tuşuyla çıktıktan sonra imlecin bu alanlara gitmemesi amacıyla bu alanların Veri sekmesinden Etkin özelliğini "Hayır", Kilitli özelliğini "Evet" yaptım.
Son olarak Araçlar>Başlangıç yoluyla açılan pencerede bütün onay kutularının işaretini kaldırıp -uygulama açıldığında doğrudan "yasmatik" adını verdiğim formun açılması için "Form/Sayfa Görüntüle" alanına "yasmatik" formunu girdim. Böylelikle uygulamayı açtığımız zaman doğrudan formumuz ekrana gelecek ve diğer veritabanı penceresi, kısayollar, menüler gibi özellikler gözükmeyecek. (Ben yine de kolaylık ve tercih edilebilirlik açısından hem doğrudan formla açılan hem de tüm izinleri açık olan iki uygulamayı da aşağıya ekledim).
NOT: Gerçi çok bilinen bir şey ama doğrudan form görünümüyle açılan uygulamaları tasarım görünümünde açmak ve inceleyebilmek için Shift tuşunu basılı tutarak açabiliriz.
Saygılarımla...
Aşağıdaki örneği "DateDiff" fonksiyonuna ve formu boşaltarak temizlemeye basit bir örnek olması amacıyla hazırladım.
Bilindiği gibi "DateDiff", tarih aralığını veren bir fonksiyondur ve iki tarih arasındaki farkı gün, ay, yıl, saat, saniye, hafta v.s. cinslerinden gösterebiliriz. Bu fonksiyonu sorgularda, denetimlerimizin "denetim kaynağında" veya VBA kodlarında kullanabiliriz. Ancak kullanım yerine göre aralarında ufak tefek farklılıklar oluyor. Örneğin formumuzda bir alanın denetim kaynağına yazacağımız zaman
=DateDiff("tarihcinsi";[tarih1];[tarih2])
olarak yazabilirken VBA kodlarında
tanımlayacağımızalan = DateDiff("tarihcinsi",[tarih1],[tarih2])
olarak yazmak gerekebiliyor.
Bununla ilgili ayrıntılı bilgiye http://office.microsoft.com/tr-tr/access...11055.aspx adresinden ulaşabilirsiniz.
Yaptığım basit örneğin hazırlanma aşamalarını kısaca anlatırsam sanırım daha doyurucu olur:
Önce tasarım görünümünde boş bir form açtım ve buraya iki tane metin kutusu yerleştirdim. İlk metin kutusuna "yas", ikincisine "bugun" adını verdim. Her iki metin kutusunun giriş maskesi özelliğini de "Kısa Tarih" yaptıktan sonra "bugun" adlı metin kutusunun "Varsayılan Değer" özelliğine =Date() yazdım. Amacım "yas" metin kutusuna doğum tarihimizi girdiğimiz zaman, "bugun" adlı metin kutusundaki (varsayılan değeri bugünün tarihi olan) tarihten "yas" adındaki metin kutusuna girdiğimiz tarihi çıkartarak bize aradaki farkı vermesiydi. Sonucu da birazdan oluşturacağım ilişkisiz metin kutularında yıl, ay, hafta, gün ve saat cinsinde gösterecektim. Bu yüzden -ve uygulamanın biraz daha profesyonel bir görünüm alması için- "bugun" adlı metin kutusunun (form üzerinde görünmemesi için) Biçim sekmesindeki Görünür özelliğini "Hayır" olarak ayarladım. Daha sonra alt alta 5 tane ilişkisiz metin kutusu yerleştirip bunlara sırasıyla "yil", "ay", "hafta", "gun", "saat" adlarını verdim. "yas" adındaki metin kutusuna doğum tarihimizi girdiğimiz zaman (daha önce gizlediğimiz) "bugun" adlı metin kutusundaki tarihten bu tarihi çıkartarak oluşturduğum ilişkisiz metin kutularında benim belirleyeceğim tarih cinsinden farkları göstermesi için her metin kutusunun adı için bir DateDiff fonksiyonu tanımlayarak, bu fonksiyonların tamamını "yas" adlı metin kutusunun "Çıkıldığında" olay yordamına yazdım. (Bu alana doğum tarihini yazdıktan sonra, alandan çıkar çıkmaz, "yil, ay, hafta, gun, saat" metin kutularında sonuç hemen görüntülenecekti).
Sonuçta "yas" adlı metin kutusunun "Çıkıldığında" olay yordamında şu kodlar oluştu:
Visual Basic
- Private Sub yas_Exit(Cancel As Integer)
- yil = DateDiff("yyyy", [yas], [bugun])
- ay = DateDiff("m", [yas], [bugun])
- hafta = DateDiff("ww", [yas], [bugun])
- gun = DateDiff("d", [yas], [bugun])
- saat = DateDiff("h", [yas], [bugun])
- End Sub
Yukarıda görüldüğü gibi yılı "yyyy", ayı "m" v.s. olarak tanımladık. Yani kısaca iki tarih arasındaki farkı yil, ay, hafta, gun ve saat cinsinden almak için bu yola başvurduk.
Daha sonra form üzerinde doğum tarihimizi girip hesaplamamız yapıldıktan sonra tekrar formun temizlenerek yeni bir doğum tarihi girilebilmesi amacıyla alanların boşaltılması için bir buton oluşturdum ve butonun "Tıklatıldığında" olay yordamına aşağıdaki kodları yazdım:
Visual Basic
- Private Sub Komut20_Click()
- Me.yas = ""
- Me.yil = ""
- Me.ay = ""
- Me.hafta = ""
- Me.gun = ""
- Me.saat = ""
- End Sub
Bunun anlamı şuydu: "Ben -oluşturduğum ve "Komut20" adındaki- butona tıkladığım zaman bana yas, yil, ay, hafta, gun, saat alanlarını boş olarak göster."
Formun, alanların ve bazı denetimlerin biçimleriyle oynayıp, gözüme hoş görünen bir biçime soktuktan sonra yil, ay, hafta, gun, saat alanları üzerinde işlem yapmayacağımdan (zaten kodlarla otomatik olarak yapıldığından) ve "yas" alanına doğum tarihini girip "Enter" tuşuyla çıktıktan sonra imlecin bu alanlara gitmemesi amacıyla bu alanların Veri sekmesinden Etkin özelliğini "Hayır", Kilitli özelliğini "Evet" yaptım.
Son olarak Araçlar>Başlangıç yoluyla açılan pencerede bütün onay kutularının işaretini kaldırıp -uygulama açıldığında doğrudan "yasmatik" adını verdiğim formun açılması için "Form/Sayfa Görüntüle" alanına "yasmatik" formunu girdim. Böylelikle uygulamayı açtığımız zaman doğrudan formumuz ekrana gelecek ve diğer veritabanı penceresi, kısayollar, menüler gibi özellikler gözükmeyecek. (Ben yine de kolaylık ve tercih edilebilirlik açısından hem doğrudan formla açılan hem de tüm izinleri açık olan iki uygulamayı da aşağıya ekledim).
NOT: Gerçi çok bilinen bir şey ama doğrudan form görünümüyle açılan uygulamaları tasarım görünümünde açmak ve inceleyebilmek için Shift tuşunu basılı tutarak açabiliriz.
Saygılarımla...



