Metoda Recordset.Open

Open to jedna z metod obiektu Recordset . Służy do utworzenia zestawu rekordów do wykorzystania w kolejnych krokach kodu VBA.

kliknij, aby powiększyć

Argumenty wejściowe to:

    • Source
      źródło danych rekordów,
      najczęściej jest to tabela lub kwerenda;
    • ActiveConnection
      aktywne połączenie,
      odwołanie do miejsca, gdzie znajduje się źródło danych. Jeżeli odwołujemy się do bieżącej bazy danych – stosuje się tu
      CurrentProject.Connection
    • CursorType
      typ kursora:

        • adOpenDynamic
          kursor dynamiczny, na bieżąco odzwierciedla wszystkie zmiany dokonane przez innych użytkowników.
        • adOpenForwardOnly
          kursor statyczny, nie odzwierciedla zmian dokonanych przez innych użytkowników, umożliwia przewijanie zestawu rekordów tylko do przodu.
          Wartość domyślna.
        • adOpenKeyset
          podobny do kursora dynamicznego, na bieżąco odzwierciedla wszystkie zmiany dokonane przez innych użytkowników, ale nie dostrzega dodanych przez nich rekordów.
        • adOpenStatic
          kursor statyczny, nie widzi zmian dokonanych przez innych użytkowników
    • LockType
      typ blokady podczas edycji rekordów:

        • adLockBatchOptimistic
          blokada dla aktualizacji wsadowych
        • adLockOptimistic
          rekordy są blokowane tylko podczas zapisywania zmian
        • adLockPessimistic
          rekordy są blokowane od razu po rozpoczęciu edycji
        • adLockReadOnly
          rekordy w zestawie są pobierane tylko do odcytu, nie można ich edytować
    • Options
      stosowane tylko, gdy źródło danych jest pobierane komendą Command 

Przykład takiej procedury:

Public Sub OdczytRST()
Dim RST As ADODB.Recordset
Dim RTytul As String
Dim RAutor As String
Set RST = New ADODB.Recordset
RST.Open „TabelaKsiazki”, CurrentProject.Connection, adOpenDynamic, adLockReadOnly
While Not RST.EOF
  RTytul = RST!Tytul
  RAutor = RST!Autor
     '(…)
     'kod wykorzytsujące odczytane wartości
     '(…)
  If Not RST.EOF Then RST.MoveNext
Wend
RST.Close
Set RST = Nothing
End Sub

W tym przypadku – otwierany jest Recordset z tabeli SpisKsiazek, a następnie w pętli odczytywane są wartości 2 kolumn każdego rekordu, które mogą być  wykorzystane w dalszej części. 
Na końcu – Recordset jest zamykany (warto o tym pamiętać). Wejście do pętli jest tylko wtedy, gdy są rekordy. Pozwala to na zabezpieczenie przed błędem 3021


A tu możesz mi postawić kawę: 

buycoffee.to/marzatela

Błąd wykonania 3021

kliknij, aby powiększyć

Błąd wykonania 3021 – brak bieżącego rekordu

Błąd występuje, gdy próbuje się odwołać do rekordu w obiekcie Recordset, który jest pusty lub nie zawiera żadnych danych. Innymi słowy, nie ma aktywnego rekordu, do którego można by się odwołać w danym momencie

Chcąc go uniknąć – warto sprawdzić, czy i ile rekordów ma Recordset, czy nie osiągnięto już ostatniego rekordu ewentualnie wprowadzić obsługę błędów. 

Inne błędy wykonania VBA (Run-time) są tu:
Błędy wykonania VBA

 

 

Obiekt VBA Recordset

Obiekt VBA Recordset to obiekt, który moim zdaniem jest niezbędny do tworzenia aplikacji Access. Pozwala on na przegląd, edycję, dodawanie i usuwanie danych i to z pełną kontrolą treści. Standardem jest dla mnie m.in. dodawanie nowych rekordów tylko przez procedury wykorzystującą właśnie zestaw RecordSet. Pozwala to na sprawdzenie, czy wprowadzone dane są prawidłowe, ewentualną korektę  i dopiero później ich zapisanie. Unikam w ten sposób różnych rekordów „śmieciowych”. 

