Tarih/Saat değerleri çift duyarlıklı sayılar olarak depolandıkları için, bir ifadedeki Tarih/Saat değerlerini düzenlemeye çalıştığınızda hatalı biçimlendirme sonuçları alabilirsiniz. Bu makalede, belirli tarihleri görüntülemek ve zaman aralıklarını hesaplamak amacıyla nasıl ifade ve özel işlevler oluşturulacağı gösterilmektedir.
Microsoft, programlama örneklerini yalnızca gösterim amacıyla sağlar; örtülü veya açık garanti vermez. Bunlarla sınırlı olmamak kaydıyla, bu ifadeye satılabilirlik veya belirli bir amaca uygunluk zımni garantileri de dahildir. Bu makalede, gösterilen programlama dilinin yanı sıra yordam oluşturmak ve yordam hatalarını ayıklamak amacıyla kullanılan araçları kullanmayı bildiğiniz varsayılır. Microsoft destek mühendisleri, belirli bir yordamın işlevselliğinin açıklanmasına yardımcı olabilir, ancak gereksinimlerinizi karşılamaya yönelik olarak ek işlevsellik sağlamak veya yordamlar geliştirmek amacıyla bu örnekleri değiştirmezler.
Belirli tarihleri görüntüleme
Belirli tarihleri görüntülemek için
DateSerial() işlevini kullanarak bir tarihin gün, ay ve yıl bölümlerini düzenleyebilirsiniz. Örneğin, belirli tarihleri döndürmek üzere bir metin kutusunun
Denetim Kaynağı özelliğinde veya Hemen penceresinde aşağıdaki ifadeleri kullanabilirsiniz:
- Geçerli ay:
DateSerial(Year(Date()), Month(Date()), 1)
- Gelecek ay:
DateSerial(Year(Date()), Month(Date()) + 1, 1)
- Geçerli ayın son günü:
DateSerial(Year(Date()), Month(Date()) + 1, 0)
- Gelecek ayın son günü:
DateSerial(Year(Date()), Month(Date()) + 2, 0)
- Önceki ayın ilk günü:
DateSerial(Year(Date()), Month(Date())-1,1)
- Önceki ayın son günü:
DateSerial(Year(Date()), Month(Date()),0)
- Geçerli üç aylık dönemin ilk günü:
DateSerial(Year(Date()), Int((Month(Date()) - 1) / 3) * 3 + 1, 1)
- Geçerli üç aylık dönemin son günü:
DateSerial(Year(Date()), Int((Month(Date()) - 1) / 3) * 3 + 4, 0)
- Geçerli haftanın ilk günü (Pazar günü = 1. gün varsayarak):
Date() - WeekDay(Date()) + 1
- Geçerli haftanın son günü:
Date() - WeekDay(Date()) + 7
- Geçerli haftanın ilk günü (Seçenekler iletişim kutusundaki ayarlar kullanılarak):
Date() - WeekDay(Date(), 0) + 1
- Geçerli haftanın son günü:
Date() - WeekDay(Date(), 0) + 7
Mali yılı veya mali ayı hesaplama hakkında daha fazla bilgi için, Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
210249
(http://support.microsoft.com/kb/210249/
)
Access 2000'de belirli bir tarihin hangi mali yılda veya ayda olduğunu belirleme (Bu bağlantı, bir kısmı veya tamamı İngilizce olan içeriğe işaret edebilir)
DİKKAT Bu örnekteki adımları uygularsanız, Northwind.mdb adlı örnek veritabanı değiştirilir. Northwind.mdb dosyasını yedeklemek ve bu adımları veritabanının bir kopyasında uygulamak isteyebilirsiniz.
Zaman aralıklarını hesaplama
Saat değeri, 24 saatlik gün üzerinden bir kesir değeri olarak depolandığı için, 24 saatten daha büyük olan saat verilerini eklemeye, çıkarmaya, çarpmaya veya bölmeye çalıştığınızda hatalı biçimlendirme sonuçları alabilirsiniz.
Örneğin, iki tarih arasında geçen süreyi saat cinsinden bulmak için Visual Basic'te değerleri birbirinden çıkarırsanız yanlış bir değer elde edebilirsiniz. Bunu göstermek için, aşağıdaki kodu Hemen penceresine yazın ve doğru değer olan 53:00 saat yerine 0:00 saat değerini döndürdüğüne dikkat edin:
StartDate=#6/1/93 8:00AM#
EndDate=#6/3/93 1:00PM#
?Format(EndDate-StartDate,"hh:mm")
24 saatten daha büyük saat değerlerinin neden olduğu biçimlendirme sorunlarını gidermek için, Visual Basic'teki
Int() ve
CSng() işlevlerini kullanarak, hesaplanan bir saat değerini gün, saat, dakika ve saniye türünden farklı değişkenlere ayırabilirsiniz. Örneğin, aşağıdaki kod parçasını özel bir işleve ekleyerek ayrı saat değişkenleri oluşturabilirsiniz:
'-------------------------------------------------------------------
' Bu örnek kod bir zaman aralığını şu değerler için yedi değişkene
' ayırır: gün, saat, dakika, saniye, saat olarak toplam süre,
' dakika olarak toplam süre ve saniye olarak toplam süre.
'
' Aralık bağımsız değişkeni esnektir; tek bir değer, bir ifade
' veya bir alan başvurusu olabilir.
'-------------------------------------------------------------------
Dim totalhours As Long, totalminutes As Long, totalseconds As Long
Dim days As Long, hours As Long, minutes As Long, seconds As Long
Dim interval As Variant
days = Int(CSng(interval))
totalhours = Int(CSng(interval * 24))
totalminutes = Int(CSng(interval * 1440))
totalseconds = Int(CSng(interval * 86400))
hours = totalhours Mod 24
minutes = totalminutes Mod 60
seconds = totalseconds Mod 60
Totalhours, totalminutes ve totalseconds değişkenlerini, bir saat değerini tek bir saat birimi olarak görüntülemek için kullanabilirsiniz. Gün, saat, dakika ve saniye değişkenleri, bir saat değerini parçalara ayırmanıza olanak verir. Saat değerlerini farklı biçimlerde görüntülemek için, bu değişkenleri aşağıdaki örnek işlevlerde gösterildiği gibi bir arada kullanabilirsiniz:
- GetElapsedDays() işlevi, iki tarih/saat değeri arasında geçen zamanı hesaplar ve sonucu gün olarak görüntüler.
- GetElapsedTime() işlevi, saat değerleri arasında geçen zamanı hesaplar ve sonucu gün, saat, dakika ve saniye olarak görüntüler.
- GetTimeCardTotal() işlevi, bir tablodaki saat değerlerinden oluşan alanı toplar ve bu toplamı saat ve dakika olarak görüntüler.
GetElapsedDays() örnek işlevi
GetElapsedDays() işlevini oluşturmak için şu adımları izleyin:
- Northwind.mdb örnek veritabanını açın.
- Bir modül oluşturun ve henüz yoksa Tanımlamalar bölümüne aşağıdaki satırı yazın:
- Aşağıdaki işlevi yazın:
Function GetElapsedDays (interval)
Dim days As Long
days = Int(CSng(interval))
GetElapsedDays = days & " Gün "
End Function - Bu işlevi sınamak için, Orders tablosuna dayalı yeni bir sorgu oluşturun.
- QBE kılavuzuna aşağıdaki alanları ekleyin.
Field: ShippedDate
Show: True
Field: OrderDate
Show: True
Field: ElapsedTime: GetElapsedDays([ShippedDate]-[OrderDate])
Show: True - Sorguyu çalıştırın. ElapsedTime sütunu, Orders tablosundaki her bir kayıt için ShippedDate ile OrderDate alanları arasındaki gün sayısını görüntüler.
GetElapsedTime() örnek işlevi
GetElapsedTime() işlevini oluşturmak için şu adımları izleyin:
-
Aşağıdaki yapıda yeni bir tablo oluşturun ve bu tabloyu TimeLog olarak kaydedin.
Table: TimeLog
-----------------------
Field Name: StartTime
Data Type: Date/Time
Format: General Date
Field Name: EndTime
Data Type: Date/Time
Format: General Date - TimeLog tablosunu Veri Sayfası görünümünde görüntüleyin, aşağıdaki üç kaydı girin ve sonra da tabloyu kapatın:
StartTime EndTime
--------------------------------------------
5/10/95 4:57:00 PM 5/15/95 2:38:00 AM
5/11/95 10:17:31 AM 5/24/95 6:05:00 PM
5/18/95 9:16:43 AM 5/19/95 5:03:00 PM - Bir modül oluşturun ve Tanımlamalar bölümüne aşağıdaki satırı yazın:
- Aşağıdaki işlevi girin:
Function GetElapsedTime(interval)
Dim totalhours As Long, totalminutes As Long, totalseconds As _
Long
Dim days As Long, hours As Long, Minutes As Long, Seconds As Long
days = Int(CSng(interval))
totalhours = Int(CSng(interval * 24))
totalminutes = Int(CSng(interval * 1440))
totalseconds = Int(CSng(interval * 86400))
hours = totalhours Mod 24
Minutes = totalminutes Mod 60
Seconds = totalseconds Mod 60
GetElapsedTime = days & " Gün " & hours & " Saat " & Minutes & _
" Dakika " & Seconds & " Saniye "
End Function
NOT: GetElapsedTime işlevi bir tarih ve saat geçirmenizi gerektirir.
- Bu işlevi sınamak için, Otomatik Rapor Sihirbazı'nı kullanarak TimeLog tablosuna dayalı yeni bir rapor oluşturun.
- Tasarım görünümünde raporu görüntüleyin.
- TimeLog tablosunun ayrıntı bölümüne bir ilişkisiz metin kutusu ekleyin ve özelliklerini şu şekilde ayarlayın:
Textbox
---------------
Name: ElapsedTime
ControlSource: =GetElapsedTime([EndTime]-[StartTime])
Width: 3 inches - Rapora önizleme yapın. Her kaydın toplam süreyi gün, saat, dakika ve saniye olarak görüntülediğini unutmayın.
GetTimeCardTotal() örnek işlevi
GetTimeCardTotal() işlevini oluşturmak için şu adımları izleyin:
NOT: Bu makaledeki örnek kod Microsoft Data Access Objects kullanır. Bu kodun düzgün çalışması için Microsoft DAO 3.6 Nesne Kitaplığı'na başvurmalısınız. Bunu yapmak için, Visual Basic Editor'ın
Tools (Araçlar) menüsünde
References'ı (Başvurular) tıklatın ve
Microsoft DAO 3.6 Object Library (Microsoft DAO 3.6 Nesne Kitaplığı) onay kutusunun işaretli olduğunu doğrulayın.
- Aşağıdaki yapıda yeni bir tablo oluşturun ve bu tabloyu TimeCard olarak kaydedin.
Table: TimeCard
-----------------------
Field Name: Daily Hours
Data Type: Date/Time
Format: Short Time - TimeCard tablosunu Veri Sayfası görünümünde görüntüleyin, aşağıdaki dört kaydı girin ve sonra da tabloyu kapatın:
- Bir modül oluşturun ve henüz yoksa Tanımlamalar bölümüne aşağıdaki satırı yazın:
- Aşağıdaki işlevi yazın:
Function GetTimeCardTotal ()
Dim db As DAO.Database, rs As DAO.Recordset
Dim totalhours As Long, totalminutes As Long
Dim days As Long, hours As Long, minutes As Long
Dim interval As Variant, j As Integer
Set db = dbengine.workspaces(0).databases(0)
Set rs = db.OpenRecordset("timecard")
interval = #12:00:00 AM#
While Not rs.EOF
interval = interval + rs![Daily hours]
rs.MoveNext
Wend
totalhours = Int(CSng(interval * 24))
totalminutes = Int(CSng(interval * 1440))
hours = totalhours Mod 24
minutes = totalminutes Mod 60
GetTimeCardTotal = totalhours & " saat ve " & minutes & " dakika"
End Function -
Bu işlevi sınamak için, Hemen Penceresi'ne aşağıdaki satırı yazın ve ENTER tuşuna basın:
Hemen Penceresi'nde 32 saat ve 7 dakika görüntülenir.
Tarih/Saat değerlerini hesaplama hakkında daha fazla bilgi için, Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
210276
(http://support.microsoft.com/kb/210276/
)
Tarih/Saat verilerini depolama, hesaplama ve karşılaştırma (Bu bağlantı, bir kısmı veya tamamı İngilizce olan içeriğe işaret edebilir)