A dátum- és időértékek kiszámítására és megjelenítésére szolgáló függvények az Access programban

Figyelem! A cikkben ismertetettek alkalmazásához a makrókkal, a programkódkészítéssel és az együttműködési mechanizmusokkal kapcsolatos alapismeretek szükségesek.


Összefoglaló

Mivel a rendszer a dátum- és időértéket dupla pontosságú számként tárolja, előfordulhat, hogy amikor a dátum és idő értékét kifejezésben próbálja meg módosítani, a formázási eredmény helytelen lesz. A cikk bemutatja, hogy meghatározott dátumok megjelenítéséhez és időtartamok kiszámításához hogyan hozhat létre kifejezéseket és egyéni függvényeket.


A Microsoft csak szemléltetési célból ad közre programozási példákat, és azokra – beleértve a forgalomba hozhatóságot és az adott célra való megfelelőséget is – sem törvényi, sem másféle garanciát nem vállal. A cikkben ismertetettek alkalmazásához a szemléltetésre szolgáló programozási nyelvben, valamint az eljárások létrehozására és a velük kapcsolatos hibakeresésre szolgáló eszközök használatában való jártasság szükséges. A Microsoft támogatási szakemberei segítséget nyújthatnak egy-egy adott eljárás funkciójának megértésében, de funkcióbővítési célból nem módosítják a példákat, és nem készítenek az egyéni igényeknek megfelelő eljárásokat.

További információ

Meghatározott dátumok megjelenítése

Meghatározott dátumok megjelenítéséhez a DateSerial() függvény segítségével módosíthatja a dátumban szereplő napot, hónapot és évet. Az alábbi kifejezések használatával meghatározott dátumot jeleníthet meg például egy szövegmező Mező vagy kifejezés tulajdonságában vagy a parancsértelmező ablakban:

  • Az aktuális hónap:

    DateSerial(Year(Date()), Month(Date()), 1)

  • A következő hónap:

    DateSerial(Year(Date()), Month(Date()) + 1, 1)

  • Az aktuális hónap utolsó napja:

    DateSerial(Year(Date()), Month(Date()) + 1, 0)

  • A következő hónap utolsó napja:

    DateSerial(Year(Date()), Month(Date()) + 2, 0)

  • Az előző hónap első napja:

    DateSerial(Year(Date()), Month(Date())-1,1)

  • Az előző hónap utolsó napja:

    DateSerial(Year(Date()), Month(Date()),0)

  • Az aktuális negyedév első napja:

    DateSerial(Year(Date()), Int((Month(Date()) - 1) / 3) * 3 + 1, 1)

  • Az aktuális negyedév utolsó napja:

    DateSerial(Year(Date()), Int((Month(Date()) - 1) / 3) * 3 + 4, 0)

  • Az aktuális hét első napja (feltételezve, hogy a hét első napja vasárnap):

    Date() - WeekDay(Date()) + 1

  • Az aktuális hét utolsó napja:

    Date() - WeekDay(Date()) + 7

  • Az aktuális hét első napja (a Beállítások párbeszédpanel beállításainak használatával):

    Date() - WeekDay(Date(), 0) + 1

  • Az aktuális hét utolsó napja:

    Date() - WeekDay(Date(), 0) + 7

A pénzügyi év és hónap kiszámításáról a Microsoft Tudásbázis alábbi cikkében tájékozódhat:

210249 Adott dátumhoz tartozó pénzügyi év vagy hónap meghatározása az Access 2000 programban (Előfordulhat, hogy a hivatkozás részben vagy teljes egészében angol nyelvű tartalomra mutat.)FIGYELMEZTETÉS: Ha végrehajtja a példában szereplő lépéseket, azzal módosítja a Northwind.mdb mintaadatbázist. Ha kívánja, a Northwind.mdb fájlról készítsen biztonsági másolatot, és a lépéseket a másolaton hajtsa végre.

Időtartamok kiszámítása

Mivel az időértékeket a rendszer a 24 órás nap törtrészeként tárolja, a 24 óránál nagyobb időadatok összeadásakor, kivonásakor, szorzásakor és osztásakor előfordulhat, hogy a formázási eredmény helytelen.


Ha a Visual Basic programban például két dátum között eltelt óraszámot az értékek kivonásával szeretne kiszámítani, előfordulhat, hogy az eredmény helytelen lesz. Ennek szemléltetéséhez írja be az alábbi kódot a parancsértelmező ablakba, és figyelje meg, hogy 0:00 óra jelenik meg a helyes 53:00 óra helyett:

   KezdőDátum=#1993/06/01 8:00#