Na ogół korzystam z modelu ADO, znacznie rzadziej z DAO. Konieczne są tu referencje w edytorze VBA (Tools –> References…):

kliknij, aby powiększyć

W moim Accessie 2019 jest to:

kliknij, aby powiększyć

W innych wersjach może być to inny numer biblioteki, ale sama referencja jest wymagana. 

kklikniji, aby powiększyć

Obiekt Adodb.Recordset ma swoje właściwości i metody. 

WŁAŚCIWOŚCI

METODY

Sukcesywnie będą się tu pojawiać linki do notek im poświęconym. 


A tu możesz mi postawić kawę: 

buycoffee.to/marzatela

Okno dialogowe wskazujące folder

Do wyświetlenia okna dialogowego i wybrania w nim folderu służy  obiekt Application.Filedialog z parametrem wejściowym msoFileDialogFolderPicker.

kliknij, aby powiększyć

Właściwości i parametry są tu takie same jak w przypadku okna dialogowego do wyboru pliku, ale niektóre z nich nie mogą być zastosowane, a nawet mogą wywołać błąd:

      • AllowMultiSelect
        właściwość ignorowana, w oknie dialogowym można wybrać tylko jeden folder
      • ButtonName 
        tekst na przycisku w oknie dialogowym (wartość typu String). Niestety, działa tylko dla systemu macOS, w Windowsie nie.
      • Filters
        nie można dodawać filtrów. Okno dialogowe wyboru folderu nie ma takiej opcji. Przy użyciu pojawia się
        błąd wykonania 438.
      • InitialFileName
        wartość typu String ograniczająca wybór plików widocznych w oknie dialogowym, stosowana najczęściej z użyciem symboli wieloznacznych
      • InitialView
        widok folderów w oknie dialogowym (szczegóły,podgląd itd.)

         

        kliknij, aby pwoiększyć

        – ta właściwość czasami zawodzi. Jeżeli dany folder ma na komputerze wcześniej zmienione i zapisane w Eksploatorze plików preferowany sposób wyświetlania – wpisana tu opcja zostanie zignorowana. 
      • SelectedItems
        folder zaznaczony w oknie dialogowym
      • Show
        wyświetlenie okna dialogowego na ekranie. Po wybraniu choć folderu  – metoda ta zwróci wartość True. Po naciśnięciu Anuluj – wartość False.
      • Title
        Tekst wyświetlany u góry okna dialogowego

Na przykład takie procedury:

Public Sub WybierzFolder()
Dim FD As FileDialog
Dim NazwaFolder As String
Set FD = Application.FileDialog(msoFileDialogFolderPicker)
With FD
.InitialFileName = „C:\*)”
.InitialView = msoFileDialogViewDetails
.Title = „Wskaż FOLDER”
If .Show Then
NazwaFolder = .SelectedItems(1)
Else
NazwaFolder= „Nie wskazano folderu”
End If
End With
Set FD = Nothing
MsgBox NazwaFolder
End Sub

A tak wygląda wygenerowane nim okno dialogowe:

Ja w swoich projektach najczęściej stosuję podobne procedury w formie funkcji. W ten sposób otrzymuję nazwę folderu, która mogą być użyta w innych procedurach.


A tu możesz mi postawić kawę: 

buycoffee.to/marzatela

Błąd wykonania 438

kliknij, aby powiększyć

Error 438 – Object doesn’t support this property or method

Błąd wykonania 438 – Obiekt nie obsługuje tej właściwości lub metody

Błąd pojawia się w przypadkach błędnego zastosowania parametru.
U mnie wystąpił w takiej procedurze

Public Sub WybierzFolderB()
Dim FD As FileDialog
Dim NazwaPlik As String
Set FD = Application.FileDialog(msoFileDialogFolderPicker)
With FD
.Filters.Add „Obrazy jpg”, „*.jpg”

Kompilacja kodu prawidłowa – Application.FileDialog ma taką właściwość, ale użycie jej parametrem wejściowym msoFileDialogFolderPicker (do zaznaczenia folderu) powoduje konflikt przy dodawaniu filtrów. Takie okno nie pozwala na filtrowanie. 

Inne błędy wykonania VBA (Run-time) są tu:
Błędy wykonania VBA