Funkcja DateAdd

Funkcja DateAddl() to jedna z funkcji Daty i Czasu . Tworzy datę przesuniętą o określony interwał czasu. 

Argumenty funkcji to:

    • Interwał – symbol jednostki daty, wartość typu String. 
      Możliwe opcje to:

        • yyyy – rok
        • q– kwartał
        • m– miesiąc
        • d– dzień
        • ww– tydzień
        • h– godzina
        • n– minuta
        • s– sekunda
    • Liczba-liczba jednostek czasu, wartość typu Double
    • Data-data początkowa, wartość typu Date

Wszystkie argumenty są obowiązkowe. 

Funkcja ta wygląda i działa tak samo w konstruktorze wyrażeń, jak i w VBA.

I na wszelki wypadek przypominam:

Data i czas to liczba


Data jako parametr kwerendy

Czy data/czas może być parametrem kwerendy? Oczywiście.
W dodatku najczęściej stosowana jest tu nie pojedyncza data tylko zakres dat od-do.

W siatce kwerendy wpisujemy kryterium:

kliknij, aby powiększyć

Zakres dat wpisujemy przy zastosowaniu słów kluczowych Between i And. Oczywiście można też wstawić tu kryterium w formie pola parametru, gdzie zamiast sztywnego wpisania dat – można wstawić je jako parametr np.
Between [DataOd] And [DataDO]
J
akoś jednak nie polecam, gdyż praktyka wskazuje, że tam gdzie użytkownik wpisuje daty – wcześniej czy później pojawią się problemy związane z formatem tej daty i w konsekwencji – będą błędy.

Jako parametry kwerendy można też wykorzystać pola formularza.
Np.

kliknij, aby powiększyć

W formularzu są 2 pola TOD i TDO, w których wpisujemy daty, a w kwerendzie odwołania do tych pól:
Between [Formularze]![SpisKasiazek]![TOD] And [Formularze]![SpisKasiazek]![TDO]
Oczywiście w porządnej aplikacji należałoby zabezpieczyć się przed wstawieniem tu innej wartości niż data, rozważyć możliwość, że jedno pole jest puste lub data DO jest mniejsza od daty OD itp., ale w formularzu da się bez problemu wprowadzić takie mechanizmy przed błędami.

A jak to wygląda w kodzie VBA? Na przykład tak.

Private Sub PolecenieSzukaj_Click()
Dim MojaKwerenda As String
Dim DataOD As Date
Dim DataDO As Date
DataOD=Me.TOD
DataDO=Me.TDO
MojaKwerenda = „SELECT TabelaKsiazki.NumerKatalogowy, TabelaKsiazki.Autor, TabelaKsiazki.Tytul, TabelaKsiazki.Cena, TabelaKsiazki.Dzial, TabelaKsiazki.DataP ” & _
„FROM TabelaKsiazki LEFT JOIN TabelaDzial ON TabelaKsiazki.Dzial = TabelaDzial.IDKat ” & _
„WHERE TabelaKsiazki.DataP  Between #” & DataOD &_
„# AND #” &  DataDO & „#;”
Me.RecordSource = MojaKwerenda
Me.Requery
End Sub

Teoretycznie – wszystko to powinno działać. A w praktyce – może się okazać, że nie zawsze i nie wszędzie. Na kilku komputerach – jest OK, a na jakimś jednym – nagle nie. Ostatnio taki problem pojawił się u mnie w aplikacje Excela – opisałam to tu:
Filtrowanie tabeli
Tego typu problemy zdarzały mi się już wcześniej. Teraz zapobiegawczo, wszędzie tam gdzie daty są kluczowym elementem – zamieniam je na liczby, gdyż:
Data i czas to liczba

W tym konkretnym przypadku:

    • w kwerendzie, w której wstawiam kryteria parametryczne – dokładam dodatkową kolumnę oparta o formułę:
      =Clng(DataP)
    • taką samą konwersję wykonuję w stosunku do dat w polach formularza
Private Sub PolecenieSzukaj_Click()
Dim MojaKwerenda As String
Dim DataOD As Date
Dim DataDO As Date
Dim LDataOD As Long
Dim LDataDO As Long
DataOD=Me.TOD
DataDO=Me.TDO
LDataOD=Clng(DataOD)
LDataDO=Clng(DataDO)
MojaKwerenda = „SELECT TabelaKsiazki.NumerKatalogowy, TabelaKsiazki.Autor, TabelaKsiazki.Tytul, TabelaKsiazki.Dzial,  ” & _ „TabelaKsiazki.DataP, CLng([DATAP]) AS LDataP ” & _
„FROM TabelaKsiazki LEFT JOIN TabelaDzial ON TabelaKsiazki.Dzial = TabelaDzial.IDKat ” & _
„WHERE TabelaKsiazki.LDataP  Between ” & LDataOD &_
” AND ” &  LDataDO & „;”
Me.RecordSource = MojaKwerenda
Me.Requery
End Sub

Oczywiście – tu już nie ma znaków # przed i po zmiennych – one są tylko w stosunku do zmiennych typu Data.


 

Data i czas to liczba

W każdej bazie dane w postaci daty stanowią bardzo ważny element danych. Jednocześnie jednak są bardzo wrażliwe na ingerencję użytkowników, a jeżeli zostaną źle wpisane, powodują wiele problemów.  Na wszelki wypadek więc przypominam, że data i czas w Accessie (i nie tylko) to po prosu liczba obliczona jako ilość dni od dnia 1 stycznia roku 1900. Opisałam to na moim blogu o Excelu:
Data i czas to liczba
Gdy nasze dane są zapisane prawidłowo – bez problemu dadzą się posortować, dodać, odjąć itd. Jak się przed tym zabezpieczyć?
W Accessie jest to prościej – można zaznaczyć arkuszu właściwości pola tekstowego formularza, że pole jest datą:

kliknij, aby powiększyć

Wówczas w widoku formularza po wejściu widoczny będzie znaczek kalendarza, który ułatwi wstawienie daty:

kliknij, aby powiększyć

Można też wstawić maskę wprowadzania:

kliknij, aby powiększyć

i wprowadzać dane zgodnie z tą maską:

kliknij, aby powiększyć

Generalnie warto pamiętać, że niezależnie od tego, jak ma wyglądać sformatowana data(dług, krótka itp.)  czy jak ustawiony jest system daty w Windowsie danego komputera – data powinna być wprowadzona w układzie:
RRRR-MM-DD
w ten sposób – zawsze będzie widziana jako data, a nie jako tekst.