Warsztat 3: Czas sportowy: jak liczyć z dokładnością do milisekund.

CzasSportowy2k.zip
Autor: Krzysztof Naworyta
Baza w formacie MsAccess 2000
34kB, 28-12-2005

Opis problemu:

W access'ie typ daty przechowuje czas z dokładnością do 1 sekundy
Czy jest jakiś sposób aby tę dokładność rozszerzyć ?
Jak np. zapisywać wyniki sportowe, porównywać je potem ze sobą ?
Najlepiej tak, jak jest to robione z normalnym typem datetime, przy użyciu podobnych funkcji do DateDiff(), DateAdd() czy DateSerial ...
I aby jeszcze było to z nim kompatybilne ...

Rozwiązanie:

Przykładowa baza zawiera moduł z całą serią takich funkcji a formularz demonstruje jak je można użyć.

Pamiętajmy, że datetime to podtyp double! To nasuwa myśl, że nasz "czas sportowy" powinniśmy przechowywać właśnie jako taką liczbę, gdzie część po przecinku będzie ułamkiem doby, ale z dokładnością większą niż pozwala na to datetime.
Jednocześnie aby taką dokładność uzyskać musimy zrezygnować z dużych wartości całkowitych ...

W formularzu dodatkowo zaprezentowałem jak zbudować własną kontrolkę, która pozwoli na edycję niestandardowego formatu typu "d gg:nn:ss:mmm".
Rozwiązanie polega na tym, że w formularzu ciągłym pod kontrolkę wyliczaną wsunięta jest kontrolka niezwiązana, która za każdym razem odbiera focus kontrolce na górze.
Inne pola podają kolejne składowe naszego czasu: godzinową, minutową, sekundową i w końcu milisekundową.
Prosta obsługa klawiszy +/- pozwala na inkrementację któregokolwiek z tych "członów".

Krzysztof Naworyta