W aplikacji Access dane są zapisywane w tabeli. Bezpośredni dostęp do tabel (zarówno w do jej projektu jak i zapisanych danych) powinien mieć jednak tylko administrator bazy. Normalny użytkownik zarówno edytować jak i dodawać/usuwać dane powinien tylko poprzez odpowiednio oprogramowane formularze.
Owszem, można normalny, oparty na kwerendzie lub tabeli formularz otworzyć w trybie dodawania, ale moim zdaniem nie jest to dobre wyjście. W takim formularzu dane trafiają od razu do tabeli, nie trzeba ich zapisywać i tracimy kontrolę nad poprawnością wprowadzanych danych. Oczywiście, można wstawić reguły poprawności, ale to, że w danym polu jakaś wartość nie da się wpisać, nie wyklucza wcale tego, że nowy rekord został dodany, choć z niepełnymi danymi. Bardzo szybko może spowodować to bałagan.
Zdecydowanie lepszym rozwiązaniem jest formularz bez źródła danych, z niezwiązanymi polami.
Na przykład dla takiej tabeli:
dobrym rozwiązaniem może być taki formularz dodawania
Warto każde pole odpowiednio sformatować i nadać własne nazwy. To ostatnie nie jest wprawdzie konieczne, ale standardowe nazwy typu Tekst123, Tekst378 utrudnią później pracę, nazwy typu TekstTytul, czy Dzial itp. zdecydowanie ułatwią odwoływanie się do nich w kwerendach czy kodzie VBA. Można tu też wpisać wartości domyślne – np.Data przyjecia=Date() (czyli bieżąca data systemowa).
Oczywiście też przyciski Zapisz – do zapisania danych w tabeli oraz Anuluj – do zamknięcia formularza bez zapisywania.
A jak zapisać dane? Jest tu kilka sposobów. Można uruchomić np. taką kwerendę dołączającą:
kliknij obrazek, aby powiększyć kwerendę
Poszczególne pola kwerendy to np…:
Wyr1: [Formularze]![Formularz_DodajKiazke]![TAutor]
dołaczane do pola Autor i w analogiczny sposób – kolejne. Potem wystarczy uruchomić kwerendę i dane zostają zapisane w tabeli.
Np. przez takie makro:
Oczywiście wskazane jest tu dodanie sprawdzenia czy wszystkie pola obowiązkowe są wypełnione i ewentualnie jaki typ danych jest wpisany. No i samo uruchomienie kwerendy dołączającej spowoduje wyświetlenie komunikatów ostrzegawczych – też powinny zostać wyłączone na czas uruchomienia kwerendy.
Zdecydowanie lepszym sposobem na zapisanie danych z takiego formularza jest jednak procedura VBA.
Przypisujemy wartości poszczególnych pul formularza do zmiennych, sprawdzamy ich poprawność, a następnie wykonujemy kod SQL oparty na kodzie kwerendy dołączającej.
Przykładowy kod w tym przypadku może wyglądać tak:
Private Sub PolecenieZapisz_Click() Dim JAutor As String Dim JTytul As String Dim JDzial As Long Dim JCena As Currency Dim JDataP As Date Dim JBest As Boolean Dim Kwera As String If IsNull(Me.TAutor) Then MsgBox „Brak autora”, vbCritical, „Brak wymaganych danych” Me.TAutor.SetFocus Exit Sub Else JAutor = Me.TAutor End If If IsNull(Me.TTytul) Then MsgBox „Brak tytułu”, vbCritical, „Brak wymaganych danych” Me.TTytul.SetFocus Exit Sub Else JTytul = Me.TTytul End If If IsNull(Me.TDzial) Then MsgBox „Przypisz dział”, vbCritical, „Brak wymaganych danych” Me.TDzial.SetFocus Exit Sub Else JDzial = Me.TDzial End If JCena = Nz(Me.TCena, 0) JDataP = Nz(Me.TData, Date) JBest = Nz(Me.TBestseller, False) Kwera = „INSERT INTO TabelaKsiazki ( Autor, Tytul, Dzial, Cena, DataP, Bestseller ) ” & _ „SELECT '” & JAutor & „’ AS Wyr1, '” & JTytul & „’ AS Wyr2, ” & JDzial & ” AS Wyr3, ” & JCena & ” AS Wyr4, #” & JDataP & „# AS Wyr5, ” & JBest & ” AS Wyr6;” DoCmd.SetWarnings False DoCmd.RunSQL Kwera DoCmd.SetWarnings True DoCmd.Close End Sub |
Moją ulubioną metodą dopisywania rekordów jest natomiast Recordset i Add.New. To już jednak temat na zupełnie oddzielną notkę.