ZáróDátum=#1993/06/03 13:00#
?Format(ZáróDátum-KezdőDátum,"hh:mm")


A 24 óránál nagyobb időértékek formázási problémáinak megoldásához használja a Visual Basic Int() vagy CSng() függvényét, amelyek segítségével a kiszámított időértéket különálló, a napot, az órát, a percet és a másodpercet tartalmazó változókra oszthatja fel. A különálló időváltozókat például az alábbi kódrészlettel hozhatja létre az egyéni függvényben:

 '-------------------------------------------------------------------
' Ez a mintakód az időtartamot hét különálló változóra osztja
' a következők szerint: nap, óra, perc, másodperc, összes idő
' (óra), összes idő (perc), összes idő (másodperc).
'
' Az időtartam argumentum rugalmas, lehet egyetlen érték,
' egy kifejezés vagy egy mezőhivatkozás.
'-------------------------------------------------------------------

Dim összesóra As Long, összesperc As Long, összesmásodperc As Long
Dim napok As Long, órák As Long, percek As Long, másodpercek As Long
Dim időtartam As Variant

napok = Int(CSng(időtartam))
összesóra = Int(CSng(időtartam * 24))
összesperc = Int(CSng(időtartam * 1440))
összesmásodperc = Int(CSng(időtartam * 86400))
órák = összesóra Mod 24
percek = összesperc Mod 60
másodpercek = összesmásodperc Mod 60


Az összesóra, az összesperc és az összesmásodperc változók segítségével az időértéket egyetlen számként jelenítheti meg. A napok, az órák, a percek és a másodpercek változók az időérték egyes részeinek megjelenítésére használhatók. Ha az időértékeket más formátumban szeretné megjeleníteni, a változókat az alábbi mintafüggvényekben látható módon összefűzheti:

  • Az ElteltNapok() függvénnyel két dátum vagy időpont között eltelt időtartam számítható ki, ahol az eredmény napban jelenik meg.

  • Az ElteltIdő() függvénnyel két dátum vagy időpont között eltelt időtartam számítható ki, ahol az eredmény napban, órában, percben és másodpercben jelenik meg.

  • Az Összidő() függvénnyel az időértékeket tartalmazó mezők egy táblában összesíthetők, ahol az összidő órában és percben jelenik meg.

Az ElteltNapok() mintafüggvény

Az ElteltNapok() függvény létrehozásához hajtsa végre az alábbi lépéseket:

  1. Nyissa meg a Northwind.mdb mintaadatbázist.

  2. Hozzon létre egy modult, és a deklarációs részbe írja be az alábbi sort, ha az még nem szerepel benne:

     Option Explicit
  3. Írja be az alábbi függvényt:

     Function ElteltNapok (időtartam)
    Dim napok As Long

    napok = Int(CSng(időtartam))
    ElteltNapok = napok & " nap "
    End Function
  4. A függvény teszteléséhez hozzon létre egy új lekérdezést a Rendelések tábla alapján.

  5. A QBE adatrácsban adja hozzá az alábbi mezőket.
    Mező: Szállítási dátum
    Megjelenítés: Bejelölve

    Mező: Rendelve
    Megjelenítés: Bejelölve

    Mező: Eltelt idő: ElteltNapok([Szállítási dátum]-[Rendelve])
    Megjelenítés: Bejelölve

  6. Futtassa a lekérdezést. Az Eltelt idő oszlopban a Rendelések tábla minden rekordjára vonatkozóan a Szállítási dátum és a Rendelve mező dátumai között eltelt napok száma látható.

Az ElteltIdő() mintafüggvény

