Makale numarası: 210604 - Son Gözden Geçirme: 12 Mart 2007 Pazartesi - Gözden geçirme: 5.1

Access'te Tarih/Saat değerlerini hesaplama ve görüntüleme işlevleri

Sistem İpucuBu makale, kullandığınızdan farklı bir işletim sistemine yöneliktir. Sizinle ilgili olmayabilecek makale içeriği devre dışı bırakıldı.
Orta: Temel makro, kodlama ve birlikte çalışabilirlik becerileri gerektirir.

Bu Sayfada

Hepsini aç | Hepsini kapa

™zet

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.

Daha fazla bilgi

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:
  1. Northwind.mdb örnek veritabanını açın.
  2. Bir modül oluşturun ve henüz yoksa Tanımlamalar bölümüne aşağıdaki satırı yazın:
     Option Explicit
  3. Aşağıdaki işlevi yazın:
     Function GetElapsedDays (interval)
        Dim days As Long
    
        days = Int(CSng(interval))
        GetElapsedDays = days & " Gün "
     End Function
  4. Bu işlevi sınamak için, Orders tablosuna dayalı yeni bir sorgu oluşturun.
  5. QBE kılavuzuna aşağıdaki alanları ekleyin.
        Field: ShippedDate
        Show: True
    
        Field: OrderDate
        Show: True
    
        Field: ElapsedTime: GetElapsedDays([ShippedDate]-[OrderDate])
        Show: True
  6. 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:
  1. 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
  2. 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
  3. Bir modül oluşturun ve Tanımlamalar bölümüne aşağıdaki satırı yazın:
     Option Explicit
  4. 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.
  5. Bu işlevi sınamak için, Otomatik Rapor Sihirbazı'nı kullanarak TimeLog tablosuna dayalı yeni bir rapor oluşturun.
  6. Tasarım görünümünde raporu görüntüleyin.
  7. 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
  8. 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.

  1. 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
  2. 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:
        8:15
        7:37
        8:12
        8:03
  3. Bir modül oluşturun ve henüz yoksa Tanımlamalar bölümüne aşağıdaki satırı yazın:
     Option Explicit
  4. 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
  5. Bu işlevi sınamak için, Hemen Penceresi'ne aşağıdaki satırı yazın ve ENTER tuşuna basın:
     ?GetTimeCardTotal()

    Hemen Penceresi'nde 32 saat ve 7 dakika görüntülenir.

Referanslar

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)

Bu makaledeki bilginin uygulandığı durum:
  • Microsoft Office Access 2007
  • Microsoft Office Access 2003
  • Microsoft Access 2002 Standard Edition
  • Microsoft Access 2000 Standard Edition
Anahtar Kelimeler: 
kbhowto kbprogramming KB210604