Typy danych w kodzie VBA

Początek kodu każdej funkcji to deklaracja zmiennych. Najczęściej stosowane typy danych to:

Boolean Typ logiczny.
Przyjmuje dwie wartości:
True – prawda
False – fałsz   
Integer typ całkowity.
Obejmuje liczby całkowite z zakresu -32 768 do 32 767
Long Typ całkowity długi.
Obejmuje liczby całkowite z zakresu -2 147 483 648 do
2 147 483 647
Currency Typ wautowy.
Obejmuje liczby rzeczywiste z 15 cyfr przed i 4 po przecinku
Single Typ rzeczywisty pojedynczej precyzji.
Obejmuje liczby rzeczywiste z zakresu:
od -3.402823 E38 do -1.401298E-45
oraz od 1.401298E-45 do 3.402823E38
Double Typ rzeczywisty podwójnej precyzji.
Obejmuje liczby rzeczywiste z zakresu:
od -1.79769313486231E308 do -4.94065645841247E-324
oraz od 4.94065645841247E-324 do 1.79769313486232E308
Date Typ daty.
Obejmuje daty od 1 stycznia  1900r. do 31 grudnia 9999r.
String Typ łańcuchowy często nazywany także tekstowym.
Obejmuje znaki z klawiatury – może ich być od zera do 2 bilionów
Variant Typ ogólny.
Zadeklarowanie zmiennej jako typ Variant jest w zasadzie jednoznaczne z brakiem deklaracji typu. Dostęp do danych jest jednak dłuższy i spowalnia program.  

 

Kryteria wyszukiwania

W zależności od typu danych w danym polu kwerendy, kryteria wyszukiwania mogą być zdefiniowane w następujący sposób:

  • Tekst
    symbole zastępujące znak/ciągi znaków:
* dowolny znak lub ciąg znaków, również o zerowej długości
?
pojedynczy znak
#
cyfra
[A-Z]
pojedynczy znak z listy liter alfabetu
[!A-Z]
pojedynczy znak spoza listy liter alfabetu
[0-9]
pojedynczy znak z listy cyfr
 [!0-9] pojedynczy znak spoza listy cyfr
[ĄĘĆŚ,;]
pojedynczy znak z samodzielnie zdefiniowanej listy znaków
[!ĄĘĆŚ,;] pojedynczy znak spoza samodzielnie zdefiniowanej listy

Jak to wygląda w praktyce? Np. tak:

Like “*a*” – rekordy zawierające literę a, wielkość liter nie ma znaczenia
Like “*#*” – rekordy zawierające cyfrę
Like “?1*2” – rekordy zawierające cyfrę na drugim miejscu i kończące się
                           cyfrą2
Like “*[ąęó]*” – rekordy zawierające jedną z liter wpisanych w nawiasie

  • Data
    kryteria wyboru daty muszą być umieszczone w hasztagach.
    Np. chcąc wyfiltrować konkretną datę wpisujemy
    #2020-11-29#.
    Dla zakresu dat będzie to wyglądało tak:
    >#2020-11-09# And <#2020-11-17#
    znaki nierówności mogą być też nieostre czyli np.
    >=#2020-11-09# And <=#2020-11-17#
    Zakres dat można też ująć w zapisie:
    between #2020-11-09# And <#2020-11-17# 
    – w tym przypadku daty krańcowe też są brane do wyszukiwania. 
    W wyszukiwaniu dat bardzo ważnym aspektem jest też format daty. Jeżeli daty w kolumnie są zapisane (niezależnie od tego, jaki jest format wyświetlania daty) również z datą i godziną, to kryterium wyszukiwania ograniczone do zapisu #2020-11-20# wyznaczy rekordy tylko z godziną 00:00 tego dnia, każda inna godzina nie spełnia kryterium. W takim przypadku konieczny jest zapis:
    >=#2020-11-20# and <#2020-11-21#
    – czyli od godziny zero 20-go do wartości dat mniejszych od godziny zero dnia 21-go.
    Ewentualnie, pamiętając o tym, że data to liczba -można wstawić dodatkowe pole w kwerendzie oparte na formule =Clng([Pole daty]) i w tym polu wpisać kryterium:
    CLng(#2020-04-16#)
  • Wartości liczbowe
    kryteria wyboru są tu proste, znane z matematyki. Działają tu wszystkie operatory matematyczne typu > czy <.
    W stosunku do wartości liczbowych można tez stosować konstrukcję Between…And…
  • Prawda/Fałsz
    tu jako kryterium wystarczy wpisać po prostu Prawda lub Fałsz. Można też zastosować wartości liczbowe:
    0 – fałsz
    -1 – prawda

Niezależnie od typu danych często pojawia się konieczność wyszukania z brakiem wartości w danym polu. Kryterium dla takich rekordów to:
Is Null – dla  pustych rekordów
Is Not Null – dla niepustych rekordów

 


 

Kurs Access - kwerendy

Null to nie zero

Projektując bazę danych Access (choć nie tylko, tak jest praktycznie we wszystkich systemach bazodanowych) trzeba pamiętać o tym, że puste pole tabeli ma wartość null czyli brak wartości. Nie jest to odpowiednik pustej komórki w Excelu, gdzie  w zależności od typu danych taka wartość jest uznawana za zero czy pusty ciąg tekstowy i w ten sposób może być argumentem funkcji. W Accessie jeśli w polu jest null, wstawiając pole do formuły trzeba zastosować funkcję IsNull lub nz i w ten sposób zabezpieczyć się przed błędem.
Dotyczy to zarówno wyrażeń jak i kodu VBA.


Data i czas to liczby

Typ danych Data/Czas często sprawia problemy w prawidłowym korzystaniu z bazy danych. Wprawdzie Access ma mechanizmy zabezpieczające przed błędami przy wpisywaniu daty – tak, aby naprawdę była to data w rozumieniu informatycznym (nie tylko Microsoftu), ale możliwości użytkowników i tak są tu niewyczerpane. Warto więc ciągle przypominać: data to liczba! Konkretna data w kalendarzu to liczba dni od dnia 1 stycznia 1900r.  Na przykład data 14 sierpnia 2020r. to liczba 44057.  Oznacza to także, ze każdą datę można przekształcić na liczbę typu Long.
A czas? To liczba po przecinku. Wyznacza się ją w wyniku dzielenia godziny zegarowej (oczywiście może być z minutami i sekundami) przez 24 (czyli liczbę godzin w ciągu doby). Np. 44057,5 można przekształcić na 14.08.2020r. godz.12:00. Taką pełną datę wraz z czasem można przekształcić też na liczbę, choć w tym przypadku na typ Double. I odwrotnie – każdą taką liczbę można przekształcić na datę.

Generalnie wpisując w tabeli/formularzu wartość, która ma być datą, warto skorzystać z kalendarza:

A jeżeli już wpisujemy datę ręcznie – to w formacie RRRR-MM-DD (ewentualnie RRRR-MM-DD gg:mm). Wszystko inne da się załatwić formatowaniem.