Az ElteltIdő() függvény létrehozásához hajtsa végre az alábbi lépéseket:

  1. Hozzon létre egy új táblát az alábbi struktúrával, és mentse Időnapló néven.
    Tábla: Időnapló
    -----------------------
    Mezőnév: Kezdő időpont
    Adattípus: Dátum/Idő
    Formátum: Általános dátum

    Mezőnév: Záró időpont
    Adattípus: Dátum/Idő
    Formátum: Általános dátum

  2. Tekintse meg az Időnapló táblát Adatlap nézetben, írja be az alábbi három rekordot, majd zárja be a táblát:
    Kezdő időpont Záró időpont
    -----------------------------------------------
    1995.05.10. 16:57:00 1995.05.15. 2:38:00
    1995.5.11. 10:17:31 1995.05.24. 18:05:00
    1995.05.18. 9:16:43 1995.05.19. 17:03:00

  3. Hozzon létre egy modult, és írja be az alábbi sort a deklarációs szakaszba:

     Option Explicit
  4. Írja be az alábbi függvényt:

     Function ElteltIdő(időtartam)

    Dim összesóra As Long, összesperc As Long, összesmásodperc As _
    Long
    Dim napok As Long, órák As Long, percek As Long, másodpercek As Long

    napok = Int(CSng(időtartam))
    összesóra = Int(CSng(időtartam * 24))
    összesperc = Int(CSng(időtartam * 1440))
    összesmásodperc = Int(CSng(időtartam * 86400))
    órák = összesóra Mod 24
    percek = összesperc Mod 60
    másodpercek = összesmásodperc Mod 60

    ElteltIdő = napok & " nap " & órák & " óra " & percek & _
    " perc " & másodpercek & " másodperc "

    End Function


    Megjegyzés: Az ElteltIdő függvény számára dátumot és időpontot kell megadni.

  5. A függvény teszteléséhez hozzon létre egy új, az Időnapló táblán alapuló kimutatást a Jelentés varázsló segítségével.

  6. Tekintse meg a kimutatást Tervező nézetben.

  7. Az Időnapló tábla adatokat tartalmazó szakaszában adjon hozzá egy kötetlen szövegmezőt, és a tulajdonságait állítsa be az alábbiak szerint:
    Beviteli mező
    ---------------
    Név: Eltelt idő
    Mező vagy kifejezés: =ElteltIdő([Záró időpont]-[Kezdő időpont])
    Szélesség: 7,6 cm

  8. Tekintse meg a kimutatás előnézetét. A rekordokban a teljes eltelt idő napban, órában, percben és másodpercben jelenik meg.

Az Összidő() mintafüggvény

Az Összidő() függvény létrehozásához hajtsa végre az alábbi lépéseket:


Megjegyzés: A cikkben szereplő mintakód a Microsoft Data Access Objects alkalmazást használja. A kód megfelelő futtatásához hivatkoznia kell a Microsoft DAO 3.6 objektumtárára. Ehhez a Visual Basic Editor programban kattintson a Tools (Eszközök) menü References (Hivatkozások) parancsára, és győződjön meg arról, hogy a Microsoft DAO 3.6 Object Library (Microsoft DAO 3.6 objektumtára) jelölőnégyzet be van jelölve.

  1. Hozzon létre egy új táblát az alábbi struktúrával, és mentse Időkimutatás néven.
    Tábla: Időkimutatás
    -----------------------
    Mezőnév: Napi óraszám
    Adattípus: Dátum/Idő
    Formátum: Rövid idő

  2. Tekintse meg az Időkimutatás táblát Adatlap nézetben, írja be az alábbi négy rekordot, majd zárja be a táblát:
    8:15
    7:37
    8:12
    8:03

  3. Hozzon létre egy modult, és a deklarációs részbe írja be az alábbi sort, ha az még nem szerepel benne:

     Option Explicit
  4. Írja be az alábbi függvényt:

     Function Összidő ()

    Dim db As DAO.Database, rs As DAO.Recordset
    Dim összesóra As Long, összesperc As Long
    Dim napok As Long, órák As Long, percek As Long
    Dim időtartam As Variant, j As Integer

    Set db = dbengine.workspaces(0).databases(0)
    Set rs = db.OpenRecordset("időkimutatás")
    időtartam = #12:00:00#
    While Not rs.EOF
    időtartam = időtartam + rs![Napi óraszám]
    rs.MoveNext
    Wend
    összesóra = Int(CSng(időtartam * 24))
    összesperc = Int(CSng(időtartam * 1440))
    órák = összesóra Mod 24
    percek = összesperc Mod 60

    Összidő = összesóra & " óra és " & percek & " perc"

    End Function
  5. A függvény teszteléséhez írja be az alábbi sort a parancsértelmező ablakba, majd nyomja le az ENTER billentyűt:

     ?GetTimeCardTotal()


    A parancsértelmező ablakban 32 óra és 7 perc jelenik meg.

Hivatkozások

A dátum- és időértékek kiszámításáról a Microsoft Tudásbázis alábbi cikkében tájékozódhat:

210276 Dátum- és időadatok tárolása, kiszámítása és összehasonlítása a Microsoft Access programban

További segítségre van szüksége?

Ismeretek bővítése
Oktatóanyagok megismerése
Új szolgáltatások listájának lekérése
Csatlakozás a Microsoft Insiderek

Hasznos volt az információ?

Köszönjük visszajelzését!

Köszönjük visszajelzését. Jobbnak látjuk, ha az Office egyik támogatási szakemberéhez irányítjuk.

×