Opis problemu:
Niektórzy użytkownicy naszych programów mogą być nieco rozczarowani ograniczeniami accessowych formularzy, bo wcześniej pracowali w Excelu i tam wszystkie formuły były widoczne, sami też mogli je definiować i zmieniać. W Accessie nie widzą wyrażeń w polach wyliczeniowych i muszą ufać, że programista użył właściwego wzoru do uzyskania ważnego dla nich wyniku.
Czy jest możliwość takiego zaprojektowania formularza w Accessie, żeby zapewniał on podobną
funkcjonalność jak Excel, czyli możliwość wpisywania do pol tekstowych zarówno konkretnych wartości,
np: 3,14
lub Jan Nowak
, jak i formuł typu:
=sin(3)+2^log(exp(1.23))+1'lub=count(ID)/sum(Pole2)+1
bezpośrednio z poziomu interfejsu użytkownika.
Rozwiązanie:
Sposób na realizację tego zadania znalazł Krzysztof Naworyta i zawarł go w przykładzie AccFormulyExcel.zip. Krzysztof użył dwóch tabel, jednej do zapisu danych (tbDane) i drugiej do zapisu formuł (tbFormuly). Tabele są połączone relacja 1-1, która jasno przypisuje każdą formułe do konkretnej wartości z tabeli danych. W przypadku skasowania rekordu z wartością - usuwana jest jej formuła. Dzieje się to automatycznie, Krzysztof nigdzie w kodzie nie musi tego kontrolować, bo realizuje to sam Access ze względu na relację miedzy tabelami z ustawionym atrybutem: Kaskadowe usuwanie powiązanych rekordów.
Przykład jest dobrze skomentowany, co jest bardzo miłe podczas analizy kodu. Jednak o pewnych występujących w programie zagadnieniach i trudnościach, możemy dowiedzieć się dopiero z autorskiego opracowania. Potwierdza to zasadę, że jeśli widzimy gotowy produkt, ze sprawnie działającymi mechanizmami, to wydaje się nam, że to takie łatwe, miłe i przyjemne programowanie. Zapominamy, że w przypadku nietypowych rozwiązań, ktoś musi zwykle testować kilka metod, wyciągać wnioski z uzyskiwanych efektów i wybierać najlepsze ścieżki, zanim pojawi się ten ostateczny efekt, który nam podoba.