Korzystanie z Asystenta pakietu Office w programie Microsoft Access

Aby używać obiektów pakietu Microsoft Office, w tym również Asystenta pakietu Office, w  programie Microsoft Access, trzeba najpierw ustawić odwołanie do biblioteki obiektów pakietu Microsoft Office. W widoku "Projekt" modułu należy kliknąć polecenie Odwołania w menu Narzędzia i zaznaczyć pole wyboru Biblioteka obiektów pakietu Microsoft Office 8.0.

Jeśli odwołanie to nie zostanie ustawione, podczas próby użycia obiektów z biblioteki obiektów pakietu Microsoft Office, pojawi się komunikat o błędzie: "Typ definiowany przez użytkownika nie został zdefiniowany".

Uwaga   Asystent pakietu Office nie jest dostępny w wersji czasu wykonywania programu Microsoft Access.


Asystent pakietu Office - przegląd (Microsoft Access)
Asystent pakietu Office – przegląd (Microsoft Access)

Aby używać obiektów pakietu Microsoft Office w  programie Microsoft Access, trzeba najpierw ustawić odwołanie do biblioteki obiektów pakietu Microsoft Office. W widoku "Projekt" modułu należy kliknąć polecenie Odwołania w menu Narzędzia i zaznaczyć pole wyboru Biblioteka obiektów pakietu Microsoft Office 8.0.

Jeśli odwołanie to nie zostanie ustawione, podczas próby użycia obiektów z biblioteki obiektów pakietu Microsoft Office, pojawi się komunikat o błędzie: "Typ definiowany przez użytkownika nie został zdefiniowany".

Po ustawieniu odwołania do biblioteki obiektów pakietu Microsoft Office, obiekty, metody i właściwości pakietu Microsoft Office można przeglądać w Przeglądarce obiektów. Do obiektów, których można użyć przy programowaniu Asystenta pakietu Office należą obiekty Assistant, Balloon, BalloonCheckbox i BalloonLabel oraz kolekcje BalloonCheckboxes i BalloonLabels.

Następujące właściwości obiektu Assistant nie są dostępne w programie Microsoft Access, chociaż mogą być one dostępne w innych aplikacjach pakietu Microsoft Office:

•	Właściwość FeatureTips

•	Właściwość HighPriorityTips

•	Właściwość KeyboardShortcutTips

•	Właściwość MouseTips

Uwaga   Asystent pakietu Office nie jest dostępny w wersji czasu wykonywania programu Microsoft Access.


FeatureTips, właściwość (Microsoft Access)

Właściwość ta nie jest dostępna w programie Microsoft Access.


HighPriorityTips, właściwość (Microsoft Access)

Właściwość ta nie jest dostępna w programie Microsoft Access.


KeyboardShortcutTips, właściwość (Microsoft Access)

Właściwość ta nie jest dostępna w programie Microsoft Access.


MouseTips, właściwość (Microsoft Access)

Właściwość ta nie jest dostępna w programie Microsoft Access.


Callback, właściwość (Microsoft Access)

Właściwość Callback należy ustawić podczas pracy z dymkiem niemodalnym. Dymek niemodalny umożliwia użytkownikowi ponowne przełączenie się do aplikacji, w której pracuje, bez zamykania dymku. Dymek niemodalny może być użyteczny podczas tworzenia Pomocy, która ma pozostać otwarta, gdy użytkownik wykonuje jakieś działania w aplikacji. Aby dymek był niemodalny, należy ustawić właściwość Mode obiektu Balloon na wartość msoModeModeless.

Właściwość Callback określa funkcję lub makro, które ma być wykonane, gdy użytkownik kliknie przycisk na dymku. Pisząc funkcję, która ma być wywoływana przez właściwość Callback, można użyć tej funkcji do sprawdzenia, który przycisk został kliknięty.

Właściwość Callback należy ustawić na nazwę funkcji lub makra. Na przykład poniższy wiersz kodu ustawia właściwość Callback:

Assistant.NewBalloon.Callback = "EvaluateCheckboxes"

Należy zauważyć, że właściwość Callback trzeba ustawić na nazwę procedury Function; nie można jej ustawić na nazwę procedury Sub. Procedura Function musi być procedurą publiczną.


Asystent pakietu Microsoft Office - przykład (Microsoft Access)
Asystent pakietu Microsoft Office – przykład (Microsoft Access)

Poniższa funkcja tworzy niestandardowy dymek dla Asystenta pakietu Office i sprawdza, czy użytkownik odpowiedział na monit dymku:

Function AssistantBalloon(Optional varCheck As Variant, Optional varLabel As Variant)

Dim bch As BalloonCheckbox

Dim intI As Integer

Dim intReturn As Integer

Dim strCheck(5) As String

Dim strList As String

' Create new balloon.

Set bal = Assistant.NewBalloon

' Specify balloon type.

bal.BalloonType = msoBalloonTypeButtons

' Specify that balloon is modal.

bal.Mode = msoModeModal

' Make Assistant visible.

If Assistant.Visible = False Then Assistant.Visible = True

' Check if first argument has been passed.

If Not IsMissing(varCheck) Then

' If too large, set to maximum number of check boxes (5).

If varCheck > 6 Then

varCheck = 5

End If

' Set text property to alphabet character.

For intI = 1 To varCheck

bal.Checkboxes(intI).Text = Chr(64 + intI)

Next intI

End If

If Not IsMissing(varLabel) Then

' If too large, set to maximum number of labels (5).

If varLabel > 6 Then

varLabel = 5

End If

For intI = 1 To varLabel

' Set text property to alphabet character.

bal.Labels(intI).Text = Chr(64 + intI)

Next intI

End If

' Store return value.

intReturn = bal.Show

intI = 0

' Determine which check boxes were checked, if any.

For Each bch In bal.Checkboxes

If bch.Checked = True Then

strCheck(intI) = bch.Text

strList = strList & "'" & strCheck(intI) & "'" & Chr(32)

End If

intI = intI + 1

Next

If Len(strList) <> 0 Then

MsgBox "You selected checkboxes " & strList & "."

End If

' Determine which label was selected, if any.

If intReturn > 0 Then

MsgBox "You selected label " & bal.Labels(intReturn).Text & "."

End If

End Function

W oknie analizy programu można wywołać tę funkcję w następujący sposób:

? AssistantBalloon(4, 5)


AddNew, metoda (Microsoft Access)

Jeśli w module programu Microsoft Access używana jest zakładka, to w sekcji deklaracji tego modułu należy umieścić instrukcję Option Compare Binary. Ponieważ typem danych zakładki jest tablica typu Variant danych typu Byte, metoda porównywania ciągów znaków dla tego modułu musi być metodą binarną. Jeśli zakładki będą porównywane metodą tekstową, określoną na przykład za pomocą instrukcji Option Compare Text lub poprzez ustawienie domyślne instrukcji Option Compare Database, wskaźnik bieżącego rekordu może zostać ustawiony na niewłaściwym rekordzie.


Clone, metoda (Microsoft Access)

Jeśli w module programu Microsoft Access używana jest właściwość Bookmark (Zakładka) obiektu Recordset, to w sekcji deklaracji tego modułu należy umieścić instrukcję Option Compare Binary. Ponieważ typem danych zakładki jest tablica typu Variant danych typu Byte, metoda porównywania ciągów znaków dla tego modułu musi być metodą binarną. Jeśli zakładki będą porównywane metodą tekstową, określoną na przykład za pomocą instrukcji Option Compare Text lub poprzez ustawienie domyślne instrukcji Option Compare Database, wskaźnik bieżącego rekordu może zostać ustawiony na niewłaściwym rekordzie.


Close, metoda (Microsoft Access)

Jeśli procedura języka Visual Basic zawiera zmienną obiektową reprezentującą bazę danych aktualnie otwartą w programie Microsoft Access, użycie metody Close dla tego obiektu spowoduje, że zmienna straci kontekst. Metoda Close nie ma wpływu na bazę danych otwartą w oknie bazy danych programu Microsoft Access


CompactDatabase, metoda (Microsoft Access)

Aby dokonać defragmentacji bazy danych z okna programu Microsoft Access, należy wskazać polecenie Narzędzia bazy danych w menu Narzędzia i kliknąć polecenie Defragmentuj bazę danych. Aby dokonać defragmentacji bazy danych z kodu języka Visual Basic, należy użyć metody CompactDatabase obiektów dostępu do danych (DAO).

Uwaga   Metoda CompactDatabase nie dokonuje całkowitej konwersji bazy danych programu Microsoft z jednej wersji na drugą. Tylko format danych ulega konwersji. Obiekty zdefiniowane w programie Microsoft Access, takie jak formularze i raporty nie podlegają konwersji. Aby dokonać konwersji bazy danych utworzonej w starszej wersji programu Microsoft Access, należy wskazać polecenie Narzędzia bazy danych w menu Narzędzia i kliknąć polecenie Konwertuj bazę danych.


CreateDatabase, metoda (Microsoft Access)

Metoda CreateDatabase tworzy nową bazę danych z poziomu języka Visual Basic, otwiera tę nową bazę danych, dołącza ją do kolekcji Databases i zapisuje na dysku.

Użycie metody CreateDatabase nie wpływa na bazę danych, która jest aktualnie otwarta w oknie bazy danych programu Microsoft Access. Baza danych uprzednio otwarta w oknie bazy danych pozostaje otwarta. Ta baza danych jest pierwszą bazą danych w kolekcji Databases. Również funkcja CurrentDb zwraca odwołanie do bazy danych aktualnie otwartej w oknie bazy danych.

Aby bazę danych utworzoną za pomocą metody CreateDatabase otworzyć w oknie bazy danych, trzeba kliknąć polecenie Otwórz bazę danych w menu Plik.


CreateGroup, metoda (Microsoft Access)

Po utworzeniu nowego obiektu Group i dołączeniu go do kolekcji Groups obiektu Workspace lub User można sprawdzić, czy nowa grupa istnieje, przeglądając pole listy rozwijalnej Nazwa na karcie Grupy okna dialogowego Konta użytkowników i grup. Okno to pojawia się po wskazaniu polecenia Zabezpieczenia w menu Narzędzia i kliknięciu polecenia Konta użytkowników i grup.


CreateProperty, metoda (Microsoft Access)

W programie Microsoft Access wiele właściwości jest zdefiniowanych dla obiektów dostępu do danych. Właściwości te nie są automatycznie rozpoznawane przez aparat bazy danych Microsoft Jet. Aby w języku Visual Basic ustawić lub zwrócić wartości dla właściwości zdefiniowanej w programie Microsoft Access, trzeba dodać tę właściwość do kolekcji Properties obiektu, do którego odnosi się ta właściwość. Można to zrobić używając metody CreateProperty do utworzenia właściwości, a następnie dołączając tę właściwość do kolekcji Properties.

Na przykład, w programie Microsoft Access zdefiniowana jest właściwość Description (Opis) obiektu TableDef. Jeśli właściwość ta nie została jeszcze ustawiona w widoku "Projekt" tabeli, trzeba użyć metody CreateProperty do utworzenia tej właściwości, a następnie dołączyć ją do kolekcji Properties, aby umożliwić ustawienie jej w kodzie języka Visual Basic.

Właściwość zdefiniowana w programie Microsoft Access jest automatycznie dodawana do kolekcji Properties podczas pierwszego ustawiania jej wartości w oknie programu Microsoft Access. Jeśli właściwość była już ustawiona w taki sposób, nie trzeba dodawać jej do kolekcji Properties.

Podczas pisania kodu ustawiającego właściwość zdefiniowaną w programie Microsoft Access, należy dołączyć podprogram obsługi błędów, który tworzy obiekt Property reprezentujący tę właściwość i dodaje go do kolekcji Properties, jeśli jeszcze nie istnieje on w tej kolekcji.

Odwołując się do właściwości zdefiniowanej w programie Microsoft Access w języku Visual Basic, trzeba jawnie odwołać się do kolekcji Properties. Na przykład, do właściwości AppTitle znajdującej się w kolekcji Properties obiektu Database reprezentującego bieżącą bazę danych, należałoby się odwołać w następujący sposób.

Dim dbs As Database

Set dbs = CurrentDb

dbs.Properties!AppTitle = "Northwind Traders"

Uwaga   Trzeba tworzyć i dołączać tylko te właściwości programu Microsoft Access, które odnoszą się do obiektów dostępu do danych (DAO). Inne właściwości programu Microsoft Access można określić w języku Visual Basic używając standardowej składni obiekt.właściwość.


CreateUser, metoda (Microsoft Access)

Po utworzeniu nowego obiektu User i dołączeniu go do kolekcji Users obiektu Workspace lub Group, można sprawdzić, czy nowy użytkownik istnieje, przeglądając pole listy rozwijalnej Nazwa na karcie Użytkownicy okna dialogowego Konta użytkowników i grup. Okno to pojawia się po wskazaniu polecenia Zabezpieczenia w menu Narzędzia i kliknięciu polecenia Konta użytkowników i grup.


FillCache, metoda (Microsoft Access)

Jeśli w module programu Microsoft Access używana jest zakładka, to w sekcji deklaracji tego modułu należy umieścić instrukcję Option Compare Binary. Ponieważ typem danych zakładki jest tablica typu Variant danych typu Byte, metoda porównywania ciągów znaków dla tego modułu musi być metodą binarną. Jeśli zakładki będą porównywane metodą tekstową, wskaźnik bieżącego rekordu może zostać ustawiony na niewłaściwym rekordzie. Instrukcja Option Compare Text określa porównywanie metodą tekstową, podobnie jak ustawienie domyślne instrukcji Option Compare Database.


FindFirst, FindLast, FindNext, FindPrevious, metody (Microsoft Access)

Przy określaniu kryteriów dla metod typu Find należy zwrócić uwagę na poprawność odwołań do pól i formantów oraz poprawność samego ciągu znaków opisującego kryteria. Więcej informacji na temat kryteriów ograniczających dane do podzbioru rekordów i używania cudzysłowu w ciągach znaków można znaleźć w indeksie Pomocy pod hasłem "Funkcje agregujące domen".

Jeśli w module programu Microsoft Access używana jest zakładka, to w sekcji deklaracji tego modułu należy umieścić instrukcję Option Compare Binary. Ponieważ typem danych zakładki jest tablica typu Variant danych typu Byte, metoda porównywania ciągów znaków dla tego modułu musi być metodą binarną. Jeśli zakładki będą porównywane metodą tekstową, określoną na przykład za pomocą instrukcji Option Compare Text lub poprzez ustawienie domyślne instrukcji Option Compare Database, wskaźnik bieżącego rekordu może zostać ustawiony na niewłaściwym rekordzie.


GetChunk, metoda (Microsoft Access)

Po przypisaniu wyników metody GetChunk zmiennej typu ciąg znaków, można użyć funkcji Len języka Visual Basic, aby określić liczbę znaków w tym ciągu znaków. Aby określić liczbę bajtów zajętych przez ten ciąg znaków, należy użyć funkcji LenB.


Move, metoda (Microsoft Access)

Jeśli w module programu Microsoft Access używana jest zakładka, to w sekcji deklaracji tego modułu należy umieścić instrukcję Option Compare Binary. Ponieważ typem danych zakładki jest tablica typu Variant danych typu Byte, metoda porównywania ciągów znaków dla tego modułu musi być metodą binarną. Jeśli zakładki będą porównywane metodą tekstową, określoną na przykład za pomocą instrukcji Option Compare Text lub poprzez ustawienie domyślne instrukcji Option Compare Database, wskaźnik bieżącego rekordu może zostać ustawiony na niewłaściwym rekordzie.


OpenDatabase, metoda

W programie Microsoft Access, należy użyć funkcji CurrentDb, aby zwrócić odwołanie do bieżącej bazy danych i przypisać je zmiennej typu Database, jak to zostało pokazane w poniższym przykładzie.

Dim dbsCurrent As Database

Set dbsCurrent = CurrentDb

Aby za pomocą kodu języka Visual Basic otworzyć bazę danych inną niż bieżąca baza danych, należy użyć metody OpenDatabase.


update, metoda (Microsoft Access)

Jeśli w module programu Microsoft Access używana jest zakładka, to w sekcji deklaracji tego modułu należy umieścić instrukcję Option Compare Binary. Ponieważ typem danych zakładki jest tablica typu Variant danych typu Byte, metoda porównywania ciągów znaków dla tego modułu musi być metodą binarną. Jeśli zakładki będą porównywane metodą tekstową, określoną na przykład za pomocą instrukcji Option Compare Text lub poprzez ustawienie domyślne instrukcji Option Compare Database, wskaźnik bieżącego rekordu może zostać ustawiony na niewłaściwym rekordzie.


AddNew, metoda - przykład (Microsoft Access)
AddNew, metoda – przykład (Microsoft Access)

W poniższym przykładzie tworzony jest nowy rekord w tabeli "Employees" ("Pracownicy"), po czym zapisywane są zmiany:

Sub AddNewRecord(ByVal rst As Recordset, _

strLast As String, strFirst As String)

With rst

.AddNew	' Add new record.

!LastName = strLast	' Add data.

!FirstName = strFirst

.Update	' Save changes.

End With

End Sub


Append, metoda - przykład (Microsoft Access)
Append, metoda – przykład (Microsoft Access)

W poniższym przykładzie definiowany jest nowy obiekt Field, który jest następnie dołączany do kolekcji Fields obiektu TableDef:

Sub NewField()

Dim dbs As Database, tdf As TableDef, fld As Field

' Return reference to current database.

Set dbs = CurrentDb

Set tdf = dbs.TableDefs!Employees

' Create new field in Employees table.

Set fld = tdf.CreateField("SocialSecurity#", dbText, 11)

' Append field and refresh collection.

tdf.Fields.Append fld

tdf.Fields.Refresh

Set dbs = Nothing

End Sub


AppendChunk, GetChunk, metody - przykład (Microsoft Access)
AppendChunk, GetChunk, metody – przykład (Microsoft Access)

W poniższym przykładzie dołączane są dane do pola "Notes" ("Uwagi") w tabeli "Employees" ("Pracownicy"). Pole "Notes" jest polem typu Memo. Następnie procedura zwraca zawartość tego pola za pomocą metody GetChunk, dodaje do danych i za pomocą metody AppendChunk dołącza zmienione dane z powrotem do pola "Notes".

Sub AddToMemo()

Dim dbs As Database, rst As Recordset

Dim fldNotes As Field, fldFirstName As Field

Dim fldLastName As Field

Dim lngSize As Long, strChunk As String

' Return reference to current database.

Set dbs = CurrentDb

' Create table-type Recordset object.

Set rst = dbs.OpenRecordset("Employees")

' Return references to Field objects.

Set fldNotes = rst!Notes

Set fldFirstName = rst!FirstName

Set fldLastName = rst!LastName

' Loop through all records in recordset.

Do Until rst.EOF

' Check if data exists in Notes field.

If IsNull(fldNotes.Value) Then

' If no data, use AppendChunk method only.

strChunk = fldFirstName _

& " " & fldLastName & " is an excellent employee."

With rst

.Edit

!Notes = strChunk

.Update

.MoveNext

End With

Else

lngSize = Len(fldNotes)

' Use GetChunk to retrieve existing data.

strChunk = fldNotes.GetChunk(0, lngSize)

' Alter data.

strChunk = strChunk & "  " & fldFirstName _

& " " & fldLastName & " is an excellent employee."

With rst

.Edit	 ' Enable editing.

!Notes = ""	 ' Initialize field.

!Notes.AppendChunk strChunk	 ' Append altered data.

.Update	 ' Save changes.

.MoveNext	 ' Move to next record.

End With

End If

Loop

rst.Close

Set dbs = Nothing

End Sub


BeginTrans, CommitTrans, Rollback, metody - przykład (Microsoft Access)
BeginTrans, CommitTrans, Rollback, metody – przykład (Microsoft Access)

W poniższym przykładzie zmieniana jest nazwa stanowiska wszystkich przedstawicieli handlowych w tabeli "Employees" ("Pracownicy"). Najpierw metoda BeginTrans rozpoczyna transakcję, która wydziela wszystkie zmiany wprowadzone do tabeli "Employees". Następnie metoda CommitTrans zapisuje zmiany. Należy zauważyć, że można zastosować metodę Rollback do cofnięcia zmian zapisanych za pomocą metody Update. W przykładzie tym zostało również pokazane, jak obsługiwać flagę, aby właściwie zarządzać błędami, które mogą wystąpić podczas transakcji.

Gdy użytkownik zastanawia się, czy zmiany zaakceptować, czy też nie, jedna lub kilka stron tabeli pozostaje zablokowanych. W rzeczywistości technika ta nie jest zalecana, a przedstawiona jest tu jedynie jako przykład.

Sub ChangeTitle()

Dim wsp As Workspace, dbs As Database, rst As Recordset

Dim strName As String, strMessage As String, strPrompt As String

Dim fInTrans As Boolean

On Error GoTo ChangeTitleErr

fInTrans = False

strPrompt = "Change title to Account Executive?"

' Return reference to default Workspace object.

Set wsp = DBEngine.Workspaces(0)

' Return reference to current database.

Set dbs = CurrentDb

' Create table-type Recordset object.

Set rst = dbs.OpenRecordset("Employees", dbOpenTable)

' Start of transaction.

wsp.BeginTrans

fInTrans = True

rst.MoveFirst

Do Until rst.EOF

If rst!Title = "Sales Representative" Then

strName = rst!LastName & ", " & rst!FirstName

strMessage = "Employee: " & strName & vbCrLf & vbCrLf

If MsgBox(strMessage & strPrompt, vbQuestion + vbYesNo, _

"Change Job Title") = vbYes Then

' Enable editing.

rst.Edit

rst!Title = "Account Executive"

' Save changes.

rst.Update

End If

End If

' Move to next record.

rst.MoveNext

Loop

If MsgBox("Save all changes?", vbQuestion + vbYesNo, _

" Save Changes") = vbYes Then

wsp.CommitTrans	' Commit changes.

Else

wsp.Rollback	' Undo changes.

End If

ChangeTitleExit:

rst.Close

Set dbs = Nothing

Set wsp = Nothing

Exit Sub

ChangeTitleErr:

MsgBox "Error!"

If fInTrans Then

wsp.Rollback

End If

Resume ChangeTitleExit

End Sub


CancelUpdate, Update, metody - przykład (Microsoft Access)
CancelUpdate, Update, metody – przykład (Microsoft Access)

W poniższym przykładzie tworzony jest nowy rekord w tabeli "Employees" ("Pracownicy"), wprowadzane są wartości, a następnie wyświetlany jest komunikat przypominający o zapisaniu zmian. Jeśli użytkownik zrezygnuje z zapisania zmian, metoda Update jest anulowana.

Sub NewRecord()

Dim dbs As Database, rst As Recordset

' Return reference to current database.

Set dbs = CurrentDb

Set rst = dbs.OpenRecordset("Employees")

With rst

' Add new record to end of Recordset object.

.AddNew

!LastName = "Christopher"	' Add data.

!FirstName = "Kevin"

End With

' Prompt user to save changes.

If MsgBox("Save these changes?", vbYesNo) = vbNo Then

' If user chooses No, cancel changes.

rst.CancelUpdate

Else

' If user chooses Yes, save changes.

rst.Update

End If

rst.Close

Set dbs = Nothing

End Sub


Clone, metoda - przykład (Microsoft Access)
Clone, metoda – przykład (Microsoft Access)

W poniższym przykładzie tworzony jest obiekt Recordset za pomocą instrukcji SQL w tabeli "Employees" ("Pracownicy"), a następnie zostaje użyta metoda Clone do utworzenia kopii obiektu Recordset tak, aby zakładki mogły być współużytkowane przez dwa obiekty. Technika ta jest szczególnie przydatna do równoczesnego porównywania wyników kwerendy w kilku punktach.

Funkcja ta odczytuje i zapisuje w zmiennej tekstowej wartość właściwości Bookmark bieżącego rekordu, w tym przypadku drugiego rekordu w pierwotnym obiekcie Recordset. Właściwość Bookmark duplikatu obiektu Recordset jest ustawiana na ten ciąg znaków, przez co także drugi rekord staje się rekordem bieżącym w tym obiekcie Recordset. Bieżące wartości pola "LastName" w obydwu obiektach Recordset są identyczne, o czym można się przekonać po ich wyświetleniu w oknie analizy programu.

Sub CreateClone()

Dim dbs As Database

Dim rstEmployees As Recordset, rstDuplicate As Recordset

Dim fldName As Field, varBook As Variant

' Return reference to current database.

Set dbs = CurrentDb

' Open dynaset-type Recordset object.

Set rstEmployees = dbs.OpenRecordset("SELECT * FROM Employees " _

& " ORDER BY LastName")

' Clone Recordset object.

Set rstDuplicate = rstEmployees.Clone

Set fldName = rstEmployees.Fields!LastName

' Set current record.

rstEmployees.MoveFirst

' Move to second record.

rstEmployees.MoveNext

' Get Bookmark property value and print current field value.

If rstEmployees.Bookmarkable Then

varBook = rstEmployees.Bookmark

Debug.Print fldName.value

Else

' If Recordset object doesn't support bookmarks, exit procedure.

ExitCreateClone

End If

' Set Bookmark property of clone to obtained value.

rstDuplicate.Bookmark = varBook

Debug.Print fldName.value

ExitCreateClone:

rstEmployees.Close

rstDuplicate.Close

Set dbs = Nothing

End Sub


Close, metoda - przykład (Microsoft Access)
Close, metoda – przykład (Microsoft Access)

W poniższym przykładzie tworzony jest obiekt Database, który wskazuje na bieżącą bazę danych i otwierany jest obiekt Recordset typu tabela, oparty na tabeli "Customers" ("Klienci") w tej bazie danych. W procedurze użyta została metoda Close w stosunku do zmiennej obiektowej Recordset, aby zwolnić wykorzystywane przez tą zmienną zasoby pamięci. Użyta została również instrukcja Set ze słowem kluczowym Nothing, aby zwolnić zasoby pamięci wykorzystywane przez zmienną obiektową Database.

Można również użyć metody Close obiektu Database, aby go zamknąć i zwolnić pamięć. Metoda Close obiektu Database w rzeczywistości nie zamyka bazy danych otwartej w programie Microsoft Access; zwalnia ona tylko zasoby wykorzystywane przez zmienną obiektową Database.

Użycie metody Close i ustawienie zmiennej obiektowej na wartość Nothing są dwoma równoważnymi sposobami zwolnienia pamięci.

Sub UseClose()

Dim dbs As Database, rst As Recordset

' Return reference to current database.

Set dbs = CurrentDb

' Create table-type recordset.

Set rst = dbs.OpenRecordset("Customers")

.

.

.

' Close recordset to free memory.

rst.Close

' Free memory used by object variable.

Set dbs = Nothing

End Sub


CopyQueryDef, metoda - przykład (Microsoft Access)
CopyQueryDef, metoda – przykład (Microsoft Access)

W poniższym przykładzie został użyta metoda CopyQueryDef do zwrócenia kopii obiektu QueryDef reprezentującego kwerendę "Invoices" ("Faktury"). Następnie drukowana jest właściwość SQL tego obiektu QueryDef.

Sub GetQueryDefCopy()

Dim dbs As Database, rst As Recordset

Dim qdfOriginal As QueryDef, qdfCopy As QueryDef

' Return reference to current database.

Set dbs = CurrentDb

' Return reference to Invoices query.

Set qdfOriginal = dbs.QueryDefs!Invoices

' Open dynaset-type Recordset object.

Set rst = qdfOriginal.OpenRecordset

' Get copy of original QueryDef object.

Set qdfCopy = rst.CopyQueryDef

' Print value of SQL property for copy.

Debug.Print qdfCopy.SQL

rst.Close

Set dbs = Nothing

End Sub


CreateDatabase, metoda - przykład (Microsoft Access)
CreateDatabase, metoda – przykład (Microsoft Access)

W poniższym przykładzie została zastosowana metoda CreateDatabase do utworzenia nowej, zaszyfrowanej bazy danych o nazwie Newdb.mdb:

Sub NewDatabase()

Dim wspDefault As Workspace, dbs As Database

Dim tdf As TableDef, fld1 As Field, fld2 As Field

Dim idx As Index, fldIndex As Field

Set wspDefault = DBEngine.Workspaces(0)

' Create new, encrypted database.

Set dbs = wspDefault.CreateDatabase("Newdb.mdb", _

dbLangGeneral, dbEncrypt)

' Create new table with two fields.

Set tdf = dbs.CreateTableDef("Contacts")

Set fld1 = tdf.CreateField("ContactID", dbLong)

fld1.Attributes = fld1.Attributes + dbAutoIncrField

Set fld2 = tdf.CreateField("ContactName", dbText, 50)

' Append fields.

tdf.Fields.Append fld1

tdf.Fields.Append fld2

' Create primary key index.

Set idx = tdf.CreateIndex("PrimaryKey")

Set fldIndex = idx.CreateField("ContactID", dbLong)

' Append index fields.

idx.Fields.Append fldIndex

' Set Primary property.

idx.Primary = True

' Append index.

tdf.Indexes.Append idx

' Append TableDef object.

dbs.TableDefs.Append tdf

dbs.TableDefs.Refresh

Set dbs = Nothing

End Sub


CreateField, metoda - przykład (Microsoft Access)
CreateField, metoda – przykład (Microsoft Access)

W poniższym przykładzie tworzona jest nowa tabela z dwoma nowymi polami. Jednym z tych pól jest pole "AutoNumber". Pole to zostaje określone jako klucz podstawowy tabeli.

Sub NewTable()

Dim dbs As Database

Dim tdf As TableDef, fld1 As Field, fld2 As Field

Dim idx As Index, fldIndex As Field

' Return reference to current database.

Set dbs = CurrentDb

' Create new table with two fields.

Set tdf = dbs.CreateTableDef("Contacts")

Set fld1 = tdf.CreateField("ContactID", dbLong)

fld1.Attributes = fld1.Attributes + dbAutoIncrField

Set fld2 = tdf.CreateField("ContactName", dbText, 50)

' Append fields.

tdf.Fields.Append fld1

tdf.Fields.Append fld2

' Create primary key index.

Set idx = tdf.CreateIndex("PrimaryKey")

Set fldIndex = idx.CreateField("ContactID", dbLong)

' Append index fields.

idx.Fields.Append fldIndex

' Set Primary property.

idx.Primary = True

' Append index.

tdf.Indexes.Append idx

' Append TableDef object.

dbs.TableDefs.Append tdf

dbs.TableDefs.Refresh

Set dbs = Nothing

End Sub


CreateIndex, metoda - przykład (Microsoft Access)
CreateIndex, metoda – przykład (Microsoft Access)

W poniższym przykładzie tworzony jest obiekt Index w tabeli "Employees" ("Pracownicy"). Nowy indeks składa się z dwóch pól, "LastName" i "FirstName".

Sub NewIndex()

Dim dbs As Database, tdf As TableDef

Dim idx As Index

Dim fldLastName As Field, fldFirstName As Field

' Return reference to current database.

Set dbs = CurrentDb

' Return reference to Employees table.

Set tdf = dbs.TableDefs!Employees

' Return reference to new index.

Set idx = tdf.CreateIndex("FullName")

' Create and append index fields.

Set fldLastName = idx.CreateField("LastName", dbText)

Set fldFirstName = idx.CreateField("FirstName", dbText)

idx.Fields.Append fldLastName

idx.Fields.Append fldFirstName

' Append Index object and refresh collection.

tdf.Indexes.Append idx

tdf.Indexes.Refresh

Set dbs = Nothing

End Sub


CreateProperty, metoda - przykład (Microsoft Access)
CreateProperty, metoda – przykład (Microsoft Access)

Pierwsza procedura w poniższym przykładzie, funkcja SetAccessProperty, jest typową funkcją, której można użyć do ustawienia właściwości. Jeśli właściwość, która ma być ustawiona ma już odpowiadający jej obiekt Property w kolekcji Properties, funkcja po prostu ustawia właściwość na żądaną wartość. Jeśli właściwość nie ma odpowiadającego jej obiektu Property w kolekcji Properties, funkcja tworzy obiekt Property i dołącza go do kolekcji Properties.

W drugiej procedurze ustawiana jest właściwość Subject za pomocą funkcji SetAccessProperty. Właściwość Subject jest właściwością bazy danych, która może być także ustawiona na karcie Podsumowanie w oknie dialogowym Właściwości bazy danych dostępnym przez kliknięcie polecenia Właściwości bazy danych w menu Plik.

Właściwość Subject dotyczy obiektu dostępu do danych (DAO) – SummaryInfo Document, zdefiniowanego przez program Microsoft Access.  Jeśli właściwość Subject nie istnieje jeszcze w kolekcji Properties obiektu Document, funkcja SetAccessProperty dodaje ją.

Function SetAccessProperty(obj As Object, strName As String, _

intType As Integer, varSetting As Variant) As Boolean

Dim prp As Property

Const conPropNotFound As Integer = 3270

On Error GoTo ErrorSetAccessProperty

' Explicitly refer to Properties collection.

obj.Properties(strName) = varSetting

obj.Properties.Refresh

SetAccessProperty = True

ExitSetAccessProperty:

Exit Function

ErrorSetAccessProperty:

If Err = conPropNotFound Then

' Create property, denote type, and set initial value.

Set prp = obj.CreateProperty(strName, intType, varSetting)

' Append Property object to Properties collection.

obj.Properties.Append prp

obj.Properties.Refresh

SetAccessProperty = True

Resume ExitSetAccessProperty

Else

MsgBox Err & ": " & vbCrLf & Err.Description

SetAccessProperty = False

Resume ExitSetAccessProperty

End If

End Function

Poniższa procedura wywołuje funkcję SetAccessProperty, aby ustawić właściwość Subject.

Sub CallPropertySet()

Dim dbs As Database, ctr As Container, doc As Document

Dim blnReturn As Boolean

' Return reference to current database.

Set dbs = CurrentDb

' Return reference to Databases container.

Set ctr = dbs.Containers!Databases

' Return reference to SummaryInfo document.

Set doc = ctr.Documents!SummaryInfo

blnReturn = SetAccessProperty(doc, _

"Subject", dbText, "Business Contacts")

' Evaluate return value.

If blnReturn = True Then

Debug.Print "Property set successfully."

Else

Debug.Print "Property not set successfully."

End If

End Sub


CreateQueryDef, metoda - przykład (Microsoft Access)
CreateQueryDef, metoda – przykład (Microsoft Access)

W poniższym przykładzie tworzony jest obiekt QueryDef, a następnie kwerenda jest otwierana w widoku "Arkusz danych":

Sub NewQuery()

Dim dbs As Database, qdf As QueryDef, strSQL As String

' Return reference to current database.

Set dbs = CurrentDb

strSQL = "SELECT * FROM Employees WHERE [HireDate] >= #1-1-93#"

' Create new query.

Set qdf = dbs.CreateQueryDef("RecentHires", strSQL)

DoCmd.OpenQuery qdf.Name

Set dbs = Nothing

End Sub


CreateRelation, metoda - przykład (Microsoft Access)
CreateRelation, metoda – przykład (Microsoft Access)

W poniższym przykładzie tworzony jest obiekt Relation definiujący relację między tabelą "Categories" ("Kategorie") i tabelą "Products" ("Produkty"). Tabela "Categories" jest podstawową tabelą w relacji, a tabela "Products" jest tabelą obcą. Pole "CategoryID" ("Idkategorii") jest kluczem podstawowym w tabeli "Categories" i kluczem obcym w tabeli "Products".

Aby przetestować ten przykład w bazie danych "Northwind", należy kliknąć polecenie Relacje w menu Narzędzia, a następnie usunąć relację między tabelą "Categories" i tabelą "Products". Należy zamknąć okno Relacje, zapisując bieżącą konfigurację w odpowiedzi na monit, a następnie uruchomić poniższą procedurę. Następnie można zobaczyć nową relację w oknie Relacje.

Sub NewRelation()

Dim dbs As Database, rel As Relation, fld As Field

' Return reference to current database.

Set dbs = CurrentDb

' Create new Relation object and specify foreign table.

Set rel = dbs.CreateRelation("CategoryProducts", "Categories", "Products")

' Set attributes to enforce referential integrity.

rel.Attributes = dbRelationUpdateCascade And dbRelationDeleteCascade

' Create field in Relation object.

Set fld = rel.CreateField("CategoryID")

' Specify field name in foreign table.

fld.ForeignName = "CategoryID"

' Append Field object to Fields collection of Relation object.

rel.Fields.Append fld

' Append Relation object to Relations collection.

dbs.Relations.Append rel

dbs.Relations.Refresh

Set dbs = Nothing

End Sub


CreateTableDef, metoda - przykład (Microsoft Access)
CreateTableDef, metoda – przykład (Microsoft Access)

W poniższym przykładzie tworzony jest obiekt TableDef, który jest następnie dołączany do kolekcji TableDefs bieżącej bazy danych.

Sub NewTable()

Dim dbs As Database, tdf As TableDef, fld As Field

' Return reference to current database.

Set dbs = CurrentDb

' Return TableDef object variable that points to new table.

Set tdf = dbs.CreateTableDef("Contacts")

' Define new field in table.

Set fld = tdf.CreateField("ContactName", dbText, 40)

' Append Field object to Fields collection of TableDef object.

tdf.Fields.Append fld

tdf.Fields.Refresh

' Append TableDef object to TableDefs collection of database.

dbs.TableDefs.Append tdf

dbs.TableDefs.Refresh

Set dbs = Nothing

End Sub


Delete, metoda - przykład (Microsoft Access)
Delete, metoda – przykład (Microsoft Access)

W poniższym przykładzie tworzone jest nowe pole w tabeli, a następnie pole to jest usuwane:

Sub DeleteField()

Dim dbs As Database, tdf As TableDef

Dim fldInitial As Field

' Return reference to current database.

Set dbs = CurrentDb

Set tdf = dbs.TableDefs!Employees

' Create new Field object.

Set fldInitial = tdf.CreateField("MiddleInitial", dbText, 2)

' Append new Field object.

tdf.Fields.Append fldInitial

' Refresh Fields collection.

tdf.Fields.Refresh

' Delete new Field object.

tdf.Fields.Delete fldInitial.Name

tdf.Fields.Refresh

Set dbs = Nothing

End Sub


Edit, metoda - przykład (Microsoft Access)
Edit, metoda – przykład (Microsoft Access)

W poniższym przykładzie otwierany jest obiekt Recordset i wyszukiwany jest każdy rekord spełniający kryteria wyszukiwania w polu "Title". Następnie w procedurze zastosowano metodę Edit w celu przygotowania rekordu do edycji, zmiany nazwy stanowiska i zapisania zmian.

Sub ChangeTitle()

Dim dbs As Database, rst As Recordset

Dim strCriteria As String, strNewTitle As String

' Return reference to current database.

Set dbs = CurrentDb

' Set search criteria.

strCriteria = "Title = 'Sales Representative'"

strNewTitle = "Account Executive"

' Create dynaset-type Recordset object.

Set rst = dbs.OpenRecordset("Employees", dbOpenDynaset)

' Find first occurrence.

rst.FindFirst strCriteria

' Loop until no matching records.

Do Until rst.NoMatch

With rst

.Edit	' Enable editing.

!Title = strNewTitle	' Change title.

.Update	' Save changes.

.FindNext strCriteria	' Find next occurrence.

End With

Loop

rst.Close

Set dbs = Nothing

End Sub

Wskazówka   Użycie kwerendy aktualizującej do zmiany danych jest bardziej efektywne. Na przykład, do osiągnięcia takich samych wyników można zastosować następujący kod:

Sub ChangeTitleSQL()

Dim dbs As Database

Dim strSQL As String

' Return reference to current database.

Set dbs = CurrentDb

' Create SQL string.

strSQL = "UPDATE Employees SET Title = 'Account Executive' " _

& "WHERE Title = 'Sales Representative' "

' Run action query.

dbs.Execute strSQL

' Return number of records updated.

Debug.Print dbs.RecordsAffected

Set dbs = Nothing

End Sub


Execute, metoda - przykład (Microsoft Access)
Execute, metoda – przykład (Microsoft Access)

W poniższym przykładzie wykonywana jest kwerenda funkcjonalna, a następnie wyświetlana jest liczba zmienionych rekordów:

Sub RecordsUpdated()

Dim dbs As Database, qdf As QueryDef

Dim strSQL As String

' Return reference to current database.

Set dbs = CurrentDb

strSQL = "UPDATE Employees SET Title = " _

& "'Senior Sales Representative' " _

& "WHERE Title = 'Sales Representative';"

' Create new QueryDef.

Set qdf = dbs.CreateQueryDef("UpdateTitles", strSQL)

' Execute QueryDef.

qdf.Execute

Debug.Print qdf.RecordsAffected

Set dbs = Nothing

End Sub


FieldSize, właściwość - przykład (Microsoft Access)
FieldSize, właściwość – przykład (Microsoft Access)

W poniższym przykładzie została użyta właściwość FieldSize do zwrócenia rozmiaru w bajtach dwóch pól w tabeli "Employees" ("Pracownicy"). Pole "Notes" zawiera dane typu Memo, a pole "Photo" dane dwójkowe długie (obiekt OLE).

Sub GetFieldSize()

Dim dbs As Database, rst As Recordset

Dim fldNotes As Field, fldPhoto As Field

Dim strSQL As String

' Return reference to current database.

Set dbs = CurrentDb

' Construct SQL statement to return Notes and Photo fields.

strSQL = "SELECT Notes, Photo FROM Employees;"

' Create dynaset-type Recordset object.

Set rst = dbs.OpenRecordset(strSQL)

Set fldNotes = rst!Notes

Set fldPhoto = rst!Photo

' Move to first record.

rst.MoveFirst

Debug.Print "Size of Notes:"; "	"; "Size of Photo:"

' Print sizes of fields for each record in Recordset object.

Do Until rst.EOF

Debug.Print fldNotes.FieldSize; "	"; fldPhoto.FieldSize

rst.MoveNext

Loop

rst.Close

Set dbs = Nothing

End Sub


FindFirst, FindLast, FindNext, FindPrevious, metody - przykład (Microsoft Access)
FindFirst, FindLast, FindNext, FindPrevious, metody – przykład (Microsoft Access)

W poniższym przykładzie tworzony jest obiekt Recordset typu dynamiczny zestaw rekordów, a następnie zastosowana jest metoda FindFirst do znalezienia pierwszego rekordu spełniającego określone kryteria. Następnie procedura znajduje pozostałe rekordy spełniające kryteria.

Sub FindRecord()

Dim dbs As Database, rst As Recordset

Dim strCriteria As String

' Return reference to current database.

Set dbs = CurrentDb

' Define search criteria.

strCriteria = "[ShipCountry] = 'UK' And [OrderDate] >= #1-1-95#"

' Create a dynaset-type Recordset object based on Orders table.

Set rst = dbs.OpenRecordset("Orders", dbOpenDynaset)

' Find first matching record.

rst.FindFirst strCriteria

' Check if record is found.

If rst.NoMatch Then

MsgBox "No record found."

Else

' Find other matching records.

Do Until rst.NoMatch

Debug.Print rst!ShipCountry; "   "; rst!OrderDate

rst.FindNext strCriteria

Loop

End If

rst.Close

Set dbs = Nothing

End Sub


GetRows, metoda - przykład (Microsoft Access)
GetRows, metoda – przykład (Microsoft Access)

W poniższym przykładzie zastosowano metodę GetRows do zwrócenia dwuwymiarowej tablicy zawierającej wszystkie wiersze danych obiektu Recordset:

Sub RowsArray()

Dim dbs As Database, rst As Recordset, strSQL As String

Dim varRecords As Variant, intI As Integer, intJ As Integer

' Return reference to current database.

Set dbs = CurrentDb

' Build SQL statement that returns specified fields.

strSQL = "SELECT FirstName, LastName, HireDate " _

& "FROM Employees"

' Open dynaset-type Recordset object.

Set rst = dbs.OpenRecordset(strSQL)

' Move to end of recordset.

rst.MoveLast

' Return to first record.

rst.MoveFirst

' Return all rows into array.

varRecords = rst.GetRows(rst.RecordCount)

' Find upper bound of second dimension.

For intI = 0 To UBound(varRecords, 2)

Debug.Print

' Find upper bound of first dimension.

For intJ = 0 To UBound(varRecords, 1)

' Print data from each row in array.

Debug.Print varRecords(intJ, intI)

Next intJ

Next intI

rst.Close

Set dbs = Nothing

End Sub


Move, metoda - przykład (Microsoft Access)
Move, metoda – przykład (Microsoft Access)

W poniższym przykładzie zastosowano metodę Move do przejścia naprzód o dwa wiersze w obiekcie Recordset:

Sub MoveForward()

Dim dbs As Database, rst As Recordset

Dim strCriteria As String

' Return reference to current database.

Set dbs = CurrentDb

' Open dynaset-type Recordset object.

Set rst = dbs.OpenRecordset("SELECT * FROM Orders " _

& "ORDER BY ShipCountry;")

rst.MoveLast

rst.MoveFirst

' Check number of records in Recordset object.

If rst.RecordCount > 2 Then

' Move forward two rows.

rst.Move 2

Debug.Print rst!ShipCountry

End If

rst.Close

Set dbs = Nothing

End Sub


MoveFirst, MoveLast, MoveNext, MovePrevious, metody - przykład (Microsoft Access)
MoveFirst, MoveLast, MoveNext, MovePrevious, metody – przykład (Microsoft Access)

W poniższym przykładzie zastosowano metodę MoveLast do wypełnienia obiektu Recordset tak, aby było możliwe policzenie rekordów. Następnie metoda MoveFirst przenosi bieżący wskaźnik rekordu na pierwszy rekord obiektu Recordset. Procedura monituje użytkownika o wprowadzenie liczby, a następnie przechodzi do przodu o podaną liczbę rekordów.

Sub MoveThroughRecords()

Dim dbs As Database, rst As Recordset, intI As Integer

Dim strNumber As String

' Return reference to current database.

Set dbs = CurrentDb

Set rst = dbs.OpenRecordset("Products")

' Populate Recordset object.

rst.MoveLast

' Return to first record.

rst.MoveFirst

' Get number smaller than number of records.

strNumber = InputBox("Please enter a number less than " _

& rst.RecordCount & ".")

' Move specified number of records.

For intI = 1 To strNumber

rst.MoveNext

Next intI

Debug.Print rst!ProductName

rst.Close

Set dbs = Nothing

End Sub


OpenDatabase, metoda - przykład (Microsoft Access)
OpenDatabase, metoda – przykład (Microsoft Access)

W poniższym przykładzie zwracana jest zmienna Database wskazująca bieżącą bazę danych. Następnie, za pomocą metody OpenDatabase, otwierana jest inna baza danych o nazwie Another.mdb, po czym procedura wylicza wszystkie obiekty TableDef w obydwu bazach danych.

Aby przetestować ten przykład, należy utworzyć nową bazę danych o nazwie Another.mdb, zamknąć ją i umieścić w katalogu zawierającym bazę danych, z której uruchamiany jest kod.

Sub OpenAnother()

Dim wsp As Workspace

Dim dbs As Database, dbsAnother As Database

Dim tdf As TableDef

' Return reference to current database.

Set dbs = CurrentDb

' Return reference to default workspace.

Set wsp = DBEngine.Workspaces(0)

' Return reference to Another.mdb.

Set dbsAnother = wsp.OpenDatabase("Another.mdb")

' Enumerate all TableDef objects in each database.

Debug.Print dbs.Name & ":"

For Each tdf in dbs.TableDefs

Debug.Print tdf.Name

Next tdf

Debug.Print

Debug.Print dbsAnother.Name & ":"

For Each tdf in dbsAnother.TableDefs

Debug.Print tdf.Name

Next tdf

Set dbs = Nothing

Set dbsAnother = Nothing

End Sub


OpenRecordset, metoda - przykład (Microsoft Access)
OpenRecordset, metoda – przykład (Microsoft Access)

W poniższym przykładzie otwierany jest obiekt Recordset typu dynamiczny zestaw rekordów, a następnie drukowana jest liczba rekordów w tym obiekcie Recordset.

Sub UKOrders()

Dim dbs As Database, rst As Recordset

Dim strSQL As String

' Return reference to current database.

Set dbs = CurrentDb

strSQL = "SELECT * FROM Orders WHERE [ShipCountry] = 'UK'"

Set rst = dbs.OpenRecordset(strSQL)

rst.MoveLast

Debug.Print rst.RecordCount

rst.Close

Set dbs = Nothing

End Sub


Refresh, metoda - przykład (Microsoft Access)
Refresh, metoda – przykład (Microsoft Access)

W poniższym przykładzie odświeżana jest kolekcja Indexes obiektu TableDef. Metoda Refresh może być używana w bazie danych w środowisku sieciowym do pokazywania zmian wprowadzonych przez innych użytkowników do obiektów Index kolekcji Indexes obiektu TableDef.

Sub RefreshIndex()

Dim dbs As Database, tdf As TableDef

Dim idx As Index, fld As Field

' Return reference to current database.

Set dbs = CurrentDb

Set tdf = dbs.TableDefs!Employees

tdf.Indexes.Refresh

For Each idx In tdf.Indexes

Debug.Print idx.Name; ":"

For Each fld In idx.Fields

Debug.Print "   "; fld.Name

Next fld

Next idx

Set dbs = Nothing

End Sub


Seek, metoda - przykład (Microsoft Access)
Seek, metoda – przykład (Microsoft Access)

W poniższym przykładzie tworzony jest obiekt Index w tabeli "Employees" ("Pracownicy"). Nowy indeks składa się z dwóch pól, "LastName" i "FirstName". Następnie w procedurze została zastosowana metoda Seek do znalezienia określonego rekordu.

Sub NewIndex()

Dim dbs As Database, tdf As TableDef, idx As Index

Dim fldLastName As Field, fldFirstName As Field, rst As Recordset

' Return reference to current database.

Set dbs = CurrentDb

' Return reference to Employees table.

Set tdf = dbs.TableDefs!Employees

' Return Index object that points to new index.

Set idx = tdf.CreateIndex("FullName")

' Create and append index fields.

Set fldLastName = idx.CreateField("LastName", dbText)

Set fldFirstName = idx.CreateField("FirstName", dbText)

idx.Fields.Append fldLastName

idx.Fields.Append fldFirstName

' Append Index object.

tdf.Indexes.Append idx

tdf.Indexes.Refresh

' Open table-type Recordset object.

Set rst = dbs.OpenRecordset("Employees")

' Set current index to new index.

rst.Index = idx.Name

' Specify record to find.

rst.Seek "=", "Fuller", "Andrew"

If rst.NoMatch Then

Debug.Print "Seek unsuccessful!"

Else

Debug.Print "Seek successful."

End If

rst.Close

Set dbs = Nothing

End Sub


Error, obiekt (Microsoft Access)

Właściwość Description obiektu Error zawiera opisowy ciąg znaków związany z określonym błędem DAO (Data Access Objects). Właściwość Description można odczytać tylko wtedy, gdy wystąpił błąd DAO.

Aby odczytać opisowy ciąg znaków związany z błędem DAO, który nie wystąpił, należy, użyć funkcji AccessError programu Microsoft Access. Funkcja AccessError pobiera jako argument numer błędu, a zwraca związany z tym błędem opisowy ciąg znaków. Na przykład, aby określić ciąg znaków związany z błędem DAO o numerze 3021, można użyć funkcji AccessError w następujący sposób:

Debug.Print AccessError(3021)

Program Microsoft Access wyświetla opisowy ciąg znaków związany z błędem DAO o numerze 3021, "Nie ma bieżącego rekordu", w oknie analizy programu.


Recordset, obiekt (Microsoft Access)

Jeśli użytkownik użył składni operatora . (kropka) odwołując się do obiektu Recordset w aplikacjach utworzonych w wersjach 1.x lub 2.0 programu Microsoft Access, trzeba zmodyfikować te odwołania i użyć znaku ! (wykrzyknik). Chcąc nadal używać znaku . (kropka), trzeba ustanowić odwołanie do biblioteki zgodności Microsoft DAO 2.5/3.5 w oknie dialogowym Odwołania, dostępnym przez kliknięcie polecenia Odwołania w menu Narzędzia modułu widok Projekt.


Container, obiekt; Containers, kolekcja (Microsoft Access)

Poza obiektami typu Container zdefiniowanymi w aparacie bazy danych Microsoft Jet, w programie Microsoft Access zdefiniowane są cztery dodatkowe obiekty typu Container.

Kontener o nazwie	Zawiera informacje
Forms	O zapisanych formularzach
Modules	O zapisanych modułach
Reports	O zapisanych raportach
Scripts	O zapisanych makrach
Obiekty Container zdefiniowane w programie Microsoft Access są obiektami bazy danych, a nie obiektami dostępu do danych (DAO). Obiekty Container dostarczają informacji o obiektach programu Microsoft Access dla aparatu bazy danych Jet. Informacje te używane są przez aparat bazy danych Jet do implementacji zabezpieczeń obiektów bazy danych programu Microsoft Access w taki sam sposób, jak dla obiektów dostępu do danych (DAO).

Kolekcja Containers w programie Microsoft Access zawiera wszystkie obiekty typu Container – zarówno programu Microsoft Access jak i aparatu bazy danych Jet.

Kolekcja Documents obiektu Container zawiera obiekty Document reprezentujące poszczególne obiekty typu opisanego przez obiekt Container. Na przykład, obiekt Container Forms zawiera kolekcję Documents, do której może należeć obiekt Document odpowiadający formularzowi o nazwie "Orders".

Obiektów Container można używać do ustanawiania i egzekwowania uprawnień do obiektów bazy danych programu Microsoft Access. Aby ustawić uprawnienia do obiektu Container, należy ustawić właściwość UserName obiektu Container na nazwę istniejącego obiektu User lub Group, a następnie ustawić właściwość Permissions obiektu Container.

Uwaga   Nie należy mylić poszczególnych typów obiektów Container z typami kolekcji o tej samej nazwie. Każdy z obiektów Container typu Forms i Reports zawiera kolekcje Documents, które zawierają poszczególne obiekty typu Document reprezentujące każdy zapisany formularz lub raport. Kolekcje Forms i Reports odnoszą się tylko do otwartych formularzy lub raportów.


Database, obiekt; Databases, kolekcja (Microsoft Access)

Podczas pracy z obiektami dostępu do danych (DAO) w programie Microsoft Access, często potrzebna jest zmienna obiektowa typu Database reprezentująca bieżącą bazę danych. Funkcja CurrentDB zwraca obiekt Database reprezentujący aktualnie otwartą bazę danych. Obiekt ten jest automatycznie dołączany do kolekcji Databases.

Załóżmy na przykład, że użytkownik pracuje w programie Microsoft Access z przykładową bazą danych "Northwind". Może on utworzyć obiekt typu Database odwołujący się do tej bazy danych przez zadeklarowanie zmiennej obiektowej typu Database, a następnie wskazanie za pomocą tej zmiennej na obiekt Database zwrócony przez funkcję CurrentDb.

Dim dbs As Database

Set dbs = CurrentDb

Nie trzeba znać nazwy bazy danych ani pozycji w kolekcji Databases, aby użyć jej jako bieżącej bazy danych. Chcąc poznać nazwę bieżącej bazy danych, należy sprawdzić wartość właściwości Name (Nazwa) obiektu Database, która zawiera ścieżkę i nazwę pliku bazy danych. Aby znaleźć jej pozycję w kolekcji Databases, trzeba przeliczyć zawartość kolekcji.

W programie Microsoft Access nie można otworzyć jednocześnie kilku baz danych. Natomiast w kodzie Visual Basic można utworzyć kilka niezależnych zmiennych typu Database reprezentujących różne otwarte bazy danych. Umożliwia to operowanie kilkoma bazami danych jednocześnie za pomocą kodu. Można również utworzyć kilka zmiennych obiektowych typu Database i wskazać nimi bieżącą bazę danych.

Uwaga   W kodzie języka Visual Basic należy raczej użyć funkcji CurrentDb niż składni DBEngine(0)(0), aby zwrócić obiekt typu Database odwołujący się do bieżącej bazy danych. Funkcja CurrentDb tworzy jeszcze jedną instancję bieżącej bazy danych, podczas gdy składnia DBEngine(0)(0) odwołuje się do otwartej kopii bieżącej bazy danych. Użycie funkcji CurrentDb umożliwia utworzenie kilku zmiennych typu Database odwołujących się do bieżącej bazy danych. Program Microsoft Access w dalszym ciągu obsługuje składnię DBEngine(0)(0), ale należy rozważyć możliwość odpowiedniej zmiany kodu, aby uniknąć ewentualnych konfliktów w środowisku sieciowym.


DBEngine, obiekt (Microsoft Access)

W programie Microsoft Access można manipulować obiektami dostępu do danych (DAO) z innych aplikacji poprzez automatyzację. Jeśli steruje się programem Microsoft Access z innej aplikacji, takiej jak język Visual Basic lub program Microsoft Excel, można użyć właściwości DBEngine (AparatBazyDanych) obiektu Application programu Microsoft Access, aby zwrócić odwołanie do obiektu DBEngine. Wszystkie obiekty dostępu do danych i kolekcje są wtedy dostępne poprzez obiekt DBEngine.


Document, obiekt; Documents, kolekcja (Microsoft Access)

Poza obiektami Document zdefiniowanymi w aparacie bazy danych Microsoft Jet, w programie Microsoft Access zdefiniowane są poniższe obiekty Document.

Document	Container	Zawiera informacje
Form	Forms	O zapisanym formularzu
Macro	Scripts	O zapisanym makrze
Module	Modules	O zapisanym module
Report	Reports	O zapisanym raporcie
SummaryInfo	Databases	Podsumowujące dokument bazy danych
UserDefined	Databases	O właściwościach zdefiniowanych przez użytkownika
Obiekty Document zdefiniowane w programie Microsoft Access są obiektami bazy danych, a nie obiektami dostępu do danych (DAO). Obiekty Document dostarczają informacji o obiektach programu Microsoft Access dla aparatu bazy danych Jet. Informacje te używane są przez aparat bazy danych Jet do implementacji zabezpieczeń obiektów bazy danych programu Microsoft Access w taki sam sposób, jak dla obiektów dostępu do danych (DAO).

Kolekcja Documents obiektu Container zawiera obiekty Document reprezentujące poszczególne obiekty typu opisanego przez obiekt Container. Na przykład, obiekt Container Forms zawiera kolekcję Documents, do której może należeć obiekt Document odpowiadający formularzowi o nazwie "Orders".

W programie Microsoft Access zdefiniowane są dwa obiekty typu Document w obiekcie Container Databases – SummaryInfo i UserDefined.

Obiekt Document SummaryInfo umożliwia programowy dostęp do podsumowania właściwości dokumentu, takich jak Title, Subject, Author, Keywords, Comments, Manager, Company, Category i Hyperlink Base. Można również ustawić te właściwości na karcie Podsumowanie okna dialogowego Właściwości bazy danych, dostępnego przez kliknięcie polecenia Właściwości bazy danych w menu Plik.

Aby ustawić te właściwości w języku Visual Basic, trzeba je utworzyć, a następnie dołączyć do kolekcji Properties obiektu Document SummaryInfo, jeśli nie zostały one już określone w oknie dialogowym Właściwości bazy danych. Po utworzeniu właściwości, aby ją ustawić, trzeba jawnie odwołać się do kolekcji Properties. W poniższym przykładzie doc jest zmienną obiektową wskazującą obiekt Document SummaryInfo:

doc.Properties!Title = "Northwind Traders"

Więcej informacji o tworzeniu i ustawianiu właściwości zdefiniowanych w programie Microsoft Access można znaleźć w indeksie Pomocy pod hasłami "Property, obiekt" i "CreateProperty, metoda"

Obiekt Document UserDefined umożliwia programowy dostęp do zdefiniowanych przez użytkownika właściwości na karcie "Niestandardowy" okna dialogowego Właściwości bazy danych. Można również utworzyć te właściwości w języku Visual Basic i dołączyć je do kolekcji Properties obiektu Document UserDefined.

Uwaga   Nie należy mylić właściwości zdefiniowanych w kolekcji Properties dokumentu Database z właściwościami zdefiniowanymi w kolekcji Properties obiektu Database. Właściwości zdefiniowane przez użytkownika można tworzyć w obu kolekcjach Properties, ale tylko te zdefiniowane w obiektach Document SummaryInfo i UserDefined mogą być określone w oknie dialogowym Właściwości bazy danych.

Obiektów Document można używać do ustanawiania i egzekwowania uprawnień do obiektów bazy danych programu Microsoft Access. Aby ustawić uprawnienia do obiektu Document, należy ustawić właściwość UserName obiektu Document na nazwę istniejącego obiektu User lub Group, a następnie ustawić właściwość Permissions obiektu Document.

Uwaga   Nie należy mylić poszczególnych typów obiektów Container z typami kolekcji o tej samej nazwie. Każdy z obiektów Container typu Forms i Reports zawiera kolekcje Documents, które zawierają poszczególne obiekty typu Document reprezentujące każdy zapisany formularz lub raport. Kolekcje Forms i Reports odnoszą się tylko do otwartych formularzy lub raportów.


Field, obiekt; Fields, kolekcja (Microsoft Access)

Poza właściwościami zdefiniowanymi w aparacie bazy danych Microsoft Jet, obiekt Field w kolekcji Fields obiektu QueryDef lub TableDef może również zawierać poniższe właściwości definiowane w aplikacjach programu Microsoft Access.

Szczegóły na temat odczytywania i ustawiania tych właściwości można znaleźć w indeksie Pomocy pod hasłami dotyczącymi poszczególnych właściwości oraz obiektu Property.

Caption	DecimalPlaces
ColumnHidden	Description
ColumnOrder	Format
ColumnWidth	InputMask


Group, obiekt, Groups, kolekcja (Microsoft Access)

Można tworzyć obiekty typu Group, aby ustanawiać i egzekwować uprawnienia do obiektów bazy danych oraz obiektów dostępu do danych programu Microsoft Access. Można na przykład ustawić zabezpieczenia dla formularzy, raportów, makr i modułów.

Obiekt Group ma właściwość Name, której można użyć określając uprawnienia dla obiektu Container lub Document. Można na przykład przypisać wartość właściwości Name obiektu Group właściwości UserName obiektu Container lub Document. Następnie można ustawić właściwość Permissions obiektu Container lub Document, aby określić uprawnienia grupy użytkowników zdefiniowanej przez właściwość UserName. Można też odczytać właściwość Permissions, aby poznać istniejące uprawnienia tej grupy.


Property, obiekt; Properties, kolekcja (Microsoft Access)

W programie Microsoft Access istnieje kilka typów właściwości. Każda z tych właściwości może być reprezentowana w kodzie języka Visual Basic przez zmienną obiektową Property i każda jest elementem kolekcji Properties.

Właściwości odnoszące się do obiektów dostępu do danych

•	Właściwości wbudowane są zdefiniowane w aparacie bazy danych Microsoft Jet dla każdego obiektu dostępu do danych (DAO).

•	Właściwości zdefiniowane przez użytkownika mogą zostać dodane do niektórych obiektów DAO. Do obiektów tych należą Database, Index, QueryDef i TableDef oraz obiekty Field w kolekcji Fields obiektu QueryDef lub TableDef.

•	Niektóre właściwości zdefiniowane w programie Microsoft Access odnoszą się do obiektów DAO. Właściwości te mogą być zazwyczaj ustawiane zarówno w oknie programu Microsoft Access jak i w języku Visual Basic. Właściwości te nie są rozpoznawane przez aparat bazy danych Jet, dopóki odpowiadające im obiekty Property nie zostaną utworzone i dołączone do kolekcji Properties. Obiektami dostępu do danych, do których mogą się odnosić takie właściwości są QueryDef i TableDef oraz obiekty Field w kolekcji Fields obiektu QueryDef lub TableDef. Listę tych właściwości zdefiniowanych w programie Microsoft Access można znaleźć w opisie szczegółów dla obiektów TableDef, QueryDef i Field.

Właściwości zdefiniowane w programie Microsoft Access odnoszące się do obiektów dostępu do danych (DAO) różnią się pod pewnymi względami od właściwości zdefiniowanych w aparacie bazy danych Jet.

Aby odwołać się do właściwości zdefiniowanej przez użytkownika lub zdefiniowanej w programie Microsoft Access, trzeba jawnie odwołać się do kolekcji Properties. Najszybszym sposobem odwołania się do właściwości programu Microsoft Access jest użycie następującej składni:

obiekt.Properties!nazwa_właściwości

W tym przykładzie obiekt jest obiektem DAO, a nazwa_właściwości jest nazwą właściwości programu Microsoft Access.

Można również użyć następującej składni, dla której odwołanie się do właściwości następuje nieco wolniej:

obiekt.Properties("nazwa")

Aby odwołać się do właściwości zdefiniowanych w aparacie bazy danych Jet, można po prostu użyć składni obiekt.nazwa.

Jeśli po raz pierwszy ustawia się właściwość zdefiniowaną w programie Microsoft Access, trzeba najpierw utworzyć ją używając metody CreateProperty. Na przykład, właściwość Caption (Tytuł) obiektu Field jest właściwością zdefiniowaną w programie Microsoft Access. Jeśli w widoku "Projekt" tabeli nie została wcześniej ustawiona właściwość Caption (Tytuł), to aby ustawić ją po raz pierwszy w kodzie języka Visual Basic, trzeba najpierw utworzyć tę właściwość za pomocą metody CreateProperty i dołączyć do kolekcji Properties.

Właściwość zdefiniowana w programie Microsoft Access jest automatycznie dołączana do kolekcji Properties, gdy po raz pierwszy ustawia się ją w oknie programu Microsoft Access, tak że jeśli została ona ustawiona w interfejsie użytkownika, nie trzeba jej tworzyć i dołączać w kodzie programu. Można na przykład ustawić właściwość Caption (Tytuł) tabeli w widoku "Arkusz danych" przez kliknięcie polecenia Czcionka w menu Format. Właściwość ta zostaje następnie włączona do kolekcji Properties obiektu TableDef wskazującego na tabelę.

Dopóki właściwość zdefiniowana w programie Microsoft Access nie zostanie ustawiona w widoku "Projekt" tabeli lub w kodzie języka Visual Basic, właściwość ta nie pojawi się w kolekcji Properties. Ustawiając tę właściwość w języku Visual Basic, należy dołączyć kod obsługi błędów. który powinien sprawdzać, czy właściwość ta istnieje już w kolekcji Properties, a jeśli nie tworzyć ją i dołączać do kolekcji.

Właściwości odnoszące się do obiektów programu Microsoft Access

Podobnie jak obiekty dostępu do danych (DAO), każdy obiekt programu Microsoft Access  zawiera kolekcję Properties zawierającą wbudowane obiekty Property. Na przykład obiekty Property odnoszące się do formularza są elementami kolekcji Properties obiektu Form.

Można również tworzyć definiowane przez użytkownika właściwości dla obiektów programu Microsoft Access. Można na przykład utworzyć właściwość o nazwie TypTekstu odnoszącą się do formantu typu pole tekstowe.

Obiekty Property w kolekcji Properties obiektów Form, Report i Control różnią się od obiektów Properties dostępu do danych (DAO) tym, że nie posiadają one właściwości Inherited.

Można przeliczyć obiekty Property w kolekcji Properties obiektów Form, Report i Control. Jednak  obiekty Application i Screen programu Microsoft Access mają kolekcje Properties, których nie można przeliczyć. Ponadto, właściwości tych obiektów mają atrybut dostępu tylko-do-odczytu.


QueryDef, obiekt; QueryDefs, kolekcja (Microsoft Access)

Poza właściwościami zdefiniowanymi w aparacie bazy danych Microsoft Jet, obiekt QueryDef może również zawierać poniższe właściwości definiowane w aplikacji programu Microsoft Access. Szczegóły na temat ustawiania i odczytywania tych właściwości można znaleźć w indeksie Pomocy pod hasłami dotyczącymi poszczególnych właściwości i obiektu Property.

DatasheetFontItalic (KursywaArkusza)	FrozenColumns (KolumnyZablokowane)
DatasheetFontHeight (WysokośćCzcionkiArkusza)	LogMessages (RejestrowanieKomunikatów)
DatasheetFontName (NazwaCzcionkiArkusza)	RecordLocks (BlokowanieRekordów)
DatasheetFontUnderline (PodkreślenieCzcionkiArkusza)	RowHeight (WysokośćWiersza)
DatasheetFontWeight (GrubośćCzcionkiArkusza)	ShowGrid (PokażSiatkę)
Description (Opis)	UseTransaction (UżyjTransakcji)


TableDef, obiekt; TableDefs, kolekcja (Microsoft Access)

Poza właściwościami zdefiniowanymi w aparacie bazy danych Microsoft Jet, obiekt TableDef może również zawierać poniższe właściwości definiowane w aplikacjach programu Microsoft Access. Szczegóły na temat ustawiania i odczytywania tych właściwości można znaleźć w indeksie Pomocy pod hasłami dotyczącymi poszczególnych właściwości i obiektu Property.

DatasheetFontHeight	Description
DatasheetFontItalic	FrozenColumns
DatasheetFontName	RowHeight
DatasheetFontUnderline	ShowGrid
DatasheetFontWeight


User, obiekt; Users, kolekcja (Microsoft Access)

Można tworzyć obiekty typu User, aby ustanawiać i egzekwować uprawnienia do obiektów bazy danych oraz obiektów dostępu do danych programu Microsoft Access. Można na przykład ustawić zabezpieczenia dla formularzy, raportów, makr i modułów.

Obiekt User ma właściwość Name, której można użyć określając uprawnienia dla obiektu Container lub Document. Można na przykład przypisać wartość właściwości Name obiektu User właściwości UserName obiektu Container lub Document. Następnie można ustawić właściwość Permissions obiektu Container lub Document, aby określić uprawnienia użytkownika zdefiniowanego przez właściwość UserName. Można też odczytać właściwość Permissions, aby poznać istniejące uprawnienia tego użytkownika.


Container, obiekt; Containers, kolekcja - przykład (Microsoft Access)
Container, obiekt; Containers, kolekcja – przykład (Microsoft Access)

W poniższym kodzie przykładowym przyznaje się programistom pełny dostęp do wszystkich modułów w bazie danych, a wszystkim innym użytkownikom uprawnienia tylko-do-odczytu w stosunku do tych modułów:

Sub SetModulePermissions()

Dim dbs As Database, wsp As Workspace, ctr As Container

Dim grp As Group

' Return reference to default workspace.

Set wsp = DBEngine.Workspaces(0)

' Return reference to current database.

Set dbs = CurrentDb

' Return reference to Modules container.

Set ctr = dbs.Containers!Modules

wsp.Groups.Refresh

For Each grp In wsp.Groups

ctr.UserName = grp.Name

If ctr.UserName = "Programmers" Then

ctr.Permissions = ctr.Permissions Or dbSecFullAccess

Else

ctr.Permissions = ctr.Permissions Or acSecModReadDef

End If

Next grp

Set dbs = Nothing

End Sub


Database, obiekt; Databases, kolekcja - przykład (Microsoft Access)
Database, obiekt; Databases, kolekcja – przykład (Microsoft Access)

W poniższym przykładzie zostały pokazane trzy sposoby zwrócenia obiektu Database w programie Microsoft Access. Przedstawiona procedura zwraca obiekt Database reprezentujący bieżącą bazę danych otwartą w oknie programu Microsoft Access. Następnie zostaje utworzona i zapisana na dysku kolejna baza danych o nazwie Newbd.mdb. Później zostaje otwarta istniejąca baza danych o nazwie Another.mdb. Na koniec zostają wyliczone wszystkie obiekty Database w kolekcji Databases.

Sub ReferenceDatabases()

Dim wsp As Workspace

Dim dbsCurrent As Database, dbsNew As Database

Dim dbsAnother As Database, dbs As Database

' Return reference to current database.

Set dbsCurrent = CurrentDb

' Return reference to default workspace.

Set wsp = DBEngine.Workspaces(0)

' Create new Database object.

Set dbsNew = wsp.CreateDatabase("Newdb.mdb", dbLangGeneral)

' Open database other than current database.

Set dbsAnother = wsp.OpenDatabase("Another.mdb")

' Enumerate all open databases.

For Each dbs in wsp.Databases

Debug.Print dbs.Name

Next dbs

For Each dbs In wsp.Databases

Set dbs = Nothing

Next dbs

Set wsp = Nothing

End Sub


Field, obiekt; Fields, kolekcja - przykład (Microsoft Access)
Field, obiekt; Fields, kolekcja – przykład (Microsoft Access)

W poniższym kodzie przykładowym tworzony jest nowy obiekt Field, zostają nadane wartości pewnym jego właściwościom i zostaje on dołączony do kolekcji Fields obiektu TableDef. Następnie procedura wylicza wszystkie pola w kolekcji Fields obiektu TableDef.

Sub NewField()

Dim dbs As Database, tdf As TableDef

Dim fld As Field

' Return reference to current database.

Set dbs = CurrentDb

' Return reference to Employees table.

Set tdf = dbs.TableDefs!Employees

' Create new Field object.

Set fld = tdf.CreateField("SSN#")

' Set Type and Size properties of Field object.

fld.Type = dbText

fld.Size = 11

' Append field.

tdf.Fields.Append fld

' Enumerate all fields in Fields collection of TableDef object.

For Each fld in tdf.Fields

Debug.Print fld.Name

Next fld

Set dbs = Nothing

End Sub


Group, obiekt; Groups, kolekcja - przykład (Microsoft Access)
Group, obiekt; Groups, kolekcja – przykład (Microsoft Access)

W poniższym kodzie przykładowym tworzony jest nowy obiekt User, który zostaje dołączony do kolekcji Users obiektu WorkSpace. Następnie tworzony jest nowy obiekt Group, który zostaje dołączony do kolekcji Groups obiektu WorkSpace. Nowy obiekt Group również zostaje dołączony do kolekcji Groups obiektu User. Następnie modyfikuje się nową grupę i usuwa uprawnienia dla wszystkich modułów.

Należy zauważyć, że aby przypisać użytkowników do grup, trzeba albo dołączyć obiekt User do kolekcji Users obiektu Group, albo dołączyć obiekt Group do kolekcji Groups obiektu User. Nie ma znaczenia, która opcja zostanie wybrana. Każda spowoduje, że określony użytkownik zostanie włączony do określonej grupy.

Uwaga   Podczas programowania zabezpieczeń należy unikać umieszczania hasła i informacji PID w kodzie. Poniższy przykład został utworzony tylko dla celów demonstracyjnych.

Sub NewModulesGroup()

Dim wsp As Workspace, dbs As Database

Dim usr As User, grp As Group, grpMember As Group

Dim ctr As Container

' Return referenct to default workspace.

Set wsp = DBEngine.Workspaces(0)

' Return reference to current database.

Set dbs = CurrentDb

' Create User object and append to Users collection of Workspace object.

Set usr = wsp.CreateUser("Pat Smith", "123abc789xyz", "Password")

wsp.Users.Append usr

' Create Group object and append to Groups collection of Workspace object.

Set grp = wsp.CreateGroup("Programmers", "321xyz987abc")

wsp.Groups.Append grp

' Append Group object to Groups collection of User object.

Set grpMember = usr.CreateGroup("Programmers")

usr.Groups.Append grpMember

' Refresh Groups collection of User object.

usr.Groups.Refresh

' Return Container object.

Set ctr = dbs.Containers!Modules

' Set UserName property of Container object.

ctr.UserName = grpMember.Name

'Add modify and delete permissions for new group on all modules.

ctr.Permissions = ctr.Permissions Or acSecModWriteDef

Set dbs = Nothing

Set wsp = Nothing

End Sub


DBEngine, obiekt - przykład (Microsoft Access)
DBEngine, obiekt – przykład (Microsoft Access)

Kod przedstawiony w poniższym przykładzie powoduje wydrukowanie wszystkich właściwości obiektu DBEngine:

Sub EngineProperties()

Dim prp As Property

For Each prp In DBEngine.Properties

Debug.Print prp.Name

Next prp

End Sub


Document, obiekt; Documents, kolekcja - przykład (Microsoft Access)
Document, obiekt; Documents, kolekcja – przykład (Microsoft Access)

Kod przedstawiony w poniższym przykładzie powoduje wydrukowanie nazwy każdego obiektu Form typu Document w bieżącej bazie danych oraz daty jego ostatniej modyfikacji:

Sub DocumentModified()

Dim dbs As Database, ctr As Container, doc As Document

' Return reference to current database.

Set dbs = CurrentDb

' Return referenct to Forms container.

Set ctr = dbs.Containers!Forms

' Enumerate through Documents collection of Forms container.

For Each doc In ctr.Documents

' Print Document object name and value of LastUpdated property.

Debug.Print doc.Name; "      "; doc.LastUpdated

Next doc

Set dbs = Nothing

End Sub


Dynamiczny zestaw rekordów, typ obiektu Recordset - przykład (Microsoft Access)
Dynamiczny zestaw rekordów, typ obiektu Recordset – przykład (Microsoft Access)

W poniższym kodzie przykładowym tworzony jest obiekt Recordset typu dynamiczny zestaw rekordów, a następnie zostaje sprawdzona właściwość Updatable obiektu Recordset:

Sub RecentHires()

Dim dbs As Database, rst As Recordset

Dim strSQL As String

' Return reference to current database.

Set dbs = CurrentDb

' Open recordset on Employees table.

Set rst = dbs.OpenRecordset("Employees", dbOpenDynaset)

Debug.Print rst.Updatable

rst.Close

Set dbs = Nothing

End Sub


Error, obiekt; Errors, kolekcja - przykład (Microsoft Access)
Error, obiekt; Errors, kolekcja – przykład (Microsoft Access)

W poniższym kodzie przykładowym generowany jest błąd po próbie otwarcia obiektu Recordset w nieistniejącej tabeli "Students". Informacja o błędzie jest przechowywana w obiekcie dostępu do danych (DAO) Error i obiekcie języka Visual Basic Err. Procedura drukuje wartości właściwości Description, Source i Number obiektu Error. Następnie drukowane są odpowiadające im właściwości obiektu Err.

Należy zauważyć, że ostatni obiekt Error w kolekcji Errors zawsze powinien odnosić się do tego samego błędu co obiekt Err. Oznacza to, że wartość Err.Number powinna być równa wartości Errors.Count -1. Jeśli tak nie jest, informacje w kolekcji Errors mogą nie być aktualne. Należy używać metody Refresh, aby mieć pewność, że kolekcja Errors zawiera najświeższe informacje o błędach.

Sub CheckError()

Dim dbs As Database, tdf As TableDef, rst As Recordset

' Declare Error object variable for enumeration of Errors collection.

Dim errX As Error

' Ignore errors.

On Error Resume Next

' Clear error in Err object.

Err.Clear

' Refresh Errors collection.

Errors.Refresh

' Return reference to current database.

Set dbs = CurrentDb

' Attempt to open Recordset object on nonexistent table.

Set rst = dbs.OpenRecordset("Students")

Debug.Print "DAO Error Object:"

' Print number of errors in Errors collection.

Debug.Print ">>>Number of errors: "; Errors.Count

' Enumerate Errors collection and key properties.

For Each errX In DBEngine.Errors

Debug.Print errX.Description

Debug.Print errX.Source

Debug.Print errX.Number

Next errX

Debug.Print

Debug.Print "VBA Err Object:"

' Display corresponding properties of Err object.

Debug.Print Err.Description

Debug.Print Err.Source

Debug.Print Err.Number

Set dbs = Nothing

End Sub


Index, obiekt; Indexes, kolekcja - przykład (Microsoft Access)
Index, obiekt; Indexes, kolekcja – przykład (Microsoft Access)

W poniższym kodzie przykładowym tworzony jest nowy indeks dla tabeli "Employees":

Sub NewIndex()

Dim dbs As Database, tdf As TableDef, idx As Index

Dim fld1 As Field, fld2 As Field

' Return reference to current database.

Set dbs = CurrentDb

' Return reference to Employees table.

Set tdf = dbs.TableDefs!Employees

Set idx = tdf.CreateIndex("EmployeeNameIndex")

Set fld1 = idx.CreateField("LastName")

Set fld2 = idx.CreateField("FirstName")

idx.Fields.Append fld1

idx.Fields.Append fld2

idx.Required = True

tdf.Indexes.Append idx

Set dbs = Nothing

End Sub


Parameter, obiekt; Parameters, kolekcja - przykład (Microsoft Access)
Parameter, obiekt; Parameters, kolekcja – przykład (Microsoft Access)

W poniższym kodzie przykładowym tworzona jest nowa kwerenda parametryczna i dostarczane są wartości dla jej parametrów:

Sub NewParameterQuery()

Dim dbs As Database, qdf As QueryDef, rst As Recordset

Dim prm As Parameter, strSQL As String

' Return reference to current database.

Set dbs = CurrentDb

' Construct SQL string.

strSQL = "PARAMETERS [Beginning OrderDate] DateTime, " _

& "[Ending OrderDate] DateTime; SELECT * FROM Orders " & _

"WHERE (OrderDate Between[Beginning OrderDate] " _

& "And [Ending OrderDate]);"

' Create new QueryDef object.

Set qdf = dbs.CreateQueryDef("ParameterQuery", strSQL)

' Supply values for parameters.

qdf.Parameters![Beginning OrderDate] = #4/1/95#

qdf.Parameters![Ending OrderDate] = #4/30/95#

' Open recordset on QueryDef object.

Set rst = qdf.OpenRecordset

rst.MoveLast

MsgBox "Query returned " & rst.RecordCount & " records."

rst.Close

Set dbs = Nothing

End Sub


Property, obiekt; Properties, kolekcja - przykład (Microsoft Access)
Property, obiekt; Properties, kolekcja – przykład (Microsoft Access)

W poniższym kodzie przykładowym została utworzona właściwość, która jest zdefiniowana przez program Microsoft Access, ale stosuje się do obiektów DAO. Ponieważ aparat bazy danych Microsoft Jet nie rozpoznaje właściwości zdefiniowanych przez program Microsoft Access, trzeba utworzyć nowy obiekt Property i dołączyć go do kolekcji Properties, jeśli wartość tej właściwości jest ustawiana po raz pierwszy.

Można użyć tej samej funkcji do ustawienia zdefiniowanej przez użytkownika właściwości obiektu programu Microsoft Access lub obiektu DAO.

Należy zauważyć, że tworząc tę właściwość, trzeba określić właściwą stałą dla argumentu type. Nie mając pewności, jakiego typu danych użyć, należy przeszukać indeks Pomocy, aby znaleźć opis odpowiedniej właściwości.

Function SetAccessProperty(obj As Object, strName As String, _

intType As Integer, varSetting As Variant) As Boolean

Dim prp As Property

Const conPropNotFound As Integer = 3270

On Error GoTo ErrorSetAccessProperty

' Explicitly refer to Properties collection.

obj.Properties(strName) = varSetting

obj.Properties.Refresh

SetAccessProperty = True

ExitSetAccessProperty:

Exit Function

ErrorSetAccessProperty:

If Err = conPropNotFound Then

' Create property, denote type, and set initial value.

Set prp = obj.CreateProperty(strName, intType, varSetting)

' Append Property object to Properties collection.

obj.Properties.Append prp

obj.Properties.Refresh

SetAccessProperty = True

Resume ExitSetAccessProperty

Else

MsgBox Err & ": " & vbCrLf & Err.Description

SetAccessProperty = False

Resume ExitSetAccessProperty

End If

End Function

Poprzednią funkcję można było wywołać za pomocą procedury, takiej jak poniższa:

Sub CallPropertySet()

Dim dbs As Database, tdf As TableDef

Dim blnReturn As Boolean

' Return reference to current database.

Set dbs = CurrentDb

' Return reference to Employees table.

Set tdf = dbs.TableDefs!Employees

' Call SetAccessProperty function.

blnReturn = SetAccessProperty(tdf, _

"DatasheetFontItalic", dbBoolean, True)

' Evaluate return value.

If blnReturn = True Then

Debug.Print "Property set successfully."

Else

Debug.Print "Property not set successfully."

End If

End Sub


QueryDef, obiekt; QueryDefs, kolekcja - przykład (Microsoft Access)
QueryDef, obiekt; QueryDefs, kolekcja – przykład (Microsoft Access)

W poniższym kodzie przykładowym następuje sprawdzenie, czy w bieżącej bazie danych istnieje kwerenda o nazwie "RecentHires", a jeśli tak, jest ona usuwana z kolekcji QueryDefs. Następnie procedura tworzy nowy obiekt QueryDef i otwiera go w widoku "Arkusz danych".

Sub NewQuery()

Dim dbs As Database, qdf As QueryDef

Dim strSQL As String

' Return reference to current database.

Set dbs = CurrentDb

' Refresh QueryDefs collection.

dbs.QueryDefs.Refresh

' If RecentHires query exists, delete it.

For Each qdf in dbs.QueryDefs

If qdf.Name = "RecentHires" Then

dbs.QueryDefs.Delete qdf.Name

End If

Next qdf

' Create SQL string to select employees hired on or after 1-1-94.

strSQL = "SELECT * FROM Employees WHERE HireDate >= #1-1-94#;"

' Create new QueryDef object.

Set qdf = dbs.CreateQueryDef("RecentHires", strSQL)

' Open query in Datasheet view.

DoCmd.OpenQuery qdf.Name

Set dbs = Nothing

End Sub


Recordset, obiekt; Recordsets, kolekcja - przykład (Microsoft Access)
Recordset, obiekt; Recordsets, kolekcja – przykład (Microsoft Access)

W poniższym kodzie przykładowym zostaje otwarty obiekt Recordset typu tabela, obiekt Recordset typu dynamiczny zestaw rekordów i obiekt Recordset typu utrwalony zestaw rekordów. Następnie zostaje wyświetlona wartość właściwości Updatable dla obiektu Recordset.

Sub NewRecordsets()

Dim dbs As Database, rst As Recordset

Dim rstEmployees As Recordset, rstOrders As Recordset

Dim rstProducts As Recordset, strSQL As String

' Return reference to current database.

Set dbs = CurrentDb

' Create table-type Recordset object.

Set rstEmployees = dbs.OpenRecordset("Employees", dbOpenTable)

' Create dynaset-type Recordset object.

Set rstOrders = dbs.OpenRecordset("Employees", dbOpenDynaset)

' Create snapshot-type Recordset object.

Set rstProducts = dbs.OpenRecordset("Products", dbOpenSnapshot)

' Print value of Updatable property for each Recordset object.

For Each rst In dbs.Recordsets

Debug.Print rst.Name; "   "; rst.Updatable

Next rst

' Free all object variables.

rstEmployees.Close

rstOrders.Close

rstProducts.Close

Set dbs = Nothing

End Sub


Relation, obiekt; Relations, kolekcja - przykład (Microsoft Access)
Relation, obiekt; Relations, kolekcja – przykład (Microsoft Access)

W poniższym kodzie przykładowym zostaje usunięta istniejąca relacja między tabelą "Employees" ("Pracownicy") a tabelą "Orders" ("Zamówienia"), a następnie relacja zostaje utworzona ponownie przez utworzenie obiektu Relation.

Sub NewRelation()

Dim dbs As Database

Dim fld As Field, rel As Relation

' Return reference to current database.

Set dbs = CurrentDb

' Find existing EmployeesOrders relation.

For Each rel In dbs.Relations

If rel.TABLE = "Employees" And rel.ForeignTable = "Orders" Then

' Prompt user before deleting relation.

If MsgBox(rel.Name & " already exists. " & vbCrLf _

& "This relation will be deleted and re-created.", vbOK) = vbOK Then

dbs.Relations.Delete rel.Name

' If user chooses Cancel, exit procedure.

Else

Exit Sub

End If

End If

Next rel

' Create new relationship and set its properties.

Set rel = dbs.CreateRelation("EmployeesOrders", "Employees", "Orders")

' Set Relation object attributes to enforce referential integrity.

rel.Attributes = dbRelationDeleteCascade + dbRelationUpdateCascade

' Create field in Fields collection of Relation object.

Set fld = rel.CreateField("EmployeeID")

' Provide name of foreign key field.

fld.ForeignName = "EmployeeID"

' Append field to Relation object and Relation object to database.

rel.Fields.Append fld

dbs.Relations.Append rel

MsgBox "Relation '" & rel.Name & "' created."

Set dbs = Nothing

End Sub


Utrwalony zestaw rekordów, typ obiektu Recordset - przykład (Microsoft Access)
Utrwalony zestaw rekordów, typ obiektu Recordset – przykład (Microsoft Access)

W poniższym kodzie przykładowym tworzony jest obiekt Recordset typu utrwalony zestaw rekordów z instrukcji języka SQL. Następnie drukowana jest wartość właściwości Updatable dla obiektu Recordset. Ponieważ obiekty Recordset typu utrwalony zestaw rekordów nigdy nie podlegają aktualizacji, wartość tej właściwości zawsze będzie równa False (0).

Sub LongTermEmployees()

Dim dbs As Database, qdf As QueryDef, rst As Recordset

Dim strSQL As String

' Return reference to current database.

Set dbs = CurrentDb

' Construct SQL string.

strSQL = "SELECT * FROM Employees WHERE HireDate <= #1-1-94#;"

' Open snapshot-type Recordset object.

Set rst = dbs.OpenRecordset(strSQL, dbOpenSnapshot)

Debug.Print rst.Updatable

rst.Close

Set dbs = Nothing

End Sub


Tabela, typ obiektu Recordset - przykład (Microsoft Access)
Tabela, typ obiektu Recordset – przykład (Microsoft Access)

W poniższym kodzie przykładowym zostaje otwarty obiekt Recordset typu tabela, a następnie zostaje znaleziony określony rekord:

Sub FindEmployee()

Dim dbs As Database, tdf As TableDef

Dim rst As Recordset, idx As Index

Dim fldLastName As Field, fldFirstName As Field

' Return reference to current database.

Set dbs = CurrentDb

' Return reference to Employees table.

Set tdf = dbs.TableDefs!Employees

' Create new index.

Set idx = tdf.CreateIndex("FullName")

' Create and append index fields.

Set fldLastName = idx.CreateField("LastName", dbText)

Set fldFirstName = idx.CreateField("FirstName", dbText)

idx.Fields.Append fldLastName

idx.Fields.Append fldFirstName

' Append Index object.

tdf.Indexes.Append idx

' Open table-type Recordset object.

Set rst = dbs.OpenRecordset("Employees")

' Set current index to new index.

rst.Index = idx.Name

' Specify record to find.

rst.Seek "=", "Fuller", "Andrew"

If rst.NoMatch Then

Debug.Print "Seek failed."

Else

Debug.Print "Seek successful."

End If

rst.close

Set dbs = Nothing

End Sub


TableDef, obiekt; TableDefs, kolekcja - przykład (Microsoft Access)
TableDef, obiekt; TableDefs, kolekcja – przykład (Microsoft Access)

W poniższym kodzie przykładowym tworzony jest nowy obiekt TableDef, zostaje w nim zdefiniowane pole, po czym obiekt zostaje dołączony do kolekcji TableDefs bieżącej bazy danych:

Sub NewTable()

Dim dbs As Database, tdf As TableDef, fld As Field

' Return reference to current database.

Set dbs = CurrentDb

' Create new TableDef object.

Set tdf = dbs.CreateTableDef("Contacts")

' Create new Field object.

Set fld = tdf.CreateField("ContactName", dbText, 30)

' Append new objects.

tdf.Fields.Append fld

dbs.TableDefs.Append tdf

Set dbs = Nothing

End Sub


User, obiekt; Users, kolekcja - przykład (Microsoft Access)
User, obiekt; Users, kolekcja – przykład (Microsoft Access)

W poniższym kodzie przykładowym tworzony jest nowy obiekt User, który zostaje dołączony do kolekcji Users obiektu WorkSpace. Następnie tworzony jest nowy obiekt Group, który zostaje dołączony do kolekcji Groups obiektu WorkSpace. Nowy obiekt User również zostaje dołączony do kolekcji Users obiektu Group. Następnie nowemu użytkownikowi zostają przyznane uprawnienia odczytu w stosunku do tabel.

Należy zauważyć, że aby przypisać użytkowników do grup, trzeba albo dołączyć obiekt User do kolekcji Users obiektu Group, albo dołączyć obiekt Group do kolekcji Groups obiektu User. Nie ma znaczenia, która opcja zostanie wybrana. Każda spowoduje, że określony użytkownik zostanie włączony do określonej grupy.

Uwaga   Podczas programowania zabezpieczeń należy unikać umieszczania hasła i informacji PID w kodzie. Poniższy przykład został utworzony tylko dla celów demonstracyjnych.

Sub NewTablesUser()

Dim wsp As Workspace, dbs As Database

Dim usr As User, grp As Group, usrMember As User

Dim ctr As Container, doc As Document

' Return reference to default workspace.

Set wsp = DBEngine.Workspaces(0)

' Return reference to current database.

Set dbs = CurrentDb

' Create User object and append to Users collection of Workspace object.

Set usr = wsp.CreateUser("Chris Jones", "123abc456DEF", "Password")

wsp.Users.Append usr

' Create Group object and append to Groups collection of Workspace object.

Set grp = wsp.CreateGroup("Marketing", "321xyz654EFD")

wsp.Groups.Append grp

' Append new User object to Users collection of new Group object.

Set usrMember = grp.CreateUser("Chris Jones")

grp.Users.Append usrMember

' Refresh Users collection of Group object.

grp.Users.Refresh

' Return Container object.

Set ctr = dbs.Containers!Tables

' Set UserName property of Container object.

ctr.UserName = usrMember.Name

' Add retrieve permissions for new user on all tables.

ctr.Permissions = ctr.Permissions Or dbSecRetrieveData

Set dbs = Nothing

Set wsp = Nothing

End Sub


AllPermissions, właściwość (Microsoft Access)

Poza obiektami typu Container zdefiniowanymi w aparacie bazy danych Microsoft Jet, w programie Microsoft Access istnieją cztery dodatkowe obiekty typu Container: Forms, Reports, Scripts i Modules. Poszczególne obiekty typu Document (Forms, Reports, Scripts i Modules) należą do kolekcji Documents obiektów typu Container. Właściwość AllPermisisons wspomnianych obiektów typu Container i Document można ustawiać na poniższe stałe.

Stała	Użytkownik lub grupa może
acSecFrmRptReadDef	Otwierać formularz lub raport w widoku "Projekt", ale bez prawa do modyfikacji.
acSecFrmRptWriteDef	Modyfikować lub usuwać formularz lub raport w widoku "Projekt".
acSecFrmRptExecute	Otwierać formularz w widoku "Formularz" lub w widoku "Arkusz danych" oraz drukować lub otwierać raport w widoku "Podgląd układu" lub "Podgląd wydruku".
acSecMacReadDef	Otwierać okno makra i oglądać makro bez prawa do modyfikacji.
acSecMacWriteDef	Modyfikować lub usuwać makro w oknie makra.
acSecModReadDef	Otwierać moduł, ale bez prawa do modyfikacji.
acSecModWriteDef	Modyfikować lub usuwać zawartość modułu.
acSecMacExecute	Uruchamiać makro.


Bookmark, właściwość (Microsoft Access)

Jeśli w kodzie języka Visual Basic używana jest właściwość Bookmark (Zakładka) obiektów dostępu do danych (DAO), to w sekcji deklaracji modułu należy umieścić instrukcję Option Compare Binary. Właściwość Bookmark DAO ustawia i zwraca zakładkę, która jest tablicą typu Variant zmiennych typu Byte. Dlatego metoda porównywania ciągów znaków dla tego modułu musi być metodą binarną. Jeśli zakładki będą porównywane metodą tekstową, określoną na przykład za pomocą instrukcji Option Compare Text lub poprzez ustawienie domyślne instrukcji Option Compare Database, wskaźnik bieżącego rekordu może zostać ustawiony na niewłaściwym rekordzie.

Uwaga   Nie należy mylić tej właściwości z właściwością Bookmark programu Microsoft Access, odnoszącą się do obiektów typu Form i przechowującą zakładkę dla określonego rekordu tabeli lub kwerendy będącej podstawą formularza. Właściwości te nie przeszkadzają sobie wzajemnie; zakładki w formularzu i w obiekcie Recordset mogą istnieć niezależnie od siebie.


CacheStart, właściwość (Microsoft Access)

Jeśli w module programu Microsoft Access używana jest właściwość CacheStart, to w sekcji deklaracji tego modułu należy umieścić instrukcję Option Compare Binary. Ponieważ zakładka ustawiana lub zwracana przez właściwość CacheStart jest tablicą typu Variant zmiennych typu Byte, metoda porównywania ciągów znaków dla tego modułu musi być metodą binarną. Jeśli zakładki będą porównywane metodą tekstową, określoną na przykład za pomocą instrukcji Option Compare Text lub poprzez ustawienie domyślne instrukcji Option Compare Database, wskaźnik bieżącego rekordu może zostać ustawiony na niewłaściwym rekordzie.


DefaultValue, właściwość (Microsoft Access)

Jeśli w programie Microsoft Access właściwość dostępu do danych (DAO) DefaultValue (WartośćDomyślna) zostanie ustawiona na wartość GenUniqueID( ), aby utworzyć pole Autonumer, trzeba również właściwość Attributes ustawić na wartość dbAutoIncrement. W przeciwnym razie, program Microsoft Access nie przypisze polu typu danych Autonumer i wystąpi błąd przy próbie obejrzenia tabeli w widoku "Arkusz danych".

W poniższym kodzie zostało pokazane, jak można utworzyć pole z typem danych Autonumer, za pomocą zmiennej obiektowej tdf typu TableDef i zmiennej obiektowej fld typu Field.

Set fld = tdf.CreateField("EmployeeID", dbLong)

fld.DefaultValue = "GenUniqueID()"

fld.Attributes = dbAutoIncrField

tdf.Fields.Append fld

Jeśli ustawienie właściwości DefaultValue DAO jest wyrażeniem, nie może ono zawierać funkcji zdefiniowanych przez użytkownika, funkcji agregujących domen programu Microsoft Access, funkcji agregujących języka SQL, funkcji CurrentUser, funkcji Eval ani odwołań do formularzy, kwerend i innych obiektów typu Field.


Description, właściwość (Microsoft Access)

Właściwość obiektów dostępu do danych (DAO) Description (Opis) dotyczy obiektu Error i zwraca tekst związany z błędem. Można ją ustawić tylko w języku Visual Basic.

Uwaga   Nie należy mylić tej właściwości z właściwością Description programu Microsoft Access, opisującą tabele lub kwerendy oraz ich pola. Właściwość ta dotyczy obiektu TableDef, QueryDef lub Field w kolekcji Fields obiektu TableDef lub QueryDef.


Filter, właściwość (Microsoft Access)

Właściwość obiektów dostępu do danych (DAO) Filter (Filtr) ustawia filtr dla obiektu Recordset. Można ją ustawić tylko w języku Visual Basic.

Uwaga   Właściwość Filter programu Microsoft Access ustawia filtr dla formularza. Można ją ustawić w arkuszu właściwości formularza w jego widoku "Projekt", w makrze lub w kodzie języka Visual Basic.


HelpContext, HelpFile, właściwości (Microsoft Access)

Właściwości obiektów dostępu do danych (DAO) HelpFile i HelpContext dotyczą obiektu Error. Można je ustawić tylko w kodzie Visual Basic.

Uwaga   Nie należy mylić tych właściwości z właściwościami HelpFile i HelpContextId programu Microsoft Access. Są one podobne, lecz dotyczą formularzy, raportów i formantów. Można je ustawić w arkuszu właściwości, w widoku "Projekt" formularza albo w widoku "Projekt" raportu, w makrze lub w kodzie języka Visual Basic


Inherited, właściwość (Microsoft Access)

W programie Microsoft Access definiowanych jest wiele właściwości odnoszących się do obiektów dostępu do danych (DAO). Ponieważ są one definiowane w programie Microsoft Access, nie są automatycznie rozpoznawane przez aparat bazy danych Microsoft Jet. Aby ustawić którąkolwiek z tych właściwości w kodzie języka Visual Basic, należy najpierw utworzyć ją za pomocą metody CreateProperty, a następnie dołączyć do kolekcji Properties danego obiektu. Więcej informacji można znaleźć w indeksie Pomocy pod hasłem "Property, obiekt".

Przy tworzeniu obiektu opartego na innym obiekcie, obiekt pochodny dziedziczy właściwości obiektu pierwotnego. Właściwości Inherited można użyć do sprawdzenia, która spośród właściwości obiektu została dla niego utworzona, a która odziedziczona z innego obiektu.

Załóżmy na przykład, że trzeba ustawić właściwość DatasheetFontName dla obiektu TableDef. Aby ją ustawić po raz pierwszy, należy utworzyć odpowiedni obiekt typu Property i dołączyć go do kolekcji Properties obiektu TableDef. Właściwość Inherited nowego obiektu Property zwróci wartość False (0).

Jeśli następnie zostanie utworzony nowy obiekt QueryDef na podstawie tabeli odpowiadającej obiektowi TableDef, właściwość DatasheetFontName zostanie włączona do kolekcji Properties obiektu QueryDef. Właściwość Inherited obiektu Property odpowiadającego tej właściwości zwróci wartość True (–1).


LastModified, właściwość (Microsoft Access)

Jeśli w module programu Microsoft Access używana jest właściwość LastModified, to w sekcji deklaracji tego modułu należy umieścić instrukcję Option Compare Binary. Ponieważ zakładka ustawiana lub zwracana przez właściwość LastModified jest tablicą typu Variant zmiennych typu Byte, metoda porównywania ciągów znaków dla tego modułu musi być metodą binarną. Jeśli zakładki będą porównywane metodą tekstową, określoną na przykład za pomocą instrukcji Option Compare Text lub poprzez ustawienie domyślne instrukcji Option Compare Database, wskaźnik bieżącego rekordu może zostać ustawiony na niewłaściwym rekordzie.


Permissions, właściwość (Microsoft Access)

Poza obiektami typu Container zdefiniowanymi w aparacie bazy danych Microsoft Jet, w programie Microsoft Access istnieją cztery dodatkowe obiekty typu Container: Forms, Reports, Scripts i Modules. Poszczególne obiekty typu Document (Forms, Reports, Scripts i Modules) należą do kolekcji Documents obiektów typu Container. Właściwość Permisisons wspomnianych obiektów typu Container i Document można ustawiać na poniższe stałe.

Stała	Użytkownik lub grupa może
acSecFrmRptReadDef	Otwierać formularz lub raport w widoku "Projekt", ale bez prawa do modyfikacji.
acSecFrmRptWriteDef	Modyfikować lub usuwać formularz lub raport w widoku "Projekt".
acSecFrmRptExecute	Otwierać formularz w widoku "Formularz" lub w widoku "Arkusz danych" oraz drukować lub otwierać raport w widoku "Podgląd układu" lub "Podgląd wydruku".
acSecMacReadDef	Otwierać okno makra i oglądać makro bez prawa do modyfikacji.
acSecMacWriteDef	Modyfikować lub usuwać makro w oknie makra.
acSecModReadDef	Otwierać moduł, ale bez prawa do modyfikacji.
acSecModWriteDef	Modyfikować lub usuwać zawartość modułu.
acSecMacExecute	Uruchamiać makro.


Primary, właściwość (Microsoft Access)

Jeśli w programie Microsoft Access zostanie ustawiony klucz podstawowy dla tabeli w widoku "Projekt" tabeli, klucz podstawowy jest automatycznie definiowany jako indeks podstawowy.


Size, właściwość (Microsoft Access)

Właściwość Size jest odpowiednikiem właściwości RozmiarPola w widoku "Projekt" tabeli. W kodzie Visual Basic nie można ustawić właściwości RozmiarPola; należy użyć właściwości Size.

Pole typu Memo może w programie Microsoft Access pomieścić do 1.2 gigabajta informacji. W formancie formularza lub raportu wyświetlane są tylko początkowe 32 kilobajty danych.


Source, właściwość (Microsoft Access)

Właściwość obiektów dostępu do danych (DAO) Source dotyczy obiektu Error i można ją odczytać tylko w kodzie języka Visual Basic.

Uwaga   Nie należy mylić tej właściwości z właściwością Source (Źródło) programu Microsoft Access dotyczącą kwerendy i określającą źródłowy ciąg znaków połączenia oraz źródłową bazę danych tabeli lub kwerendy wejściowej dla kwerendy.


Type, właściwość (Microsoft Access)

W programie Microsoft Access, można określić typ danych dla pola w widoku "Projekt" tabeli i można określić typ danych dla parametru w oknie dialogowym Parametry kwerendy. Te działania są równoważne ustawieniu właściwości obiektów dostępu do danych (DAO) Type dla obiektu Field lub obiektu Parameter za pomocą kodu języka Visual Basic.

W poniższej tabeli została podana lista stałych dla właściwości Type i odpowiadających im ustawień dla typów danych pola i parametru w programie Microsoft Access, jeśli są one określane w widoku "Projekt" tabeli lub w oknie dialogowym Parametry kwerendy.

Tworząc pola tabeli z typem danych Liczba, należy ustawić właściwość FieldSize (RozmiarPola), aby określić, który z sześciu numerycznych typów danych będzie typem dla pola. Domyślnie wartość ta jest ustawiana na "Liczba całkowita długa" (Long integer). Innymi możliwymi ustawieniami są: "Bajt" (Byte), "Liczba całkowita" (Integer), "Pojedyncza precyzja" (Single), "Podwójna precyzja" (Double) i "ID replikacji" (ReplicationID).

Stała	Ustawienie pola tabeli	Ustawienie parametru kwerendy
dbBoolean	Tak/Nie (Yes/No)	Tak/Nie (Yes/No)
dbByte	Liczba (Number) (FieldSize = Bajt (Byte))	Bajt (Byte)
dbCurrency	Walutowy (Currency)	Walutowy (Currency)
dbDate	Data/Godzina (Date/Time)	Data/Godzina (Date/Time)
dbDouble	Liczba (Number) (FieldSize = Podwójna precyzja (Double))	Podwójna precyzja (Double)
dbGUID	Liczba (Number) lub Autonumer (AutoNumber) (FieldSize = ID replikacji (ReplicationID))	Nie obsługiwane
dbInteger	Liczba (Number) (FieldSize = Liczba całkowita (Integer))	Liczba całkowita (Integer)
dbLong	Liczba (Number) (FieldSize = Liczba całkowita długa (Long Integer))	Liczba całkowita długa (Long Integer)
	Autonumer (AutoNumber) (FieldSize = Liczba całkowita długa (Long Integer))	Nie obsługiwane
dbLongBinary	Obiekt OLE (OLE Object)	Obiekt OLE (OLE Object)
	Nie obsługiwane	Liczba dwójkowa (Binary)
dbMemo	Memo	Memo
dbSingle	Liczba (Number) (FieldSize = Pojedyncza precyzja (Single))	Pojedyncza precyzja (Single)
dbText	Tekst (Text)	Tekst (Text)
Nie obsługiwane	Nie obsługiwane	Wartość (Value)
Uwaga   Typ danych parametru Wartość (Value) nie odpowiada żadnemu typowi danych zdefiniowanemu przez aparat bazy danych Microsoft Jet. Odpowiada on słowu zastrzeżonemu VALUE języka SQL, którego można użyć do utworzenia kwerendy parametrycznej. W programie Microsoft Access lub kwerendach języka SQL słowo VALUE może być uważane za synonim typu danych Variant języka Visual Basic.


ValidationRule, właściwość (Microsoft Access)

Właściwość obiektów dostępu do danych (DAO) ValidationRule (Reguła poprawności) służy do ustawiania reguł poprawności dla obiektów typu Field, Recordset lub TableDef w kodzie języka Visual Basic.

Reguły poprawności dla pola lub formantu można również ustawić w interfejsie użytkownika programu Microsoft Access. Właściwość ValidationRule pola lub tabeli ustawia się w widoku "Projekt" tabeli. Właściwość ValidationRule formantu ustawia się używając arkusza właściwości w widoku "Projekt" formularza.

W programie Microsoft Access wyrażenie typu ciąg znaków określone przez właściwość ValidationRule obiektu typu Field nie może odwoływać się do funkcji definiowanych przez użytkownika, funkcji agregujących domen programu Microsoft Access, funkcji agregujących języka SQL, funkcji CurrentUser, funkcji Eval ani kwerend.


FieldSize, właściwość (Microsoft Access)

Właściwość obiektów dostępu do danych (DAO) FieldSize różni się od właściwości FieldSize (RozmiarPola) programu Microsoft Access, którą ustawia się w widoku "Projekt" tabeli. Właściwość obiektów dostępu do danych (DAO) FieldSize zwraca liczbę bajtów obiektu Field typu Memo lub Obiekt OLE.

Właściwość FieldSize (RozmiarPola) programu Microsoft Access ustawia się, aby ograniczyć rozmiar pola w tabeli. Właściwość FieldSize jest dostępna tylko w widoku "Projekt" tabeli. Aby ustawić rozmiar pola tabeli w kodzie języka Visual Basic, należy użyć właściwości Size.


Attributes, właściwość (Microsoft Access)

Jeśli właściwość Attributes obiektu TableDef zostanie ustawiona na wartość dbHiddenObject, program Microsoft Access ukrywa obiekt TableDef. Obiekt TableDef istnieje w kolekcji TableDefs, ale nie można go zobaczyć w oknie bazy danych, nawet po zaznaczeniu opcji Pokaż ukryte obiekty w oknie dialogowym Opcje, dostępnym przez kliknięcie polecenia Opcje w menu Narzędzia.

Aby utworzyć obiekt TableDef, który może być ukryty albo widoczny, należy ustawić właściwość Attributes na wartość dbSystemObject. Następnie można pokazać obiekt TableDef w oknie bazy danych zaznaczając opcję Pokaż ukryte obiekty w oknie dialogowym Opcje.


Version, właściwość (Microsoft Access)

Bazy danych utworzone w programach Microsoft Access 97 i Microsoft Access 95 mają ten sam format pliku. Dlatego właściwość Version obiektu Database zwraca wartość 3.0 dla baz danych utworzonych lub konwertowanych na format programu Microsoft Access 97 lub Microsoft Access 95. Chcąc sprawdzić, czy formatem bazy danych jest format programu Microsoft Access 97 czy format programu Microsoft Access 95, należy użyć funkcji SysCmd ze stałą wewnętrzną acSysCmdAccessVer jako argumentem action. Dla bazy danych programu Microsoft Access 97 funkcja SysCmd zwraca wartość 8.0. Dla bazy danych programu Microsoft Access 95 zwraca ona wartość 7.0.


AbsolutePosition, właściwość - przykład (Microsoft Access)
AbsolutePosition, właściwość – przykład (Microsoft Access)

W poniższym przykładzie zostaje znaleziony określony rekord w obiekcie Recordset typu dynamiczny zestaw rekordów, po czym zostaje wyliczony numer porządkowy tego rekordu:

Sub RecordOrdinalPosition()

Dim dbs As Database, rst As Recordset

' Return reference to current database.

Set dbs = CurrentDb

' Return reference to dynaset-type Recordset object object.

Set rst = dbs.OpenRecordset("SELECT * FROM Orders WHERE " _

& "ShippedDate >= #1-1-96#;")

' Find first order shipped to London.

rst.FindFirst "ShipCity = 'London'"

' Return ordinal position of that record.

Debug.Print rst.AbsolutePosition

rst.Close

Set dbs = Nothing

End Sub


AllowZeroLength, właściwość - przykład (Microsoft Access)
AllowZeroLength, właściwość – przykład (Microsoft Access)

W poniższym przykładzie tworzony jest nowy obiekt Field, a następnie jego właściwość AllowZeroLength ustawiana jest na wartość True (–1):

Sub ZeroLengthField()

Dim dbs As Database, tdf As TableDef, fld As Field

' Return reference to current database.

Set dbs = CurrentDb

' Return reference to Employees table.

Set tdf = dbs.TableDefs!Employees

' Create new field in Employees table.

Set fld = tdf.CreateField("SpouseName", dbText, 15)

' Allow zero-length strings in field.

fld.AllowZeroLength = True

' Append Field object.

tdf.fields.Append fld

Set dbs = Nothing

End Sub


AllPermissions, właściwość - przykład (Microsoft Access)
AllPermissions, właściwość – przykład (Microsoft Access)

W poniższym przykładzie sprawdzana jest właściwość AllPermissions obiektu Container Forms, a następnie ustalane jest, czy użytkownik określony przez właściwość UserName ma pełny dostęp do formularzy.

Należy zauważyć, że operator And przeprowadza porównanie bitowe, aby określić, jakie uprawnienia są aktualnie ustawione.

Sub CheckAllPermissions()

Dim dbs As Database, ctr As Container

' Return reference to current database.

Set dbs = CurrentDb

' Return reference to Forms container.

Set ctr = dbs.Containers!Forms

' Check if AllPermissions property includes full access.

If (ctr.AllPermissions And dbSecFullAccess = dbSecFullAccess) Then

MsgBox "User " & ctr.UserName & " has full access to all forms."

End If

Set dbs = Nothing

End Sub


Attributes, właściwość - przykład (Microsoft Access)
Attributes, właściwość – przykład (Microsoft Access)

W poniższym przykładzie sprawdzana jest właściwość Attributes każdej tabeli w bieżącej bazie danych, a następnie wyświetlane są nazwy tabel systemowych i ukrytych dostarczanych przez aparat bazy danych Microsoft Jet.

Należy zauważyć, że operator And przeprowadza porównanie bitowe, aby określić, czy jakiś atrybut jest aktualnie ustawiony.

Sub CheckAttributes()

Dim dbs As Database, tdf As TableDef

' Return reference to current database.

Set dbs = CurrentDb

For Each tdf In dbs.TableDefs

' Compare property setting and constant in question.

If (tdf.Attributes And dbSystemObject) Or _

(tdf.Attributes And dbHiddenObject) Then

Debug.Print tdf.Name

End If

Next tdf

Set dbs = Nothing

End Sub


BOF, EOF, właściwości - przykład (Microsoft Access)
BOF, EOF, właściwości – przykład (Microsoft Access)

W poniższym przykładzie została użyta właściwość EOF obiektu Recordset do przeniesienia wskaźnika bieżącego rekordu poza ostatni rekord tego obiektu. Następnie została użyta właściwość BOF do przeniesienia wskaźnika bieżącego rekordu przed pierwszy rekord obiektu Recordset.

Sub EndsOfFile()

Dim dbs As Database, rst As Recordset

' Return reference to current database.

Set dbs = CurrentDb

' Open recordset on Orders table.

Set rst = dbs.OpenRecordset("Orders")

' Do until end of file.

Do Until rst.EOF

' Move to next record.

rst.MoveNext

.

.

.

Loop

' Move to last record to set a current record.

rst.MoveLast

' Do until beginning of file.

Do Until rst.BOF

rst.MovePrevious

.

.

.

Loop

rst.Close

Set dbs = Nothing

End Sub


Bookmark, Bookmarkable, właściwości - przykład (Microsoft Access)
Bookmark, Bookmarkable, właściwości – przykład (Microsoft Access)

W poniższym przykładzie przeglądane są rekordy tabeli "Employees" ("Pracownicy") od początku do końca pliku, przy czym wartości właściwości Bookmark każdego rekordu są zapisywane w tablicy.

' Include this statement in Declarations section of module.

Option Compare Binary

Sub RecordPositions()

Dim dbs As Database, rst As Recordset, fld As Field

Dim intI As Integer

' Declare array to hold bookmarks.

Dim varRecord() As Variant

' Return reference to current database.

Set dbs = CurrentDb

' Open table-type Recordset object.

Set rst = dbs.OpenRecordset("Employees")

' Return reference to LastName field.

Set fld = rst.Fields!LastName

' Redimension array with value of RecordCount property as upper bound.

ReDim varRecord(0 To rst.RecordCount - 1)

intI = 0

' Check Bookmarkable property of Recordset object.

If rst.Bookmarkable Then

Do Until rst.EOF

' Populate array with bookmarks.

varRecord(intI) = rst.Bookmark

' Increment counter.

intI = intI + 1

rst.MoveNext

Loop

End If

rst.Close

Set dbs = Nothing

End Sub


CollatingOrder, właściwość - przykład (Microsoft Access)
CollatingOrder, właściwość – przykład (Microsoft Access)

W poniższym przykładzie sprawdzana jest właściwość CollatingOrder bieżącej bazy danych:

Sub SetSortOrder()

Dim dbs As Database

' Return reference to current database.

Set dbs = CurrentDb

' Check CollatingOrder property for database.

Debug.Print dbs.CollatingOrder

Set dbs = Nothing

End Sub


Connect, SourceTableName, właściwości - przykład (Microsoft Access)
Connect, SourceTableName, właściwości – przykład (Microsoft Access)

W poniższym przykładzie tworzony jest obiekt TableDef w określonej bazie danych. Następnie procedura ustawia jego właściwości Connect i SourceTableName po czym dołącza ten obiekt do kolekcji TableDefs.

Sub ConnectSource()

Dim dbs As Database, tdf As TableDef

' Return reference to current database.

Set dbs = CurrentDb

' Create new TableDef object.

Set tdf = dbs.CreateTableDef("PDXAuthor")

' Attach Paradox table Author in database C:\PDX\Publish.

tdf.Connect = "Paradox 4.X;Database=C:\PDX\Publish"

tdf.SourceTableName = "Author"

dbs.TableDefs.Append tdf

Set dbs = Nothing

End Sub


Container, Permissions, właściwości - przykład (Microsoft Access)
Container, Permissions, właściwości – przykład (Microsoft Access)

W poniższym przykładzie ustalana jest nazwa obiektu Container, do którego należy obiekt Document, a następnie ustawiane są uprawnienia dla określonego konta grupowego. Należy pamiętać o konieczności zaznaczenia konkretnego konta użytkownika lub grupy przed ustawieniem uprawnień do obiektu. W poniższym przykładzie przyjęto, że została zdefiniowana grupa "Marketers".

Program Microsoft Access definiuje dodatkowe obiekty Container oprócz tych zdefiniowanych przez aparat bazy danych Microsoft Jet. Są to obiekty typu Container Form, Report, Script i Module.

Należy zauważyć, że operator Or przeprowadza porównanie bitowe, aby określić, czy jakiś atrybut jest aktualnie ustawiony.

Sub SetDocPermissions(docUnknown As Document)

Dim strContainerName As String

' Set UserName property to valid existing group account.

docUnknown.UserName = "Marketers"

' Get value of Container property.

strContainerName = docUnknown.Container.Name

Select Case strContainerName

Case "Forms"

' Set permissions for Form Document object.

docUnknown.Permissions = docUnknown.Permissions Or _

acSecFrmRptWriteDef

Case "Reports"

' Set permissions for Report Document object.

docUnknown.Permissions = docUnknown.Permissions Or _

acSecFrmRptExecute

Case "Scripts"

' Set permissions for Script Document object.

docUnknown.Permissions = docUnknown.Permissions Or _

acSecMacWriteDef

Case "Modules"

' Set permissions for Module Document object.

docUnknown.Permissions = docUnknown.Permissions Or _

acSecModReadDef

Case Else

Exit Sub

End Select

End Sub


Count, właściwość - przykład (Microsoft Access)
Count, właściwość – przykład (Microsoft Access)

W poniższym przykładzie drukowane są nazwy i całkowita liczba pól w tabeli "Orders" ("Zamówienia"):

Sub CountFields()

Dim dbs As Database, tdf As TableDef

Dim fld As Field

' Return reference to current database.

Set dbs = CurrentDb

' Return reference to Orders table.

Set tdf = dbs.TableDefs!Orders

' Count fields in Fields collection of TableDef object.

Debug.Print tdf.Fields.Count

' List names of all fields.

For Each fld In tdf.Fields

Debug.Print fld.Name

Next fld

Set dbs = Nothing

End Sub


DataUpdatable, właściwość - przykład (Microsoft Access)
DataUpdatable, właściwość – przykład (Microsoft Access)

W poniższym przykładzie z tej samej tabeli tworzone są dwa obiekty Recordset, obiekt Recordset typu dynamiczny zestaw rekordów i obiekt Recordset typu utrwalony zestaw rekordów. Następnie procedura sprawdza właściwość DataUpdatable dla pola "LastName" w każdym obiekcie Recordset. Właściwość DataUpdatable ma wartość True (-1) dla obiektu Recordset typu dynamiczny zestaw rekordów, a wartość False (0), dla obiektu Recordset typu utrwalony zestaw rekordów.

Sub CheckUpdatable()

Dim dbs As Database

Dim rstDynaset As Recordset, rstSnapshot As Recordset

Dim fldDynaset As Field, fldSnapshot As Field

' Return reference to current database.

Set dbs = CurrentDb

' Open dynaset-type Recordset object.

Set rstDynaset = dbs.OpenRecordset("Employees", dbOpenDynaset)

' Open snapshot-type Recordset object.

Set rstSnapshot = dbs.OpenRecordset("Employees", dbOpenSnapshot)

' Get Field object variables pointing to field in each Recordset object.

Set fldDynaset = rstDynaset.Fields!LastName

Set fldSnapshot = rstSnapshot.Fields!LastName

' Get current record.

rstDynaset.MoveFirst

rstSnapshot.MoveFirst

' Display value of DataUpdatable property for each Recordset object.

Debug.Print "DataUpdatable (Dynaset-type Recordset): "; _

fldDynaset.DataUpdatable

Debug.Print "DataUpdatable (Snapshot-type Recordset): "; _

fldSnapshot.DataUpdatable

rstDynaset.Close

rstSnapshot.Close

Set dbs = Nothing

End Sub


DateCreated, LastUpdated, właściwości - przykład (Microsoft Access)
DateCreated, LastUpdated, właściwości – przykład (Microsoft Access)

W poniższym przykładzie zliczane są wszystkie obiekty QueryDef w bazie danych i wyświetlana jest lista obiektów utworzonych lub zmienionych w ciągu ostatnich sześćdziesięciu dni:

Sub TimeUpdated()

Dim dbs As Database, tdf As TableDef, qdf As QueryDef

Dim strList As String, dteWeek As Date

' Return reference to current database.

Set dbs = CurrentDb

dteWeek = Now - 60

' Enumerate through QueryDefs collection.

For Each qdf In dbs.QueryDefs

' Evaluate LastUpdated and DateCreated properties.

If (qdf.LastUpdated > dteWeek) Or (qdf.DateCreated > dteWeek) Then

' Create list.

strList = strList & vbCrLf & qdf.Name

End If

Next qdf

MsgBox strList

Set dbs = Nothing

End Sub


DefaultValue, właściwość - przykład (Microsoft Access)
DefaultValue, właściwość – przykład (Microsoft Access)

W poniższym przykładzie tworzony jest nowy obiekt Field i ustawiana jest jego właściwość DefaultValue. Następnie procedura dołącza nowy obiekt do kolekcji Fields tabeli "Employees" ("Pracownicy") w kolekcji TableDefs bazy danych.

Sub NewField()

Dim dbs As Database, tdf As TableDef

Dim fld As Field

' Return reference to current database.

Set dbs = CurrentDb

' Return reference to Employees table.

Set tdf = dbs.TableDefs!Employees

' Create Field object.

Set fld = tdf.CreateField("DaysOfVacation", dbText, 20)

' Set field properties.

fld.DefaultValue = "10"

' Append fld to Fields collection.

tdf.Fields.Append fld

Set dbs = Nothing

End Sub


DistinctCount, właściwość - przykład (Microsoft Access)
DistinctCount, właściwość – przykład (Microsoft Access)

W poniższym przykładzie wyświetlana jest liczba unikatowych wartości w indeksach pól "OrderID" ("IDzamówienia") i "OrderDate" ("DataZamówienia") tabeli "Orders" ("Zamówienia"). Należy zauważyć, że właściwość DistinctCount gwarantuje zwrot liczby unikatowych wartości w indeksie tylko natychmiast po utworzeniu indeksu za pomocą metody CreateIndex albo po wykonaniu defragmentacji lub konwersji bazy danych za pomocą metody CompactDatabase.

Sub CountKeys()

Dim dbs As Database, tdf As TableDef

Dim idx As Index, fldOrderID As Field, fldOrderDate As Field

' Return reference to current database.

Set dbs = CurrentDb

' Return reference to Orders table.

Set tdf = dbs.TableDefs!Orders

' Create new index.

Set idx = tdf.CreateIndex("OrderDateIndex")

' Create and append index fields.

Set fldOrderDate = idx.CreateField("OrderDate", dbDate)

idx.Fields.Append fldOrderDate

' Append new index.

tdf.Indexes.Append idx

' Refresh Indexes collection.

tdf.Indexes.Refresh

' Print value of DistinctCount property for new index.

Debug.Print idx.DistinctCount

Set dbs = Nothing

End Sub


Filter, właściwość - przykład (Microsoft Access)
Filter, właściwość – przykład (Microsoft Access)

W poniższym przykładzie użytkownik jest monitowany o wprowadzenie nazwy kraju, według którego ma być wykonane filtrowanie, a następnie ustawiana jest właściwość Filter obiektu Recordset typu dynamiczny zestaw rekordów. Na przykład, jeśli użytkownik wprowadzi nazwę "Italy", przefiltrowany zestaw rekordów będzie zawierać tylko te rekordy, które w polu "ShipCountry" zawierają ciąg znaków "Italy".

Należy zauważyć, że najpierw jest tworzony obiekt Recordset typu dynamiczny zestaw rekordów i ustawiana jego właściwość Filter, a następnie otwierany jest drugi obiekt Recordset typu dynamiczny zestaw rekordów oparty na pierwszym obiekcie. Ustawienie właściwości Filter pierwszego obiektu Recordset nie wpływa w rzeczywistości na zawarte w nim rekordy, dlatego, aby obejrzeć efekt filtrowania, trzeba utworzyć drugi obiekt Recordset.

Sub SetRecordsetFilter()

Dim dbs As Database, strInput As String

Dim rstOrders As Recordset, rstFiltered As Recordset

' Return reference to current database.

Set dbs = CurrentDb

' Prompt for value on which to filter.

strInput = InputBox("Enter name of country on which to filter.")

' Create dynaset-type Recordset object.

Set rstOrders = dbs.OpenRecordset("Orders", dbOpenDynaset)

' Set filter condition.

rstOrders.Filter = "ShipCountry = '" & strInput & "'"

' Create filtered dynaset-type Recordset object.

Set rstFiltered = rstOrders.OpenRecordset

rstOrders.Close

rstFiltered.Close

Set dbs = Nothing

End Sub

Wskazówka   W większości sytuacji bardziej wydajne jest utworzenie drugiego obiektu Recordset z żądanymi warunkami w jednym kroku. Gdy wiadomo, jakie dane mają być wybrane, na ogół bardziej efektywne jest utworzenie zestawu rekordów za pomocą instrukcji SQL. W poniższym przykładzie zostało pokazane, jak można utworzyć tylko jeden zestaw rekordów i otrzymać takie same wyniki, jak w poprzednim przykładzie:

Sub CreateRecordsetWithSQL()

Dim dbs As Database, rst As Recordset

Dim strInput As String

Set dbs = CurrentDb

strInput = InputBox("Enter name of country on which to filter.")

Set rst = dbs.OpenRecordset("SELECT * FROM Orders " _

& "WHERE ShipCountry = '" & strInput & "';")

rst.MoveLast

MsgBox "Recordset contains " & rst.RecordCount & " records."

rst.Close

Set dbs = Nothing

End Sub


Foreign, właściwość - przykład (Microsoft Access)
Foreign, właściwość – przykład (Microsoft Access)

W poniższym przykładzie drukowana jest wartość właściwości Foreign dla każdego indeksu w tabeli "Orders" ("Zamówienia"):

Sub CheckForeign()

Dim dbs As Database, tdf As TableDef, idx As Index

' Return reference to current database.

Set dbs = CurrentDb

' Return reference to Orders table.

Set tdf = dbs.TableDefs!Orders

' Enumerate through Indexes collection of table.

For Each idx In tdf.Indexes

' Print value of Foreign property.

Debug.Print idx.Name; "        "; idx.Foreign

Next idx

Set dbs = Nothing

End Sub


ForeignName, ForeignTable, Table, właściwości - przykład (Microsoft Access)
ForeignName, ForeignTable, Table, właściwości – przykład (Microsoft Access)

W poniższym przykładzie został przedstawiony sposób wykorzystania właściwości ForeignName, ForeignTable i Table przy tworzeniu relacji między dwiema istniejącymi tabelami – w tym przypadku "Employees" ("Pracownicy") (tabela podstawowa) i "Orders" ("Zamówienia") (tabela obca) w bieżącej bazie danych. Pole "EmployeeID" ("IDpracownika") jest kluczem podstawowym w tabeli "Employees", a także kluczem obcym w tabeli "Orders". Relacja jest typu jeden-do-wielu i wymuszone są więzy integralności.

Należy zauważyć, że operator And przeprowadza porównanie bitowe, aby określić, jakie uprawnienia są aktualnie ustawione.

Sub NewRelation()

Dim dbs As Database

Dim fld As Field, rel As Relation

' Return reference to current database.

Set dbs = CurrentDb

' Find existing EmployeesOrders relation.

For Each rel In dbs.Relations

If rel.Table = "Employees" _

And rel.ForeignTable = "Orders" Then

' Prompt user before deleting relation.

If MsgBox(rel.Name & " already exists. " & vbCrLf _

& "This relation will be deleted and re-created.", _

vbOK) = vbOK Then

dbs.Relations.Delete rel.Name

' If user chooses Cancel, exit procedure.

Else

Exit Sub

End If

End If

Next rel

' Create new relationship and set its properties.

Set rel = dbs.CreateRelation("EmployeesOrders")

' Set Table property.

rel.Table = "Employees"

' Set ForeignTable property.

rel.ForeignTable = "Orders"

' Set Relation object attributes to enforce referential integrity.

rel.Attributes = dbRelationDeleteCascade And dbRelationUpdateCascade

' Create field in Fields collection of Relation.

Set fld = rel.CreateField("EmployeeID")

' Provide name of foreign key field.

fld.ForeignName = "EmployeeID"

' Append field to Relation and Relation to database.

rel.Fields.Append fld

dbs.Relations.Append rel

MsgBox "Relation '" & rel.Name & "' created."

Set dbs = Nothing

End Sub


IgnoreNulls, Unique, właściwości - przykład (Microsoft Access)
IgnoreNulls, Unique, właściwości – przykład (Microsoft Access)

W poniższym przykładzie dodawany jest nowy indeks do obiektu TableDef i ustawiane są właściwości IgnoreNulls oraz Unique na wartość True (–1):

Sub NewIndex()

Dim dbs As Database, tdf As TableDef

Dim idx As Index, fldID As Field, fldName As Field

' Return reference to current database.

Set dbs = CurrentDb

' Return reference to Products table.

Set tdf = dbs.TableDefs!Products

' Return Index object that points to new index.

Set idx = tdf.CreateIndex("IDName")

' Create and append index fields.

Set fldID = idx.CreateField("ProductID")

Set fldName = idx.CreateField("ProductName")

idx.Fields.Append fldID

idx.Fields.Append fldName

' Set index properties.

idx.IgnoreNulls = True

idx.Unique = True

' Append new Index object to Indexes collection.

tdf.Indexes.Append idx

Set dbs = Nothing

End Sub


Index, właściwość - przykład (Microsoft Access)
Index, właściwość – przykład (Microsoft Access)

W poniższym przykładzie ustawiany jest indeks obiektu Recordset typu tabela na klucz podstawowy. "PrimaryKey" jest domyślną nazwą obiektu Index, jeśli indeks odpowiada kluczowi podstawowemu ustawionemu w widoku "Projekt" tabeli. Następnie procedura pyta użytkownika o wartość, która ma być wyszukiwana i znajduje rekord zawierający odpowiednią wartość klucza podstawowego. Należy zauważyć, że bieżący indeks musi być ustawiony, zanim na obiekcie Recordset typu tabela będą mogły być wykonane pewne operacje, takie jak metoda Seek.

Sub UsePrimaryKey()

Dim dbs As Database, rst As Recordset

Dim fld As Field, strInput As String

' Return reference to current database.

Set dbs = CurrentDb

' Create table-type Recordset object.

Set rst = dbs.OpenRecordset("Orders", dbOpenTable)

' Set current index.

rst.Index = "PrimaryKey"

strInput = InputBox("Enter the OrderID on which to search.")

' Locate record.

rst.Seek "=", strInput

If Not rst.NoMatch Then

For Each fld in rst.Fields

Debug.Print fld.Name; "   "; fld.Value

Next fld

End If

rst.Close

Set dbs = Nothing

End Sub


Inherit, właściwość - przykład (Microsoft Access)
Inherit, właściwość – przykład (Microsoft Access)

W poniższym przykładzie ustawiana jest właściwość Inherit obiektu Container Form na wartość True (-1), a następnie ustawiana jest właściwość Permissions w celu przyznania użytkownikom pełnego dostępu do wszystkich formularzy. Wszystkie nowe obiekty Document typu Form będą dziedziczyć te uprawnienia. Następnie procedura tworzy nowy obiekt Form i wyświetla uprawnienia dla tego obiektu.

Należy zauważyć, że obiekt Container Form różni się od kolekcji Forms. Obiekt Container Form zawiera wszystkie obiekty Document Form w bazie danych, a kolekcja Forms zawiera tylko aktualnie otwarte formularze.

Należy również zauważyć, że operator Or przeprowadza porównanie bitowe, aby określić jakie uprawnienia są aktualnie ustawione.

Sub FormPermissions()

Dim dbs As Database, ctrForms As Container

Dim docForm As Document, frmNew As Form

' Return reference to current database.

Set dbs = CurrentDb

' Return reference to Forms container.

Set ctrForms = dbs.Containers!Forms

' Set Inherit property.

ctrForms.Inherit = True

' Set permissions to be inherited.

ctrForms.Permissions = ctrForms.Permissions Or acSecFrmRptWriteDef

' Create new form.

Set frmNew = CreateForm()

' Save form.

DoCmd.Save , "OrderForm"

' Return Document object associated with new form.

Set docForm = ctrForms.Documents!OrderForm

' Compare permissions for Container and Document objects.

If docForm.Permissions <> ctrForms.Permissions Then

MsgBox "Error!"

Else

MsgBox "Permissions successfully inherited."

End If

Set dbs = Nothing

End Sub


Inherited, właściwość - przykład (Microsoft Access)
Inherited, właściwość – przykład (Microsoft Access)

W poniższym przykładzie tworzony jest obiekt Property w kolekcji Properties obiektu TableDef. Następnie, na podstawie tej samej tabeli tworzony jest nowy obiekt QueryDef. Obiekt Property automatycznie istnieje w kolekcji Properties nowego obiektu QueryDef. Następnie procedura sprawdza właściwość Inherited obiektów Property w kolekcjach Properties obu obiektów TableDef i QueryDef.

W poniższym przykładzie tworzona jest właściwość DatasheetFontItalic programu Microsoft Access, a następnie jest ona dołączana do kolekcji Properties obiektu TableDef. Właściwość DatasheetFontItalic jest definiowana przez program Microsoft Access, a nie przez aparat bazy danych Microsoft Jet. Jednak właściwość ta dotyczy obiektów dostępu do danych (DAO). Dlatego, aby ją ustawić z kodu języka Visual Basic, należy najpierw utworzyć obiekt Property odpowiadający tej właściwości i dołączyć go do kolekcji Properties obiektu DAO. Właściwość wystarczy utworzyć tylko przy jej pierwszym ustawianiu.

Sub CheckInherited()

Dim dbs As Database, tdf As TableDef, qdf As QueryDef

Dim strSQL As String

' Return reference to current database.

Set dbs = CurrentDb

' Return reference to Orders table.

Set tdf = dbs.TableDefs!Orders

' Call SetAccessProperty function.

If SetAccessProperty(tdf, "DatasheetFontItalic", _

dbBoolean, True) = True Then

' Create QueryDef object based on Orders table.

strSQL = "SELECT * FROM Orders WHERE ShipCountry = 'USA';"

Set qdf = dbs.CreateQueryDef("USAOrders", strSQL)

' Return Property object pointing to property.

Debug.Print "Value of Inherited, TableDef object:", _

tdf.Properties!DatasheetFontItalic.Inherited

Debug.Print "Value of inherited, QueryDef object:", _

qdf.Properties!DatasheetFontItalic.Inherited

ExitCheckInherited

Else

MsgBox "Property not set successfully."

ExitCheckInherited

End If

ExitCheckInherited:

Set dbs = Nothing

Exit Sub

End Sub

Procedura ta wywołuje poniższą funkcję, która ustawia właściwość tworząc ją w kolekcji Properties, jeśli to konieczne:

Function SetAccessProperty(obj As Object, strName As String, _

intType As Integer, varSetting As Variant) As Boolean

Dim prp As Property

Const conPropNotFound As Integer = 3270

On Error GoTo ErrorSetAccessProperty

' Explicitly refer to Properties collection.

obj.Properties(strName) = varSetting

obj.Properties.Refresh

SetAccessProperty = True

ExitSetAccessProperty:

Exit Function

ErrorSetAccessProperty:

If Err = conPropNotFound Then

' Create property, denote type, and set initial value.

Set prp = obj.CreateProperty(strName, intType, varSetting)

' Append Property object to Properties collection.

obj.Properties.Append prp

obj.Properties.Refresh

SetAccessProperty = True

Resume ExitSetAccessProperty

Else

MsgBox Err & ": " & vbCrLf & Err.Description

SetAccessProperty = False

Resume ExitSetAccessProperty

End If

End Function


LastModified, właściwość - przykład (Microsoft Access)
LastModified, właściwość – przykład (Microsoft Access)

W poniższym przykładzie ustalany jest ostatnio modyfikowany rekord w zestawie rekordów, a następnie ustawiana jest zakładka dla tego rekordu:

Sub LastChangedRecord()

Dim dbs As Database, rst As Recordset, varBook As Variant

' Return reference to current database.

Set dbs = CurrentDb

' Create dynaset-type Recordset object.

Set rst = dbs.OpenRecordset("SELECT * FROM Orders " & "ORDER BY ShipCountry;")

With rst

.FindFirst "ShipCountry = 'UK'"

' Alter record and save changes.

.Edit

!ShipCountry = "USA"

.Update

End With

' Check to see if recordset supports bookmarks.

If rst.Bookmarkable Then

' Set bookmark to most recently modified record.

varBook = rst.LastModified

' Set currency to last modified record.

rst.Bookmark = varBook

End If

rst.Close

Set dbs = Nothing

End Sub


LockEdits, właściwość - przykład (Microsoft Access)
LockEdits, właściwość – przykład (Microsoft Access)

W poniższym przykładzie otwierany jest obiekt Recordset typu dynamiczny zestaw rekordów, a następnie ustawiana jest jego właściwość LockEdits na wartość False (0). Umożliwia to optymistyczne blokowanie tak, że inni użytkownicy mogą w dowolnym czasie zmieniać rekordy bazy danych. Jeśli dane zostaną zmienione przed użyciem metody Update, program Microsoft Access generuje wykrywalny błąd.

Sub ShowLockStatus()

Dim dbs As Database, rst As Recordset

' Return reference to current database.

Set dbs = CurrentDb

' Open dynaset-type Recordset object.

Set rst = dbs.OpenRecordset("Customers", dbOpenDynaset)

rst.LockEdits = False

On Error Goto ErrorLockEdits

' Enable editing.

rst.Edit

.	' Change records.

.

.

rst.Update	' Try to post changes.

ExitLockEdits:

rst.Close

Set dbs = Nothing

Exit Sub

ErrorLockEdits:

If Err.Number = 3197 Then

MsgBox "Data changed by another user."

Resume Next

Else

MsgBox "Some other error."

Resume ExitLockEdits

End If

End Sub


LoginTimeout, właściwość - przykład (Microsoft Access)
LoginTimeout, właściwość – przykład (Microsoft Access)

W poniższym przykładzie właściwość LoginTimeout ustawiana jest na wartość 120 sekund, następnie tworzona jest i uruchamiana kwerenda dla bazy danych na serwerze ODBC:

Sub Login()

Dim dbs As Database

Dim qdf As QueryDef, rst As Recordset

' Set timeout to 120 seconds.

DBEngine.LoginTimeout = 120

' Return reference to current database.

Set dbs = CurrentDb

' Create new QueryDef object.

Set qdf = dbs.CreateQueryDef("All Employees", "SELECT * FROM Employees;")

qdf.Connect = "ODBC;DSN=Human Resources; " _

& "Database=HRSRVR; UID=Smith; PWD=Sesame"

' Log on to server and run query.

Set rst = qdf.OpenRecordset()

' Perform operations with recordset.

.

.

.

rst.Close

Set dbs = Nothing

End Sub


Name, właściwość - przykład (Microsoft Access)
Name, właściwość – przykład (Microsoft Access)

W poniższym przykładzie tworzone są dwa nowe obiekty TableDef oraz nadawane są im nazwy. Nazwa pierwszego obiektu TableDef jest dołączana jako argument do metody CreateTableDef. Nazwa drugiego obiektu TableDef jest ustawiana za pomocą właściwości Name, po utworzeniu obiektu TableDef.

Należy zauważyć, że zanim obiekt TableDef będzie mógł być dołączony do kolekcji TableDefs, muszą być zdefiniowane pola w tabeli.

Sub NameNewTables()

Dim dbs As Database

Dim tdfDefinitions As TableDef, tdfSynonyms As TableDef

' Return reference to current database.

Set dbs = CurrentDb

' Create new TableDef object.

Set tdfDefinitions = dbs.CreateTableDef("Definitions")

' Create second TableDef object.

Set tdfSynonyms = dbs.CreateTableDef("")

' Set Name property for second TableDef object.

tdfSynonyms.Name = "Synonyms"

.	' Create fields.

.

.

dbs.TableDefs.Append tdfDefinitions

dbs.TableDefs.Append tdfSynonyms

Set dbs = Nothing

End Sub


NoMatch, właściwość - przykład (Microsoft Access)
NoMatch, właściwość – przykład (Microsoft Access)

W poniższym przykładzie właściwość NoMatch została użyta do ustalenia, czy wykonanie metody FindFirst zakończyło się powodzeniem:

Function FindCountry() As Integer

Dim dbs As Database, rst As Recordset

Dim strCountry As String

' Return reference to current database.

Set dbs = CurrentDb

' Create dynaset-type Recordset object.

Set rst = dbs.OpenRecordset("Orders", dbOpenDynaset)

strCountry = InputBox("Please enter country name.")

rst.FindFirst "ShipCountry = '" & strCountry & "'"

If rst.NoMatch Then

FindCountry = False

Else

FindCountry = True

Debug.Print rst!OrderID

End If

rst.Close

Set dbs = Nothing

End Function


ODBCTimeout, właściwość - przykład (Microsoft Access)
ODBCTimeout, właściwość – przykład (Microsoft Access)

W poniższym przykładzie właściwość ODBCTimeout ustawiana jest na wartość 120 sekund, następnie tworzona jest i uruchamiana kwerenda dla bazy danych na serwerze ODBC:

Sub SetTimeout()

Dim dbs As Database

Dim qdf As QueryDef, rst As Recordset

' Return reference to current database.

Set dbs = CurrentDb

' Create new QueryDef object.

Set qdf = dbs.CreateQueryDef("All Cust", _

"SELECT * FROM Customers;")

qdf.Connect = "ODBC;DSN=HumanResources;SERVER=HRSRVR: " _

& "UID=Smith; PWD=Sesame"

' Log on to server and run query.

qdf.ODBCTimeout = 120

Set rst = qdf.OpenRecordset()

' Perform operations with recordset.

.

.

.

rst.Close

Set dbs = Nothing

End Sub


OrdinalPosition, właściwość - przykład (Microsoft Access)
OrdinalPosition, właściwość – przykład (Microsoft Access)

W poniższym przykładzie zmieniane jest ustawienie właściwości OrdinalPosition dla pierwszego pola w tabeli "Products" ("Produkty"). Obserwując tę tabelę w widoku "Arkusz danych" przed i po wykonaniu tego kodu przykładowego można zauważyć, że pole "ProductID" ("Idproduktu") zostaje przeniesione z pierwszej kolumny do ostatniej.

Sub SetPosition()

Dim dbs As Database, tdf As TableDef

Dim fldFirst As Field, fld As Field

' Return reference to current database.

Set dbs = CurrentDb

' Return reference to Products table.

Set tdf = dbs.TableDefs!Products

' Return reference to first field in table.

Set fldFirst = tdf.Fields(0)

' Set OrdinalPosition property to last position in collection.

fldFirst.OrdinalPosition = tdf.Fields.Count

' Refresh Fields collection.

tdf.Fields.Refresh

' Enumerate all fields and print ordinal position.

For Each fld In tdf.Fields

Debug.Print fld.Name, fld.OrdinalPosition

Next fld

Set dbs = Nothing

End Sub


PercentPosition, właściwość - przykład (Microsoft Access)
PercentPosition, właściwość – przykład (Microsoft Access)

W poniższym przykładzie bieżąca pozycja rekordu w zestawie rekordów została wyrażona jako procent, a następnie wyświetlona w oknie komunikatu:

Sub PercentOfRecords()

Dim dbs As Database, rst As Recordset

Dim strInput As String, strSQL As String

strSQL = "SELECT * FROM Products ORDER BY ProductName;"

' Return reference to current database.

Set dbs = CurrentDb

' Open dynaset-type Recordset object.

Set rst = dbs.OpenRecordset(strSQL, dbOpenDynaset)

' Move to end of recordset.

rst.MoveLast

' Return to start of recordset.

rst.MoveFirst

' Prompt user to input name of product.

strInput = InputBox("Please enter the full product name.")

' Find first occurrence.

rst.FindFirst "ProductName = '" & strInput & "'"

' Display current position as a percent.

MsgBox("The current position in the Recordset is " _

& rst.PercentPosition & "%.")

rst.Close

Set dbs = Nothing

End Sub


Permissions, UserName, właściwości - przykład (Microsoft Access)
Permissions, UserName, właściwości – przykład (Microsoft Access)

W poniższym przykładzie dodawane jest nowe konto użytkownika przez utworzenie obiektu User. Konto jest następnie dołączane do kolekcji Users w domyślnym obszarze roboczym. Następnie ustawiane są uprawnienia nowego użytkownika dla wszystkich tabel w bazie danych. Procedura ustawia najpierw właściwość UserName obiektu Container Tables na nazwę nowego użytkownika, a następnie ustawia właściwość Permissions na odpowiednie uprawnienia.

Należy zauważyć, że operator And przeprowadza porównanie bitowe, aby określić, czy jakiś atrybut jest aktualnie ustawiony.

Uwaga   Podczas programowania zabezpieczeń należy unikać umieszczania hasła i informacji PID w kodzie. Poniższy przykład został utworzony tylko dla celów demonstracyjnych.

Function SetPermissions(strName As String, strPID As String, _

strPassword As String) As Boolean

Dim dbs As Database, ctrTables As Container

Dim wspDefault As Workspace, usrNew As User

On Error GoTo ErrorSetPermissions

' Return reference to default workspace.

Set wspDefault = DBEngine.Workspaces(0)

' Create User object, specifying name, PID, and password.

Set usrNew = wspDefault.CreateUser(strName, strPID, strPassword)

' Append to Users collection of default workspace.

wspDefault.Users.Append usrNew

' Return reference to current database.

Set dbs = CurrentDb

' Return reference to Tables container.

Set ctrTables = dbs.Containers!Tables

ctrTables.UserName = usrNew.Name

' Set new user's permissions for tables.

ctrTables.Permissions = dbSecInsertData _

And dbSecReplaceData And dbSecDeleteData

SetPermissions = True

ExitSetPermissions

Set dbs = Nothing

Exit Function

ErrorSetPermissions

MsgBox Err & ": " & Err.Description

SetPermissions = False

Resume ExitSetPermissions

End Function

Następna procedura monituje użytkownika o wprowadzenie nazwy i hasła, a także tworzy wartość PID:

Sub NewUserPrompt()

Dim strName As String, strPassword As String

Dim intR As Integer, strPID As String

Dim blnReturn As Boolean

' Prompt user for name and password.

strName = InputBox("Enter your name.")

strPassword = InputBox("Enter a password with up to 14 characters.")

' Seed random number generator.

Randomize

' Generate PID string.

For intR = 0 To 19

strPID = strPID & Chr$(Int(256 * Rnd))

Next intR

' Call SetPermissions function.

blnReturn = SetPermissions(strName, strPID, strPassword)

End Sub


Primary, właściwość - przykład (Microsoft Access)
Primary, właściwość – przykład (Microsoft Access)

W poniższym przykładzie sprawdzana jest właściwość Primary dla każdego indeksu w tabeli "Products" ("Produkty"), a następnie drukowane są pola tworzące klucz podstawowy:

Sub SetIndex()

Dim dbs As Database, tdf As TableDef, fld As Field

Dim idx As Index

' Return reference to current database.

Set dbs = CurrentDb

' Return reference to Products table.

Set tdf = dbs.TableDefs!Products

' Enumerate through Indexes collection of TableDef object.

For Each idx In tdf.Indexes

' Check Primary property of Recordset object.

If idx.Primary Then

For Each fld In idx.Fields

Debug.Print fld.Name

Next fld

End If

Next idx

Set dbs = Nothing

End Sub


QueryTimeout, właściwość - przykład (Microsoft Access)
QueryTimeout, właściwość – przykład (Microsoft Access)

W poniższym przykładzie ustawiana jest właściwość QueryTimeout bieżącej bazy danych:

Sub SetTimeout()

Dim dbs As Database

' Return reference to current database.

Set dbs = CurrentDb

dbs.QueryTimeout = 120

Set dbs = Nothing

End Sub


RecordCount, właściwość - przykład (Microsoft Access)
RecordCount, właściwość – przykład (Microsoft Access)

W poniższym przykładzie tworzony jest obiekt Recordset na podstawie tabeli "Orders" ("Zamówienia"), a następnie ustalana jest liczba rekordów w tym obiekcie:

Sub CountRecords()

Dim dbs As Database, rst As Recordset

' Return reference to current database.

Set dbs = CurrentDb

' Open table-type Recordset object.

Set rst = dbs.OpenRecordset("Orders")

Debug.Print rst.RecordCount

rst.Close

Set dbs = Nothing

End Sub


RecordsAffected, właściwość - przykład (Microsoft Access)
RecordsAffected, właściwość – przykład (Microsoft Access)

W poniższym przykładzie wyświetlana jest liczba rekordów zaktualizowanych przez kwerendę funkcjonalną:

Sub RecordsUpdated()

Dim dbs As Database, qdf As QueryDef

Dim strSQL As String

' Return reference to current database.

Set dbs = CurrentDb

strSQL = "UPDATE Employees SET Title = " _

& "'Senior Sales Representative' " & "WHERE Title = 'Sales Representative';"

' Create new QueryDef object.

Set qdf = dbs.CreateQueryDef("UpdateTitles", strSQL)

' Execute QueryDef object.

qdf.Execute

Debug.Print qdf.RecordsAffected

Set dbs = Nothing

End Sub


Required, właściwość - przykład (Microsoft Access)
Required, właściwość – przykład (Microsoft Access)

W poniższym przykładzie tworzony jest nowy obiekt Index w tabeli "Employees" ("Pracownicy") , a następnie ustawiana jest właściwość Required tego indeksu. Nowy indeks składa się z dwóch pól, "LastName" i "FirstName".

Sub NewIndex()

Dim dbs As Database, tdf As TableDef, idx As Index

Dim fldLastName As Field, fldFirstName As Field

' Return reference to current database.

Set dbs = CurrentDb

' Return reference to Employees table.

Set tdf = dbs.TableDefs!Employees

' Create new index.

Set idx = tdf.CreateIndex("FullName")

' Create and append index fields.

Set fldLastName = idx.CreateField("LastName", dbText)

Set fldFirstName = idx.CreateField("FirstName", dbText)

idx.Fields.Append fldLastName

idx.Fields.Append fldFirstName

' Ensure value is entered for each field in index.

idx.Required = True

' Append Index object.

tdf.Indexes.Append idx

Set dbs = Nothing

End Sub


Size, Type, właściwości - przykład (Microsoft Access)
Size, Type, właściwości – przykład (Microsoft Access)

W poniższym przykładzie tworzony jest nowy obiekt Field oraz ustawiane są jego właściwości Size i Type. Następnie procedura dołącza nowy obiekt do kolekcji Fields tabeli "Employees" ("Pracownicy") w kolekcji TableDefs bazy danych.

Sub NewField()

Dim dbs As Database, tdf As TableDef

Dim fld As Field

' Return reference to current database.

Set dbs = CurrentDb

' Return reference to Employees table.

Set tdf = dbs.TableDefs!Employees

' Create Field object.

Set fld = tdf.CreateField("DaysOfVacation")

' Set field properties.

fld.Type = dbText

fld.Size = 20

' Append fld to Fields collection.

tdf.Fields.Append fld

Set dbs = Nothing

End Sub

Do ustawienia właściwości Name, Type i Size można zastosować także metodę CreateField, podając argumenty nazwa, typ i rozmiar.

Set fld = tdfEmployees.CreateField("DaysOfVacation", dbText, 20)


Sort, właściwość - przykład (Microsoft Access)
Sort, właściwość – przykład (Microsoft Access)

W poniższym przykładzie właściwość Sort została użyta do ustawienia porządku sortowania obiektu Recordset typu dynamiczny zestaw rekordów, utworzonego na podstawie tabeli "Orders" ("Zamówienia"). Rekordy w zmiennej rstSorted będą uporządkowane alfabetycznie według kraju odbiorcy (ShipCountry).

Należy zauważyć, że trzeba najpierw utworzyć obiekt Recordset typu dynamiczny zestaw rekordów i ustawić jego właściwość Sort, a następnie otworzyć drugi obiekt Recordset typu dynamiczny zestaw rekordów, utworzony na podstawie pierwszego. Ustawienie właściwości Sort pierwszego obiektu Recordset nie wpływa w rzeczywistości na porządek zawartych w nim rekordów. Dlatego, aby zobaczyć wyniki sortowania, trzeba utworzyć drugi obiekt Recordset.

Sub SortByCountry()

Dim dbs As Database

Dim rstOrders As Recordset, rstSorted As Recordset

' Return reference to current database.

Set dbs = CurrentDb

' Create dynaset-type Recordset object.

Set rstOrders = dbs.OpenRecordset("Orders", dbOpenDynaset)

' Set sort order.

rstOrders.Sort = "ShipCountry"

' Create second dynaset-type Recordset object.

Set rstSorted = rstOrders.OpenRecordset()

' Perform operations with recordset.

.

.

.

rstOrders.Close

rstSorted.Close

Set dbs = Nothing

End Sub

Wskazówka   W większości sytuacji bardziej wydajne jest utworzenie drugiego obiektu Recordset z żądanymi warunkami w jednym kroku. Jeżeli wiadomo, jakie dane mają być wybrane, na ogół bardziej efektywne jest utworzenie obiektu Recordset za pomocą instrukcji SQL. W poniższym przykładzie zostało pokazane, jak można utworzyć tylko jeden obiekt Recordset i otrzymać takie same wyniki, jak w poprzednim przykładzie:

Sub CreateRecordsetWithSQL()

Dim dbs As Database, rst As Recordset

Dim strSelect As String

Set dbs = CurrentDb

strSelect = "SELECT * FROM Orders ORDER BY ShipCountry;"

Set rst = dbs.OpenRecordset(strSelect)

rst.MoveLast

MsgBox "Recordset contains " & rst.RecordCount & " records."

rst.Close

End Sub


SourceField, SourceTable, właściwości - przykład (Microsoft Access)
SourceField, SourceTable, właściwości – przykład (Microsoft Access)

W poniższym przykładzie tworzony jest obiekt Recordset za pomocą instrukcji SQL. Instrukcja ta tworzy aliasy dla dwóch pól w dwóch różnych tabelach bazy danych. Następnie drukowana jest nazwa pola, pierwotna tabela i pierwotne pole.

Sub SourceInfo()

Dim dbs As Database, rst As Recordset, fld As Field

Dim strSQL As String

' Return reference to current database.

Set dbs = CurrentDb

' Construct SQL statement.

strSQL = "SELECT ProductID As ProductCode, " _

& "CategoryName As TypeOfProduct FROM Categories " _

& "INNER JOIN Products ON Categories.CategoryID " _

& " = Products.CategoryID;"

' Open dynaset-type Recordset object.

Set rst = dbs.OpenRecordset(strSQL)

For Each fld In rst.Fields

' Print field name.

Debug.Print "Field Name: "; fld.Name

' Print original table name.

Debug.Print "Source Table: "; fld.SourceTable

' Print original field name.

Debug.Print "Source Field: "; fld.SourceField

Debug.Print

Next fld

rst.Close

Set dbs = Nothing

End Sub


SQL, właściwość - przykład (Microsoft Access)
SQL, właściwość – przykład (Microsoft Access)

W poniższym przykładzie tworzona jest kwerenda parametryczna na podstawie tabeli "Orders" ("Zamówienia"). Kwerenda wybiera wszystkie zamówienia, których daty złożenia przypadają między datami wprowadzonymi przez użytkownika.

Sub RangeOfOrders()

Dim dbs As Database, qdf As QueryDef, rst As Recordset

' Return reference to current database.

Set dbs = CurrentDb

' Create new query.

Set qdf = dbs.CreateQueryDef("RangeOfOrders")

' Construct SQL statement including parameters.

qdf.SQL = "PARAMETERS [Start] DATETIME, [End] DATETIME; " & _

"SELECT * FROM Orders WHERE OrderDate BETWEEN " _

& "[Start] AND [End];"

qdf.Parameters("Start") = #1/1/96#

qdf.Parameters("End") = #1/31/96#

' Create snapshot-type Recordset object from QueryDef object.

Set rst = qdf.OpenRecordset(dbOpenSnapshot)

' Perform operations with recordset.

.

.

.

rst.Close

Set dbs = Nothing

End Sub


Updatable, właściwość - przykład (Microsoft Access)
Updatable, właściwość – przykład (Microsoft Access)

W poniższym przykładzie do obiektu Recordset dodawany jest rekord, jeśli właściwość Updatable obiektu ma wartość True (–1).

Sub UpdateData()

Dim dbs As Database, rstUnknown As Recordset

' Return reference to current database.

Set dbs = CurrentDb

' Open table-type Recordset object.

Set rstUnknown = dbs.OpenRecordset("Unfamiliar Table")

' Check Updatable property before adding new record.

If rstUnknown.Updatable = True Then

With rstUnknown

.AddNew

!SomeField = "Some new data"

.Update

End With

End If

rstUnknown.Close

Set dbs = Nothing

End Sub


ValidationRule, ValidationText, właściwości - przykład (Microsoft Access)
ValidationRule, ValidationText, właściwości – przykład (Microsoft Access)

W poniższym przykładzie ustawiane są właściwości ValidationRule i ValidationText dla dwóch pól w tabeli "Order Details" ("Opisy zamówień"). Po ustawieniu tych właściwości można je także oglądać w widoku "Projekt" tabeli.

Sub SetValidation()

Dim dbs As Database, tdf As TableDef

Dim fldQuantity As Field, fldDiscount As Field

' Return reference to current database.

Set dbs = CurrentDb

' Return referent to Order Details table.

Set tdf = dbs.TableDefs![Order Details]

Set fldQuantity = tdf.Fields!Quantity

Set fldDiscount = tdf.Fields!Discount

' Set ValidationRule and ValidationText.

fldQuantity.ValidationRule = ">= 4"

fldQuantity.ValidationText = "Quantity must be four or more items."

fldDiscount.ValidationRule = "Between .05 and .30"

fldDiscount.ValidationText = "Discount must be between 5% and 30%."

Set dbs = Nothing

End Sub


SELECT, instrukcja (Microsoft Access)

W programie Microsoft Access, nazwy pól (pole1, pole2) widoczne w oknie kwerendy w widoku SQL są używane jako nagłówki kolumn w widoku "Arkusz danych". Aby zmienić nagłówek kolumny w arkuszu danych, należy użyć słowa zastrzeżonego AS. Następujące po nim argumenty alias1, alias2 stanowią nazwy kolumn, w których pojawią się pobrane dane w widoku "Arkusz danych". Użycie klauzuli AS jest równoważne ustawieniu właściwości Alias w arkuszu właściwości pola listy w widoku "Projekt" kwerendy.

W poniższym przykładzie jako nagłówek kolumny w wynikowym arkuszu danych użyty został tytuł "Birthday":

SELECT [BirthDate] AS Birthday FROM Employees;

W przypadku użycia funkcji agregujących lub kwerend zwracających dwuznaczne lub powtarzające się nazwy pól, należy użyć klauzuli AS, aby nadać polu alternatywną nazwę. W poniższym przykładzie zostaje utworzony w widoku "Arkusz danych" nagłówek kolumny "Head Count":

SELECT COUNT([EmployeeID])

AS [Head Count] FROM Employees;

Podczas pracy z obiektami dostępu do danych (DAO) w kodzie języka Visual Basic, argumenty pole1, pole2 określają nazwy obiektów Field w obiekcie Recordset zwracanym przez kwerendę. Jeśli zostanie użyte słowo zastrzeżone AS, argumenty alias1, alias2 określają nazwy nagłówków kolumn zwracane jako nazwy obiektów Field w wynikowym obiekcie Recordset.


FROM, klauzula (Microsoft Access)

Jeśli w klauzuli FROM instrukcji SQL zostanie podana nazwa kwerendy lub tabeli, obiekty te zostaną automatycznie dodane do okna kwerendy.

I na odwrót, wszystkie tabele lub kwerendy dodane do okna kwerendy zostaną uwzględnione w klauzuli FROM odpowiedniej instrukcji SQL.


GROUP BY, klauzula (Microsoft Access)

Podanie klauzuli GROUP BY w instrukcji SQL jest równoważne utworzeniu kwerendy podsumowującej w oknie kwerendy i ustawieniu rubryki Podsumowanie na "Grupuj według" dla odpowiedniego pola.


WHERE, klauzula (Microsoft Access)

W programie Microsoft Access, warunki określone w klauzuli WHERE w widoku SQL są takie same, jak warunki wprowadzone w rubryce Kryteria w siatce projektu kwerendy. Po zadaniu kryteriów w siatce projektu kwerendy można przejść do widoku SQL, aby ujrzeć klauzulę WHERE.

I na odwrót, jeśli zostanie określona klauzula WHERE w instrukcji SQL w widoku SQL, po przejściu do widoku "Projekt" można zobaczyć równoważne kryteria w siatce projektu kwerendy, o ile nie tworzy się kwerendy składającej, którą można oglądać tylko w widoku SQL.


ORDER BY, klauzula (Microsoft Access)

W programie Microsoft Access, klauzula ORDER BY sortuje i wyświetla dane określonych pól w porządku rosnącym lub malejącym. Jej użycie jest równoważne kliknięciu opcji Rosnąco lub Malejąco w Rubryce Sortuj siatki projektu kwerendy.


ALL, DISTINCT, DISTINCTROW, TOP, predykaty (Microsoft Access)

W programie Microsoft Access, użycie słowa zastrzeżonego DISTINCT jest równoważne ustawieniu właściwości UniqueValues (WartościUnikatowe) na wartość "Tak" w arkuszu właściwości kwerendy w widoku "Projekt" kwerendy.

Użycie słowa zastrzeżonego DISTINCTROW jest równoważne ustawieniu właściwości UniqueRecords (RekordyUnikatowe) na wartość "Tak" (wartość domyślna) w arkuszu właściwości kwerendy w jej widoku "Projekt".

Użycie słowa zastrzeżonego TOP jest równoważne ustawieniu właściwości TopValues (NajwiększeWartości) w arkuszu właściwości kwerendy w jej widoku "Projekt" lub wprowadzeniu wartości w polu NajwiększeWartości  [image]  na pasku narzędzi Projekt kwerendy.

Użycie słowa zastrzeżonego PERCENT jest równoważne użyciu znaku procentu (%) we właściwości TopValues (NajwiększeWartości) w arkuszu właściwości kwerendy lub w polu NajwiększeWartości.


DELETE, instrukcja (Microsoft Access)

W programie Microsoft Access, użycie instrukcji DELETE nie daje możliwości ujrzenia skutków jej działania w postaci zestawu wyników kwerendy lub arkusza danych. Chcąc dowiedzieć się, które rekordy zostaną usunięte, należy najpierw obejrzeć arkusz danych kwerendy wybierającej o tych samych kryteriach, a następnie wykonać kwerendę usuwającą.


INSERT INTO, instrukcja (Microsoft Access)

Jeśli użytkownik utworzy kwerendę INSERT INTO...VALUES w widoku SQL, zapisze ją i zamknie, a następnie ponownie otworzy, klauzula VALUES zostanie zastąpiona klauzulą SELECT. Nie wpływa to na wyniki kwerendy.

Użycie instrukcji INSERT INTO jest równoważne ustawieniu właściwości DestinationTable (TabelaDocelowa) w arkuszu właściwości kwerendy w widoku "Projekt" kwerendy.


PARAMETERS, deklaracja (Microsoft Access)

Po uruchomieniu kwerendy parametrycznej program Microsoft Access monituje o podanie kryteriów. Umożliwia to zaprojektowanie kwerendy, która zwraca rekordy w oparciu o kryteria podane przez użytkownika.

Argument nazwa podawany w deklaracji PARAMETERS jest tekstem pojawiającym się w oknie dialogowym po uruchomieniu kwerendy. Okno to tworzone jest automatycznie przez program Microsoft Access.

Użycie deklaracji PARAMETERS w widoku SQL jest równoważne zdefiniowaniu parametrów w rubryce Kryteria siatki projektu kwerendy.


PROCEDURE, klauzula (Microsoft Access)

Po skopiowaniu klauzuli PROCEDURE do widoku SQL zostaje ona usunięta z instrukcji SQL, gdy użytkownik przełączy się do innego widoku. Usunięcie klauzuli PROCEDURE nie wpływa na wyniki kwerendy. Jeśli klauzula PROCEDURE zawiera parametry, program Microsoft Access zastępuje słowo zastrzeżone PROCEDURE i argument nazwa słowem zastrzeżonym PARAMETERS. Zdefiniowane argumenty nie są usuwane.


UNION, operacja (Microsoft Access)

W programie Microsoft Access argumentem operacji UNION (kwerenda1, kwerenda2,...kwerendan) może być instrukcja SELECT, nazwa zapisanej kwerendy programu Microsoft Access lub nazwa zapisanej tabeli programu Microsoft Access poprzedzona słowem zastrzeżonym TABLE.

Kwerendę składającą można zobaczyć tylko w widoku SQL. Nie można jej ujrzeć w siatce projektu kwerendy.


UPDATE, instrukcja (Microsoft Access)

Ponieważ instrukcja UPDATE nie generuje zestawu wyników, w programie Microsoft Access nie jest wyświetlany po jej wykonaniu arkusz danych.

Jeśli istnieje potrzeba potwierdzania każdej zmiany, należy zamiast kwerendy aktualizującej użyć polecenia Zamień w menu Edycja formularza lub arkusza danych.


WITH OWNERACCESS OPTION, deklaracja (Microsoft Access)

Umieszczenie deklaracji WITH OWNERACCESS OPTION w instrukcji SQL umożliwia użytkownikowi wykonanie kwerendy i obejrzenie jej wyników, nawet jeśli nie posiada on uprawnień do tabel, na których oparta jest kwerenda. Po ustawieniu tej opcji użytkownik posiada te same uprawnienia co właściciel kwerendy.

Na przykład właściciel kwerendy opartej na tabeli "Employees" może umieścić deklarację WITH OWNERACCESS OPTION w definicji kwerendy zwracającej wszystkie pola poza adresem pracownika. Użytkownik nie posiadający uprawnień do odczytu tabeli " Employees" może wykonać kwerendę i obejrzeć tylko pola objęte kwerendą. W pośredni sposób użytkownik "nabywa" ograniczone prawa do odczytu tabeli.

Użycie tej deklaracji jest równoważne ustawieniu właściwości RunPermissions (UaktywnijUprawnienia) na "Właściciela" w arkuszu właściwości kwerendy w widoku "Projekt" kwerendy. Opuszczenie tej deklaracji jest równoważne ustawieniu właściwości RunPermissions (UaktywnijUprawnienia) na "Użytkownika", co jest ustawieniem domyślnym.


Funkcje agregujące języka SQL (Microsoft Access)

Funkcje agregujące języka SQL są podobne do funkcji agregujących domen, ale używane są w innym kontekście. W programie Microsoft Access funkcji agregujących SQL można użyć w instrukcji SQL tworzonej w widoku SQL w oknie kwerendy lub w instrukcji SQL w kodzie języka Visual Basic. Funkcje agregujące domen mogą być wywoływane bezpośrednio z kodu języka Visual Basic.

Funkcji agregujących zarówno języka SQL, jak i domen można używać w wyrażeniach w siatce projektu kwerendy. Funkcje agregujące SQL są najbardziej przydatne w kwerendach podsumowujących i krzyżowych.

Obu typów funkcji agregujących można również używać w formantach wyliczanych w formularzu lub raporcie.


Avg, funkcja (Microsoft Access)

W programie Microsoft Access funkcji Avg można użyć w siatce projektu kwerendy, w instrukcji SQL tworzonej w widoku SQL w oknie kwerendy lub w instrukcji SQL w kodzie języka Visual Basic. Funkcji Avg można również użyć w formantach wyliczanych w formularzu lub raporcie.

Funkcja Avg jest najbardziej przydatna w kwerendach podsumowujących i krzyżowych. Działa tak samo w kwerendzie utworzonej w siatce projektu kwerendy, jak i w instrukcji SQL w widoku SQL.

W siatce projektu kwerendy można utworzyć nową kwerendę podsumowującą klikając przycisk Podsumowanie  [image]  na pasku narzędzi Projekt kwerendy. W siatce pojawi się wówczas nowy wiersz Podsumowanie. Rubrykę Podsumowanie można umieścić poniżej pola, dla którego wykonywana będzie funkcja agregująca.

Załóżmy na przykład, że istnieje tabela "Orders" ("Zamówienia") z polami "Freight" ("Fracht") i "ShipCity" ("MiastoOdbiorcy"). Można utworzyć kwerendę wyświetlającą średni koszt wysyłki zamówień wysyłanych do każdego z miast. Należy utworzyć nową kwerendę podsumowującą i przeciągnąć pole "ShipCity" do siatki projektu kwerendy. Rubryka Podsumowanie poniżej pola "ShipCity" powinna być ustawiona na wartość "Grupuj według". Następnie należy przeciągnąć pole "Freight" do siatki projektu kwerendy i ustawić rubrykę Podsumowanie poniżej na wartość "Avg". Po uruchomieniu kwerendy zostanie w niej wyświetlony średni koszt wysyłki według miast.

Aby obejrzeć instrukcję SQL dla tej kwerendy, należy przejść do widoku SQL. Dla omówionego przykładu zostanie utworzona poniższa instrukcja SQL:

SELECT ShipCity, Avg(Freight) AS AvgOfFreight FROM Orders GROUP BY ShipCity;

Można również użyć instrukcji SQL w kodzie języka Visual Basic. W poniższym kodzie przykładowym z powyższej instrukcji SQL tworzony jest obiekt Recordset typu dynamiczny zestaw rekordów:

Sub AvgFreight()

Dim dbs As Database, rst As Recordset, strSQL As String

Set dbs = CurrentDb

strSQL = "SELECT ShipCity, Avg(Freight) AS AvgOfFreight " _

& "FROM Orders GROUP BY ShipCity;"

Set rst = dbs.OpenRecordset(strSQL)

rst.MoveLast

Debug.Print rst.RecordCount

Set dbs = Nothing

End Sub

Aby użyć funkcji Avg w formancie wyliczanym, należy ustawić właściwość ControlSource (ŹródłoFormantu) formantu na wyrażenie zawierające tę funkcję. Na przykład, aby w polu tekstowym wyświetlić średni koszt wysyłki dla zestawu zamówień, należy wpisać następujące wyrażenie we właściwości ControlSource (ŹródłoFormantu) tego pola tekstowego:

=Avg([Freight])

Jeśli funkcja Avg jest używana w formancie wyliczanym, można ograniczyć zestaw rekordów, dla których wykonywana jest ta funkcja, przez ustawienie właściwości Filter (Filtr) formularza.


Count, funkcja (Microsoft Access)

W programie Microsoft Access funkcji Count można użyć w siatce projektu kwerendy, w instrukcji SQL tworzonej w widoku SQL w oknie kwerendy lub w instrukcji SQL w kodzie języka Visual Basic. Funkcji Count można również użyć w formantach wyliczanych w formularzu lub raporcie.

Funkcja Count jest najbardziej przydatna w kwerendach podsumowujących i krzyżowych. Działa tak samo w kwerendzie utworzonej w siatce projektu kwerendy, jak i w instrukcji SQL w widoku SQL.

W siatce projektu kwerendy można utworzyć nową kwerendę podsumowującą klikając przycisk Podsumowanie  [image]  na pasku narzędzi Projekt kwerendy. W siatce pojawi się wówczas nowy wiersz Podsumowanie. Rubrykę Podsumowanie można umieścić poniżej pola, dla którego wykonywana będzie funkcja agregująca.

Najszybszym sposobem policzenia wszystkich rekordów w kwerendzie jest użycie funkcji Count(*). Można jej użyć w polu wyliczanym kwerendy.

Załóżmy na przykład, że istnieje tabela "Orders" ("Zamówienia") z polami "OrderID" ("IDZamówienia") i "ShipCity" ("MiastoOdbiorcy"). Można utworzyć kwerendę wyświetlającą liczbę zamówień wysyłanych do każdego z miast. Należy utworzyć nową kwerendę podsumowującą i przeciągnąć pole "ShipCity" do siatki projektu kwerendy. Rubryka Podsumowanie poniżej pola "ShipCity" powinna być ustawiona na wartość "Grupuj według".

Następnie należy utworzyć pole wyliczane wpisując poniższe wyrażenie do nowej rubryki Pole:

CountOfOrders: Count(*)

Następnie należy ustawić rubrykę Podsumowanie poniżej na "Wyrażenie". Po uruchomieniu kwerendy zostanie w niej w niej wyświetlona liczba zamówień wysłanych do każdego z miast.

Aby obejrzeć instrukcję SQL dla tej kwerendy, należy przejść do widoku SQL. Dla omówionego przykładu zostanie utworzona poniższa instrukcja SQL:

SELECT ShipCity, Count(*) AS CountOfOrders

FROM Orders GROUP BY ShipCity;

Te same wyniki można osiągnąć przeciągając pole "OrderID" do siatki projektu kwerendy i klikając Count w rubryce Podsumowanie poniżej. Kwerenda ta będzie działać nieco wolniej niż kwerenda korzystająca z funkcji Count(*). Należy zwrócić uwagę na różnice między poniższymi instrukcjami SQL.

SELECT ShipCity, Count(OrderID) AS CountOfOrders FROM Orders GROUP BY ShipCity;

Można również użyć instrukcji SQL w kodzie języka Visual Basic. W poniższym kodzie przykładowym z szybszej z powyższych dwóch instrukcji SQL tworzony jest obiekt Recordset typu dynamiczny zestaw rekordów

Sub CountOrders()

Dim dbs As Database, rst As Recordset, strSQL As String

Set dbs = CurrentDb

strSQL = "SELECT ShipCity, Count(*) AS CountOfOrders " _

& "FROM Orders GROUP BY ShipCity;"

Set rst = dbs.OpenRecordset(strSQL)

rst.MoveLast

Debug.Print rst.RecordCount

Set dbs = Nothing

End Sub

Aby użyć funkcji Count w formancie wyliczanym, należy ustawić właściwość ControlSource (ŹródłoFormantu) formantu na wyrażenie zawierające tę funkcję. Na przykład, aby w polu tekstowym wyświetlić średni koszt wysyłki dla zestawu zamówień, należy wpisać następujące wyrażenie we właściwości ControlSource (ŹródłoFormantu) tego pola tekstowego.

=Count([OrderID])

Jeśli funkcja Count jest używana w formancie wyliczanym, można ograniczyć zestaw rekordów, dla których wykonywana jest ta funkcja, przez ustawienie właściwości Filter (Filtr) formularza.


First, Last, funkcje (Microsoft Access)

W programie Microsoft Access funkcji First i Last można użyć w siatce projektu kwerendy, w instrukcji SQL tworzonej w widoku SQL w oknie kwerendy lub w instrukcji SQL w kodzie języka Visual Basic. Funkcji First i Last można również użyć w formantach wyliczanych w formularzu lub raporcie.

Funkcje First i Last są najbardziej przydatne w formantach wyliczanych raportu. Jeśli na przykład istnieje raport ""Orders" ("Zamówienia") pogrupowany według pola "ShipCountry" ("KrajOdbiorcy") i posortowany według pola "OrderDate" ("DataZamówienia"), funkcji First i Last można użyć w formantach wyliczanych, aby pokazać zakres dat zamówień dla każdej grupy. Aby pogrupować rekordy według pola "ShipCountry", należy kliknąć przycisk Sortowanie i grupowanie  [image]  na pasku narzędzi Projekt raportu. Następnie należy wybrać pole "ShipCountry" w kolumnie Pole/Wyrażenie i ustawić właściwości GroupHeader (NagłówekGrupy) i GroupFooter (StopkaGrupy) na wartość "Tak". W widoku "Projekt" należy utworzyć dwa nowe pola tekstowe w stopce "ShipCountry" i ustawić właściwość ControlSource (ŹródłoFormantu) na dwa następujące wyrażenia:

=First([OrderDate])

=Last([OrderDate])

Po przejściu do widoku "Podgląd wydruku" będzie można zobaczyć daty najwcześniejszych i najpóźniejszych zamówień dla każdej grupy zamówień.

Uwaga   Aby w programie Microsoft Access 97 zwrócić pierwszy lub ostatni rekord zestawu rekordów, należy utworzyć kwerendę posortowaną rosnąco lub malejąco i ustawić właściwość TopValues (NajwiększeWartości) na wartość 1. Więcej informacji można znaleźć w temacie poświęconym właściwości TopValues. W kodzie języka Visual Basic również można utworzyć posortowany zestaw wyników kwerendy i użyć metody obiektów dostępu do danych (DAO) MoveFirst lub MoveLast, aby zwrócić pierwszy lub ostatni rekord zestawu rekordów.


Min, Max, funkcje (Microsoft Access)

W programie Microsoft Access funkcji Min i Max można użyć w siatce projektu kwerendy, w instrukcji SQL tworzonej w widoku SQL w oknie kwerendy lub w instrukcji SQL w kodzie języka Visual Basic. Funkcji Min i Max można również użyć w formantach wyliczanych w formularzu lub raporcie.

Funkcje Min i Max są najbardziej przydatne w kwerendach podsumowujących i krzyżowych. Działają tak samo w kwerendzie utworzonej w siatce projektu kwerendy, jak i w instrukcji SQL w widoku SQL.

W siatce projektu kwerendy można utworzyć nową kwerendę podsumowującą klikając przycisk Podsumowanie  [image]  na pasku narzędzi Projekt kwerendy. W siatce pojawi się wówczas nowy wiersz Podsumowanie. Rubrykę Podsumowanie można umieścić poniżej pola, dla którego wykonywana będzie funkcja agregująca.

Załóżmy na przykład, że istnieje tabela "Orders" ("Zamówienia") z polami "Freight" ("Fracht") i "ShipCity" ("MiastoOdbiorcy"). Można utworzyć kwerendę wyświetlającą minimalny koszt wysyłki zamówień wysyłanych do każdego z miast. Należy utworzyć nową kwerendę podsumowującą i przeciągnąć pole "ShipCity" do siatki projektu kwerendy. Rubryka Podsumowanie poniżej pola "ShipCity" powinna być ustawiona na wartość "Grupuj według". Następnie należy przeciągnąć pole "Freight" do siatki projektu kwerendy i ustawić rubrykę Podsumowanie poniżej na wartość "Min". Po uruchomieniu kwerendy zostanie w niej wyświetlony minimalny koszt wysyłki według miast.

Aby obejrzeć instrukcję SQL dla tej kwerendy, należy przejść do widoku SQL. Dla omówionego przykładu zostanie utworzona poniższa instrukcja SQL:

SELECT ShipCity, Min(Freight) AS MinOfFreight

FROM Orders GROUP BY ShipCity;

Można również użyć instrukcji SQL w kodzie języka Visual Basic. W poniższym kodzie przykładowym z powyższej instrukcji SQL tworzony jest obiekt Recordset typu dynamiczny zestaw rekordów:

Sub MinFreight()

Dim dbs As Database, rst As Recordset, strSQL As String

Set dbs = CurrentDb

strSQL = "SELECT ShipCity, Min(Freight) AS MinOfFreight " _

& "FROM Orders GROUP BY ShipCity;"

Set rst = dbs.OpenRecordset(strSQL)

rst.MoveLast

Debug.Print rst.RecordCount

Set dbs = Nothing

End Sub

Aby użyć funkcji Min i Max w formancie wyliczanym, należy ustawić właściwość ControlSource (ŹródłoFormantu) formantu na wyrażenie zawierające którąś z tych funkcji. Na przykład, aby w polu tekstowym wyświetlić minimalny koszt wysyłki dla zestawu zamówień, należy wpisać następujące wyrażenie we właściwości ControlSource (ŹródłoFormantu) tego pola tekstowego:

=Min([Freight])

Jeśli funkcja Min lub Max jest używana w formancie wyliczanym, można ograniczyć zestaw rekordów, dla których wykonywana jest ta funkcja, przez ustawienie właściwości Filter (Filtr) formularza.


StDev, StDevP, funkcje (Microsoft Access)

W programie Microsoft Access funkcji StDev i StDevP można użyć w siatce projektu kwerendy, w instrukcji SQL tworzonej w widoku SQL w oknie kwerendy lub w instrukcji SQL w kodzie języka Visual Basic. Funkcji StDev i StDevP można również użyć w formantach wyliczanych w formularzu lub raporcie.

Funkcje StDev i StDevP są najbardziej przydatne w kwerendach podsumowujących i krzyżowych. Działają tak samo w kwerendzie utworzonej w siatce projektu kwerendy, jak i w instrukcji SQL w widoku SQL.

W siatce projektu kwerendy można utworzyć nową kwerendę podsumowującą klikając przycisk Podsumowanie  [image]  na pasku narzędzi Projekt kwerendy. W siatce pojawi się wówczas nowy wiersz Podsumowanie. Rubrykę Podsumowanie można umieścić poniżej pola, dla którego wykonywana będzie funkcja agregująca.

Załóżmy na przykład, że istnieje tabela "Orders" ("Zamówienia") z polami "Freight" ("Fracht") i "ShipCity" ("MiastoOdbiorcy"). Można utworzyć kwerendę wyświetlającą średnie odchylenie standardowe kosztu wysyłki zamówień wysyłanych do każdego z miast. Należy utworzyć nową kwerendę podsumowującą i przeciągnąć pole "ShipCity" do siatki projektu kwerendy. Rubryka Podsumowanie poniżej pola "ShipCity" powinna być ustawiona na wartość "Grupuj według". Następnie należy przeciągnąć pole "Freight" do siatki projektu kwerendy i ustawić rubrykę Podsumowanie poniżej na wartość "StDev". Po uruchomieniu kwerendy zostanie w niej wyświetlone średnie odchylenie standardowe kosztu wysyłki według miast

Aby obejrzeć instrukcję SQL dla tej kwerendy, należy przejść do widoku SQL. Dla omówionego przykładu zostanie utworzona poniższa instrukcja SQL:

SELECT ShipCity, StDev(Freight) AS StDevOfFreight

FROM Orders GROUP BY ShipCity;

Można również użyć instrukcji SQL w kodzie języka Visual Basic. W poniższym kodzie przykładowym z powyższej instrukcji SQL tworzony jest obiekt Recordset typu dynamiczny zestaw rekordów:

Sub StDevFreight()

Dim dbs As Database, rst As Recordset, strSQL As String

Set dbs = CurrentDb

strSQL = "SELECT ShipCity, StDev(Freight) " _

& "AS StDevOfFreight, ShipCity FROM Orders " _

& "GROUP BY ShipCity;"

Set rst = dbs.OpenRecordset(strSQL)

rst.MoveLast

Debug.Print rst.RecordCount

Set dbs = Nothing

End Sub

Aby użyć funkcji StDev i StDevP w formancie wyliczanym, należy ustawić właściwość ControlSource (ŹródłoFormantu) formantu na wyrażenie zawierające którąś z tych funkcji. Na przykład, aby w polu tekstowym wyświetlić minimalny koszt wysyłki dla zestawu zamówień, należy wpisać następujące wyrażenie we właściwości ControlSource (ŹródłoFormantu) tego pola tekstowego:

=StDev([Freight])

Jeśli funkcja StDev lub StDevP jest używana w formancie wyliczanym, można ograniczyć zestaw rekordów, dla których wykonywana jest ta funkcja, przez ustawienie właściwości Filter (Filtr) formularza.


Sum, funkcja (Microsoft Access)

W programie Microsoft Access funkcji Sum można użyć w siatce projektu kwerendy, w instrukcji SQL tworzonej w widoku SQL w oknie kwerendy lub w instrukcji SQL w kodzie języka Visual Basic. Funkcji Sum można również użyć w formantach wyliczanych w formularzu lub raporcie.

Funkcja Sum jest najbardziej przydatna w kwerendach podsumowujących i krzyżowych. Działa tak samo w kwerendzie utworzonej w siatce projektu kwerendy, jak i w instrukcji SQL w widoku SQL.

W siatce projektu kwerendy można utworzyć nową kwerendę podsumowującą klikając przycisk Podsumowanie  [image]  na pasku narzędzi Projekt kwerendy. W siatce pojawi się wówczas nowy wiersz Podsumowanie. Rubrykę Podsumowanie można umieścić poniżej pola, dla którego wykonywana będzie funkcja agregująca.

Załóżmy na przykład, że istnieje tabela "Orders" ("Zamówienia") z polami "Freight" ("Fracht") i "ShipCity" ("MiastoOdbiorcy"). Można utworzyć kwerendę wyświetlającą całkowity koszt wysyłki zamówień wysyłanych do każdego z miast. Należy utworzyć nową kwerendę podsumowującą i przeciągnąć pole "ShipCity" do siatki projektu kwerendy. Rubryka Podsumowanie poniżej pola "ShipCity" powinna być ustawiona na wartość "Grupuj według". Następnie należy przeciągnąć pole "Freight" do siatki projektu kwerendy i ustawić rubrykę Podsumowanie poniżej na wartość "Sum". Po uruchomieniu kwerendy zostanie w niej wyświetlony całkowity koszt wysyłki według miast.

Aby obejrzeć instrukcję SQL dla tej kwerendy, należy przejść do widoku SQL. Dla omówionego przykładu zostanie utworzona poniższa instrukcja SQL:

SELECT ShipCity, Sum(Freight) AS SumOfFreight

FROM Orders GROUP BY ShipCity;

Można również użyć instrukcji SQL w kodzie języka Visual Basic. W poniższym kodzie przykładowym z powyższej instrukcji SQL tworzony jest obiekt Recordset typu dynamiczny zestaw rekordów:

Sub SumFreight()

Dim dbs As Database, rst As Recordset, strSQL As String

Set dbs = CurrentDb

strSQL = "SELECT ShipCity, Sum(Freight) AS SumOfFreight " _

& "FROM Orders GROUP BY ShipCity;"

Set rst = dbs.OpenRecordset(strSQL)

rst.MoveLast

Debug.Print rst.RecordCount

Set dbs = Nothing

End Sub

Aby użyć funkcji Sum w formancie wyliczanym, należy ustawić właściwość ControlSource (ŹródłoFormantu) formantu na wyrażenie zawierające tę funkcję. Na przykład, aby w polu tekstowym wyświetlić średni koszt wysyłki dla zestawu zamówień, należy wpisać następujące wyrażenie we właściwości ControlSource (ŹródłoFormantu) tego pola tekstowego:

=Sum([Freight])

Jeśli funkcja Sum jest używana w formancie wyliczanym, można ograniczyć zestaw rekordów, dla których wykonywana jest ta funkcja, przez ustawienie właściwości Filter (Filtr) formularza.


Var, VarP, funkcje (Microsoft Access)

W programie Microsoft Access funkcji Var i Varp można użyć w siatce projektu kwerendy, w instrukcji SQL tworzonej w widoku SQL w oknie kwerendy lub w instrukcji SQL w kodzie języka Visual Basic. Funkcji Var i Varp można również użyć w formantach wyliczanych w formularzu lub raporcie.

Funkcje Var i Varp są najbardziej przydatne w kwerendach podsumowujących i krzyżowych. Działają tak samo w kwerendzie utworzonej w siatce projektu kwerendy, jak i w instrukcji SQL w widoku SQL.

W siatce projektu kwerendy można utworzyć nową kwerendę podsumowującą klikając przycisk Podsumowanie  [image]  na pasku narzędzi Projekt kwerendy. W siatce pojawi się wówczas nowy wiersz Podsumowanie. Rubrykę Podsumowanie można umieścić poniżej pola, dla którego wykonywana będzie funkcja agregująca.

Załóżmy na przykład, że istnieje tabela "Orders" ("Zamówienia") z polami "Freight" ("Fracht") i "ShipCity" ("MiastoOdbiorcy"). Można utworzyć kwerendę wyświetlającą wariancję kosztu wysyłki zamówień wysyłanych do każdego z miast. Należy utworzyć nową kwerendę podsumowującą i przeciągnąć pole "ShipCity" do siatki projektu kwerendy. Rubryka Podsumowanie poniżej pola "ShipCity" powinna być ustawiona na wartość "Grupuj według". Następnie należy przeciągnąć pole "Freight" do siatki projektu kwerendy i ustawić rubrykę Podsumowanie poniżej na wartość "Var". Po uruchomieniu kwerendy zostanie w niej wyświetlona wariancja kosztu wysyłki według miast.

Aby obejrzeć instrukcję SQL dla tej kwerendy, należy przejść do widoku SQL. Dla omówionego przykładu zostanie utworzona poniższa instrukcja SQL:

SELECT ShipCity, Var(Freight) AS VarOfFreight

FROM Orders GROUP BY ShipCity;

Można również użyć instrukcji SQL w kodzie języka Visual Basic. W poniższym kodzie przykładowym z powyższej instrukcji SQL tworzony jest obiekt Recordset typu dynamiczny zestaw rekordów:

Sub VarFreight()

Dim dbs As Database, rst As Recordset, strSQL As String

Set dbs = CurrentDb

strSQL = "SELECT ShipCity, Var(Freight) AS VarOfFreight " _

& "FROM Orders GROUP BY ShipCity;"

Set rst = dbs.OpenRecordset(strSQL)

rst.MoveLast

Debug.Print rst.RecordCount

Set dbs = Nothing

End Sub

Aby użyć funkcji Var i VarP w formancie wyliczanym, należy ustawić właściwość ControlSource (ŹródłoFormantu) formantu na wyrażenie zawierające którąś z tych funkcji. Na przykład, aby w polu tekstowym wyświetlić minimalny koszt wysyłki dla zestawu zamówień, należy wpisać następujące wyrażenie we właściwości ControlSource (ŹródłoFormantu) tego pola tekstowego:

=Var([Freight])

Jeśli funkcja Var lub VarP jest używana w formancie wyliczanym, można ograniczyć zestaw rekordów, dla których wykonywana jest ta funkcja, przez ustawienie właściwości Filter (Filtr) formularza.


Between...And, operator (Microsoft Access)

W programie Microsoft Access można użyć operatora Between...And w wyrażeniu kwerendy lub w formancie wyliczanym formularza lub raportu.

Operatora Between...And można użyć w wierszu Kryteria siatki projektu kwerendy, aby utworzyć kwerendę parametryczną. Operator Between...And umożliwia monitowanie użytkownika kwerendy o zakres wartości, do którego kwerenda ma się ograniczać. Wyrażenie podane jako argument wartość1 będzie monitem o początek zakresu, a wyrażenie podane jako argument wartość2 będzie monitem o koniec zakresu.

Załóżmy na przykład, że istnieje tabela "Orders" ("Zamówienia") z polem "OrderDate" ("DataZamówienia"). Należy utworzyć nową kwerendę w siatce projektu kwerendy i przeciągnąć pole "OrderDate" do pierwszej rubryki Pole w siatce. W rubryce Kryteria należy wpisać poniższą instrukcję:

Between [Enter beginning date:] And [Enter ending date:]

Po uruchomieniu tej kwerendy pojawi się najpierw okno dialogowe z monitem: "Enter beginning date:". Po wpisaniu wartości i kliknięciu przycisku OK, pojawi się kolejne okno dialogowe z monitem "Enter ending date:". Jeśli zostaną podane prawidłowe daty, wyniki kwerendy będą obejmować wszystkie rekordy z wartościami pola "OrderDate" mieszczącymi się w podanym przez użytkownika zakresie dat.

Operatora Between...And można również użyć w formancie wyliczanym, aby określić, czy wartość formantu mieści się w określonym zakresie liczbowym. W poniższym przykładzie następuje sprawdzenie, czy zamówienie zostało wysłane do miejsca o kodzie pocztowym należącym do określonego zakresu. Jeśli wartość pola "ShipPostalCode" mieści się między 98101 i 98199, funkcja IIf zwraca wartość "Local". W przeciwnym wypadku zwraca wartość "Nonlocal".

= IIf([ShipPostalCode] Between "98101" And "98199", "Local", "Nonlocal")

Jeśli którymś z argumentów podanych w wyrażeniu Between...And jest wartość Null, operator Between...And zwraca wartość Null.


In, operator (Microsoft Access)

W programie Microsoft Access można użyć operatora In w wyrażeniu kwerendy lub w formancie wyliczanym formularza lub raportu.

Operatora In można użyć w wyrażeniu kwerendy chcąc ustawić kilka kryteriów. Załóżmy na przykład, że istnieje tabela "Orders" ("Zamówienia") z polami "ShipCountry" ("KrajOdbiorcy") i "OrderID" ("IDZamówienia") i trzeba utworzyć kwerendę pokazującą wszystkie zamówienia wysłane do USA, Kanady lub Wielkiej Brytanii. Należy utworzyć nową kwerendę w oknie kwerendy i dodać do niej tabelę "Orders". Następnie należy przeciągnąć pola "OrderID" i "ShipCountry" do siatki projektu kwerendy i wprowadzić poniższe wyrażenie w wierszu Kryteria poniżej pola "ShipCountry":

In('USA', 'Canada', 'UK')

Po wykonaniu kwerendy pojawią się wszystkie zamówienia wysłane do każdego z tych trzech krajów.

Ten sam wynik można osiągnąć wpisując w rubryce Kryteria następujące wyrażenie:

"USA" Or "Canada" Or "UK"

Gdy lista kryteriów jest długa, wygodniej jest użyć operatora In niż operatora Or. Ponadto instrukcja SQL dla wyrażenia zawierającego operator In jest krótsza.

Operatora In można również użyć w formancie wyliczanym, aby określić, czy wartość pola bieżącego rekordu mieści się w pewnym zakresie. Można na przykład użyć operatora In w funkcji IIf, aby sprawdzić, czy wartość formantu mieści się w określonym zakresie. W poniższym przykładzie, jeśli wartością pola "ShipRegion" jest "WA", "OR" lub "ID", funkcja IIf zwraca wartość "Local". W przeciwnym wypadku zwraca wartość "Nonlocal".

=IIf([ShipRegion] In ('WA','OR','ID'), "Local", "Nonlocal")


Like, operator SQL (Microsoft Access)

W programie Microsoft Access można użyć operatora Like w wyrażeniu kwerendy lub w formancie wyliczanym formularza lub raportu.

Operatora Like można użyć do określenia niedokładnych kryteriów w siatce projektu kwerendy. Na przykład, po wpisaniu Like "C*" w wierszu Kryteria siatki projektu kwerendy, zwróci ona wszystkie pola, których wartość rozpoczyna się literą C.

W kwerendzie parametrycznej można użyć operatora Like, aby monitować użytkownika o wzorzec wyszukiwania. Załóżmy na przykład, że istnieje tabela "Employees" ("Pracownicy") zawierająca pole "LastName" ("Nazwisko"). W oknie kwerendy należy utworzyć nową kwerendę dodając tabelę "Employees" i przeciągając do siatki pole "LastName". W rubryce Kryteria należy wpisać poniższe wyrażenie:

Like [Enter first few letters of name:]&"*"

Po uruchomieniu kwerendy pojawi się okno dialogowe z monitem "Enter first few letters of name:". Jeśli użytkownik wpisze w oknie dialogowym tekst Sm, kwerenda wykona przeszukiwanie według wzorca "Sm*" – tzn. znajdzie wszystkie nazwiska rozpoczynające się od liter "Sm".

Można użyć operatora Like w wyrażeniu ustawiającym właściwość ValidationRule (RegułaRoprawności). Można na przykład ograniczyć dane wpisywane do formantu typu pole tekstowe według wzorca niedokładnego. We właściwości ValidationRule (RegułaRoprawności) tego pola tekstowego należy wpisać poniższe wyrażenie:

Like "P[A-F]###"

Dane wpisywane do tego pola tekstowego muszą rozpoczynać się literą P, po której musi wystąpić litera z zakresu od A do F, a następnie trzy cyfry.


Wyrażenia języka SQL (Microsoft Access)

Wielu funkcji języka Visual Basic można używać w ciągach znaków języka SQL zawartych w kodzie języka Visual Basic, w widoku SQL okna kwerendy lub w siatce projektu kwerendy. Można również tworzyć własne funkcje języka Visual Basic i używać w nich ciągów znaków języka SQL.

Funkcje używane w ciągach znaków języka SQL muszą zwracać wartość typu ciąg znaków lub typu Variant. Ponadto, każda operacja wykonywana przez funkcję może być wykonana tylko raz. Nie można użyć funkcji, która musi być wykonana dla każdego rekordu w zestawie danych, ponieważ instrukcja SQL jest tylko raz przekazywana do aparatu bazy danych Microsoft Jet. Nie można na przykład utworzyć funkcji używającej jako argumentu wartości pola.

Można użyć funkcji języka Visual Basic w instrukcji SQL definiującej obiekt QueryDef albo obiekt Recordset typu dynamiczny lub utrwalony zestaw rekordów. W programie Microsoft Access, w siatce projektu kwerendy funkcji języka Visual Basic można użyć w instrukcji SQL oraz w wyrażeniach kryteriów i pól wyliczanych.


Wyrażenia języka SQL – przykład (Microsoft Access)

W poniższym przykładzie za pomocą instrukcji SQL tworzony jest obiekt Recordset typu dynamiczny zestaw rekordów. Instrukcja SQL zawiera w klauzuli WHERE funkcję Year, która powoduje, że zwracane są rekordy zamówień złożonych w 1995 roku.

Sub Orders96()

Dim dbs As Database, rst As Recordset, strSQL As String

Dim fld As Field

Set dbs = CurrentDb

strSQL = "SELECT DISTINCTROW OrderID, OrderDate " _

& "FROM Orders WHERE ((Year([OrderDate])=1996));"

Set rst = dbs.OpenRecordset(strSQL, dbOpenDynaset)

rst.MoveLast

Debug.Print rst.RecordCount

End Sub

W następnym przykładzie zostało pokazane, jak użyć funkcji Visual Basic w instrukcji SQL w widoku SQL okna kwerendy. Poniższa instrukcja SQL definiuje kwerendę, która wyświetla pole "ShipName" tabeli "Orders", za pomocą funkcji Len wylicza liczbę znaków w tym polu dla każdego rekordu i wyświetla wynik w innej kolumnie.

SELECT DISTINCTROW ShipName, Len([ShipName]) AS LengthOfShipName

FROM Orders;

Identyczną kwerendę można utworzyć w siatce projektu kwerendy. Należy utworzyć nową kwerendę i dodać do niej tabelę "Orders". Następnie należy przeciągnąć pole "ShipName" do rubryki Pole w pierwszej kolumnie siatki. W kolejnej rubryce Pole należy umieścić poniższe wyrażenie pola wyliczanego.

LengthOfShipName: Len([ShipName])


Avg, funkcja – przykład (Microsoft Access)

W poniższym przykładzie zakłada się, że istnieje tabela "Orders" ("Zamówienia") zawierająca pole o nazwie "Freight" ("Fracht"). Aby użyć funkcji Avg do obliczenia średniego kosztu wysyłki dla zamówień, których koszt wysyłki przekracza wartość $100, należy wpisać poniższe wyrażenie w widoku SQL okna kwerendy:

SELECT Avg([Freight]) AS [AverageFreight] FROM Orders WHERE [Freight] > 100;

W następnym przykładzie tworzony jest formant wyliczany wyświetlający średni koszt wysyłki dla wszystkich rekordów tabeli "Orders" w formularzu opartym na tej tabeli. Należy otworzyć nowy formularz i ustawić jego właściwość RecordSource (ŹródłoRekordów) na tabelę "Orders". Następnie należy wpisać poniższe wyrażenie we właściwości ControlSource (ŹródłoFormantu) pola tekstowego w tym formularzu. Aby użyć warunku ograniczającego obliczenia do części rekordów, na przykład do zamówień o koszcie wysyłki przekraczającym wartość $100, należy ustawić właściwość Filter (Filtr) formularza.

=Avg([Freight])


Count, funkcja – przykład (Microsoft Access)

W poniższym przykładzie zakłada się, że istnieje tabela "Orders" ("Zamówienia") zawierająca pole o nazwie "ShipCountry" ("KrajOdbiorcy"). Aby użyć funkcji Count do wyliczenia liczby zamówień wysłanych do Wielkiej Brytanii, należy wpisać poniższe wyrażenie w widoku SQL okna kwerendy:

SELECT Count([ShipCountry]) AS [UKOrders] FROM Orders WHERE [ShipCountry] = 'UK';

W następnym przykładzie tworzony jest formant wyliczany wyświetlający liczbę zamówień w tabeli "Orders". Należy otworzyć nowy formularz i ustawić jego właściwość RecordSource (ŹródłoRekordów) na tabelę "Orders". Następnie należy wpisać poniższe wyrażenie we właściwości ControlSource (ŹródłoFormantu) pola tekstowego w tym formularzu. Aby użyć warunku ograniczającego obliczenia do części rekordów, na przykład do zamówień wysłanych do Wielkiej Brytanii, należy ustawić właściwość Filter (Filtr) formularza.

=Count([ShipCountry])


Min, Max, funkcje – przykład (Microsoft Access)

W poniższym przykładzie zakłada się, że istnieje tabela "Orders" ("Zamówienia") zawierająca pola "Freight" ("Fracht") i "ShipCountry" ("KrajOdbiorcy"). Aby użyć funkcji Min i Max do zwrócenia najmniejszego i największego kosztu wysyłki dla zamówień wysłanych do Wielkiej Brytanii, należy wpisać poniższe wyrażenie w widoku SQL okna kwerendy:

SELECT Min([Freight]) AS [LowFreight] FROM Orders WHERE [ShipCountry] = 'UK';

SELECT Max([Freight]) AS [HighFreight] FROM Orders WHERE [ShipCountry] = 'UK';

W następnym przykładzie tworzony jest formant wyliczany wyświetlający najmniejszy i największy koszt wysyłki dla wszystkich rekordów tabeli "Orders". Należy otworzyć nowy formularz i ustawić jego właściwość RecordSource (ŹródłoRekordów) na tabelę "Orders". Następnie należy wpisać poniższe wyrażenie we właściwości ControlSource (ŹródłoFormantu) pola tekstowego w tym formularzu. Aby użyć warunku ograniczającego wyszukiwanie do części rekordów, na przykład do zamówień wysłanych do Wielkiej Brytanii, należy ustawić właściwość Filter (Filtr) formularza.

=Min([Freight])


StDev, StDevP, funkcje – przykład (Microsoft Access)

W poniższym przykładzie zakłada się, że istnieje tabela "Orders" ("Zamówienia") zawierająca pola "Freight" ("Fracht") i "ShipCountry" ("KrajOdbiorcy"). Aby użyć funkcji StDev i StDevP do zwrócenia średniego odchylenia standardowego kosztów wysyłki dla zamówień wysłanych do Wielkiej Brytanii, należy wpisać poniższe wyrażenie w widoku SQL okna kwerendy:

SELECT StDev([Freight]) AS [FreightDev] FROM Orders WHERE [ShipCountry] = 'UK';

SELECT StDevP([Freight]) AS [FreightDevP] FROM Orders WHERE [ShipCountry] = 'UK';

W następnym przykładzie tworzony jest formant wyliczany wyświetlający średnie odchylenie standardowe kosztów wysyłki dla wszystkich rekordów tabeli "Orders". Należy otworzyć nowy formularz i ustawić jego właściwość RecordSource (ŹródłoRekordów) na tabelę "Orders". Następnie należy wpisać poniższe wyrażenie we właściwości ControlSource (ŹródłoFormantu) pola tekstowego w tym formularzu. Aby użyć warunku ograniczającego wyszukiwanie do części rekordów, na przykład do zamówień wysłanych do Wielkiej Brytanii, należy ustawić właściwość Filter (Filtr) formularza.

=StDev([Freight])


Sum, funkcja – przykład (Microsoft Access)

W poniższym przykładzie zakłada się, że istnieje tabela "Orders" ("Zamówienia") zawierająca pole o nazwie "ShipCountry" ("KrajOdbiorcy") oraz tabela "Order Details" ("Szczegóły zamówień") zawierająca pola "UnitPrice" ("CenaJednostkowa") i "Quantity" ("Ilość"). Aby użyć funkcji Sum do wyliczenia całkowitej wartości sprzedaży dla zamówień wysłanych do Wielkiej Brytanii, należy wpisać poniższe wyrażenie w widoku SQL okna kwerendy:

SELECT Sum([UnitPrice]*[Quantity]) AS [TotalUKSales]

FROM Orders INNER JOIN [Order Details] ON Orders.[OrderID] = [Order Details].[OrderID]

WHERE ([ShipCountry] = 'UK');

W następnym przykładzie tworzony jest formant wyliczany wyświetlający całkowitą wartość sprzedaży dla wszystkich rekordów tabeli "Orders". Należy otworzyć nowy formularz i ustawić jego właściwość RecordSource (ŹródłoRekordów) na tabelę "Orders". Następnie należy wpisać poniższe wyrażenie we właściwości ControlSource (ŹródłoFormantu) pola tekstowego w tym formularzu. Aby użyć warunku ograniczającego wyszukiwanie do części rekordów, na przykład do zamówień wysłanych do Wielkiej Brytanii, należy ustawić właściwość Filter (Filtr) formularza

=Sum([UnitPrice]*[Quantity])


Var, VarP, funkcje – przykład (Microsoft Access)

W poniższym przykładzie zakłada się, że istnieje tabela "Orders" ("Zamówienia") zawierająca pole o nazwie "Freight" ("Fracht"). Aby użyć funkcji Var i VarP do oszacowania wariancji kosztów wysyłki dla zamówień wysłanych do Wielkiej Brytanii, należy wpisać poniższe wyrażenie w widoku SQL okna kwerendy:

SELECT Var([Freight]) AS [UKFreightVariance] FROM Orders WHERE [ShipCountry] = 'UK';

SELECT VarP([Freight]) AS [UKFreightVarianceP] FROM Orders WHERE [ShipCountry] = 'UK';

W następnym przykładzie tworzony jest formant wyliczany wyświetlający oszacowanie wariancji kosztów wysyłki dla wszystkich rekordów tej samej tabeli "Orders". Należy otworzyć nowy formularz i ustawić jego właściwość RecordSource (ŹródłoRekordów) na tabelę "Orders". Następnie należy wpisać poniższe wyrażenie we właściwości ControlSource (ŹródłoFormantu) pola tekstowego w tym formularzu. Aby użyć warunku ograniczającego wyszukiwanie do części rekordów, na przykład do zamówień wysłanych do Wielkiej Brytanii, należy ustawić właściwość Filter (Filtr) formularza

=Var([Freight])


ALTER TABLE, instrukcja - przykład (Microsoft Access)
ALTER TABLE, instrukcja – przykład (Microsoft Access)

Aby przetestować poniższe przykłady w programie Microsoft Access, należy najpierw utworzyć nową kwerendę w przykładowej bazie danych "Northwind". Następnie należy zamknąć okno dialogowe Pokaż tabelę, bez określania tabeli ani kwerendy, przełączyć się do widoku SQL, wkleić wybrany przykład w oknie SQL i wykonać kwerendę.

Ostrzeżenie   Przykłady te wprowadzają zmiany w przykładowej bazie danych "Northwind". Przed ich wykonaniem warto utworzyć kopię zapasową tej bazy danych.

W poniższym przykładzie do tabeli "Employees" ("Pracownicy") dodawane jest pole "Salary" o typie danych Walutowy (Currency):

ALTER TABLE Employees ADD COLUMN Salary CURRENCY;

W następnym przykładzie pole "Salary" jest usuwane z tabeli "Employees" ("Pracownicy"):

ALTER TABLE Employees DROP COLUMN Salary;

Po wykonaniu następnych dwóch kwerend należy kliknąć polecenie Relacje w menu Narzędzia, aby zobaczyć zmienione relacje.

W poniższym przykładzie usuwany jest istniejący klucz obcy z tabeli "Orders" ("Zamówienia"):

ALTER TABLE Orders DROP CONSTRAINT EmployeesOrders;

W następnym przykładzie klucz obcy jest ponownie dodawany do tabeli "Orders" ("Zamówienia"):

ALTER TABLE Orders ADD CONSTRAINT EmployeesOrders FOREIGN KEY (EmployeeID) REFERENCES Employees (EmployeeID);


CREATE INDEX, instrukcja - przykład (Microsoft Access)
CREATE INDEX, instrukcja – przykład (Microsoft Access)

Aby przetestować poniższe przykłady w programie Microsoft Access, należy najpierw utworzyć nową kwerendę w przykładowej bazie danych "Northwind". Następnie należy zamknąć okno dialogowe Pokaż tabelę bez określania tabeli ani kwerendy, przełączyć się do widoku SQL, wkleić wybrany przykład w oknie SQL i wykonać kwerendę.

Ostrzeżenie   Przykłady te wprowadzają zmiany w przykładowej bazie danych "Northwind" . Przed ich wykonaniem warto utworzyć kopię zapasową tej bazy danych.

W następnym przykładzie tworzony jest indeks składający się z pól "HomePhone" ("TelefonDomowy") i "Extension" ("TelefonWewnętrzny") w tabeli "Employees" ("Pracownicy"):

CREATE INDEX NewIndex ON Employees (HomePhone, Extension);

W poniższym przykładzie tworzony jest indeks dla tabeli "Customers" ("Klienci") z polem "CustomerID" ("IDklienta"). Żadne dwa rekordy nie mogą zawierać tych samych danych w polu "CustomerID" ("IDklienta"), nie są również dozwolone wartości Null.

CREATE UNIQUE INDEX CustID ON Customers (CustomerID) WITH DISALLOW NULL;

Aby usunąć indeks utworzony w poprzednim przykładzie, trzeba użyć instrukcji DROP. Nie można usunąć indeksu w widoku "Projekt" tabeli, chyba że zostanie również usunięta relacja dla tabeli "Customers" ("Klienci"). Poniższa procedura usuwa nowy indeks używając instrukcji DROP:

DROP INDEX CustID ON Customers;

W poniższym przykładzie tworzony jest indeks dla połączonej tabeli ODBC. Nowy indeks nie wpływa w żaden sposób na zdalną bazę danych tej tabeli. Poniższy przykład nie będzie działać, jeśli zostanie tylko wklejony do programu Microsoft Access; trzeba najpierw utworzyć połączoną tabelę ODBC o nazwie "OrderDetailsODBC".

CREATE UNIQUE INDEX OrderID ON OrderDetailsODBC (OrderID);


CREATE TABLE, instrukcja; CONSTRAINT, klauzula - przykład (Microsoft Access)
CREATE TABLE, instrukcja; CONSTRAINT, klauzula – przykład (Microsoft Access)

Aby przetestować poniższe przykłady w programie Microsoft Access, należy najpierw utworzyć nową kwerendę w przykładowej bazie danych "Northwind". Następnie należy zamknąć okno dialogowe Pokaż tabelę bez określania tabeli ani kwerendy, przełączyć się do widoku SQL, wkleić wybrany przykład w oknie SQL i wykonać kwerendę.

Ostrzeżenie   Przykłady te wprowadzają zmiany w przykładowej bazie danych "Northwind" . Przed ich wykonaniem warto utworzyć kopię zapasową tej bazy danych.

W poniższym przykładzie tworzona jest nowa tabela z dwoma polami tekstowymi:

CREATE TABLE FirstTable (FirstName TEXT, LastName TEXT);

W następnym przykładzie tworzona jest nowa tabela z dwoma polami tekstowymi oraz polem Data/Godzina. Z tych trzech pól tworzony jest unikatowy indeks:

CREATE TABLE SecondTable (FirstName TEXT,

LastName TEXT, DateOfBirth DATETIME,

CONSTRAINT MyTableConstraint UNIQUE (FirstName, LastName, DateOfBirth));

W poniższym przykładzie tworzona jest nowa tabela z dwoma polami tekstowymi oraz polem liczb całkowitych (Integer). Pole "SSN" jest kluczem podstawowym.

CREATE TABLE ThirdTable (FirstName TEXT, LastName TEXT, SSN INTEGER

CONSTRAINT MyFieldConstraint PRIMARY KEY);


DROP, instrukcja - przykład (Microsoft Access)
DROP, instrukcja – przykład (Microsoft Access)

Aby przetestować poniższy przykład, należy za pomocą dowolnego pola utworzyć indeks o nazwie "MyIndex" w tabeli "Employees" ("Pracownicy") w przykładowej bazie danych "Northwind", po czym należy utworzyć nową tabelę o nazwie "Trainees". Następnie należy utworzyć nową kwerendę w bazie danych "Northwind", zamknąć okno dialogowe Pokaż tabelę, bez określania tabeli ani kwerendy, przełączyć się do widoku SQL, wkleić wybrany przykład w oknie SQL i wykonać kwerendę.

Ostrzeżenie   Przykłady te wprowadzają zmiany w przykładowej bazie danych "Northwind" . Przed ich wykonaniem warto utworzyć kopię zapasową tej bazy danych.

W poniższym przykładzie usuwany jest indeks "MyIndex" z tabeli "Employees" ("Pracownicy"):

DROP INDEX MyIndex ON Employees;

W następnym przykładzie tabela "Trainees" usuwana jest z bazy danych:

DROP TABLE Trainees;


SELECT, instrukcja; FROM, klauzula - przykład (Microsoft Access)
SELECT, instrukcja; FROM, klauzula – przykład (Microsoft Access)

Aby przetestować poniższe przykłady w programie Microsoft Access, należy najpierw utworzyć nową kwerendę w przykładowej bazie danych "Northwind". Następnie należy zamknąć okno dialogowe Pokaż tabelę, bez określania tabeli ani kwerendy, przełączyć się do widoku SQL, wkleić wybrany przykład w oknie SQL i wykonać kwerendę.

W poniższym przykładzie wybierane są pola "LastName" ("Nazwisko") i "FirstName" ("Imię") wszystkich rekordów tabeli "Employees" ("Pracownicy"):

SELECT LastName, FirstName FROM Employees;

W następnym przykładzie wybierane są wszystkie pola tabeli "Employees" ("Pracownicy"):

SELECT * FROM Employees;

W poniższym przykładzie zliczana jest liczba rekordów zawierających wpis w polu "PostalCode" ("KodPocztowy"). Zwracanemu polu nadawana jest nazwa "Tally":

SELECT Count(PostalCode) AS Tally FROM Customers;

W następnym przykładzie zostaje pokazane, jakie byłyby ceny poszczególnych produktów po ich zwiększeniu o 10 procent. Ceny istniejące w bazie danych nie ulegają zmianie.

SELECT ProductName, UnitPrice AS Current, UnitPrice * 1.1 AS ProposedNewPrices

FROM Products;

W poniższym przykładzie wyliczana jest liczba produktów w bazie danych oraz średnia i maksymalna cena jednostkowa (UnitPrice):

SELECT Count(*) AS [Total Products], Avg(UnitPrice) AS [Average Unit Price], Max(UnitPrice)

AS [Maximum Unit Price] FROM Products;

W następnym przykładzie wyświetlane są zawartości pól "ProductName" ("NazwaProduktu") i "UnitPrice" ("CenaJednostkowa") dla każdego rekordu w tabeli "Products" ("Produkty"). Ciąg znaków "has a unit price of" rozdziela te dwa pola w zestawie wyników.

SELECT ProductName, 'has a unit price of', UnitPrice FROM Products;


IN, klauzula - przykład (Microsoft Access)
IN, klauzula – przykład (Microsoft Access)

W poniższej tabeli zostało pokazane, w jaki sposób można użyć klauzuli IN, aby pobrać dane z zewnętrznej bazy danych. W każdym przykładzie zakłada się, że tabela "Customers" ("Klienci") jest przechowywana w zewnętrznej bazie danych.

Uwaga   Klauzula SQL IN różni się do operatora SQL In, który jest używany do sprawdzenia, czy wartość wyrażenia jest równa jednej z kilku wartości z określonej listy.

Zewnętrzna baza danych	Instrukcja SQL
Baza danych Microsoft Jet. JetData.mdb jest nazwą bazy danych Jet zawierającej tabelę "Customers" ("Klienci").	SELECT CustomerID FROM Customers IN 'C:\My Documents\JetData.mdb' WHERE CustomerID Like 'A*';
Skoroszyt programu Microsoft Excel (plik .xls). XLData.xls jest skoroszytem programu Microsoft Excel zawierającym arkusz o nazwie "Customers". "CustomersRange" jest nazwą zakresu komórek w tym arkuszu. Należy zauważyć, że, aby oznaczyć cały arkusz jako tabelę, trzeba dołączyć znak dolara ($) i ująć nazwę w nawias.	SELECT CustomerID, CompanyName FROM [Customers$] IN 'C:\My Documents\XLData.xls' 'EXCEL 5.0;' WHERE CustomerID Like 'A*'; – or – SELECT CustomerID, CompanyName FROM CustomersRange IN 'C:\My Documents\XLData.xls' 'EXCEL 5.0;' WHERE CustomerID Like 'A*';
dBASE III lub IV. Aby pobrać dane z tabeli programu dBASE III, należy wstawić dBASE III zamiast dBASE IV.	SELECT CustomerID FROM Customers IN C:\DBASE\DATA\SALES dBASE IV; WHERE CustomerID Like A*;
dBASE III lub IV (za pomocą składni DATABASE). Aby pobrać dane z tabeli programu dBASE III, należy wstawić dBASE III zamiast dBASE IV.	SELECT CustomerID FROM Customers IN [dBASE IV;DATABASE=C:\DBASE\DATA\SALES;] WHERE CustomerID Like A*;
Paradox 3.x lub 4.x. Aby pobrać dane z tabeli programu Paradox w wersji 3.x, należy wstawić Paradox 3.x zamiast Paradox 4.x.	SELECT CustomerID FROM Customers IN C:\PARADOX\DATA\SALES Paradox 4.x; WHERE CustomerID Like A*;
Paradox 3.x lub 4.x (za pomocą składni DATABASE). Aby pobrać dane z tabeli programu Paradox w wersji 3.x, należy wstawić Paradox 3.x zamiast Paradox 4.x.	SELECT CustomerID FROM Customers IN [Paradox 4.x;DATABASE=C:\PARADOX\DATA\SALES;] WHERE CustomerID Like A*;


In, operator - przykład (Microsoft Access)
In, operator – przykład (Microsoft Access)

Aby przetestować poniższy przykład w programie Microsoft Access, należy najpierw utworzyć nową kwerendę w przykładowej bazie danych "Northwind". Następnie należy zamknąć okno dialogowe Pokaż tabelę, bez określania tabeli ani kwerendy, przełączyć się do widoku SQL, wkleić wybrany przykład w oknie SQL i wykonać kwerendę.

W przykładzie tym tworzona jest kwerenda dla tabeli "Orders" ("Zamówienia"), które zawiera zamówienia (Orders) wysyłane do Colchester, Hedge End i Londynu:

SELECT * FROM Orders WHERE ShipCity In ('Colchester','Hedge End','London');


WHERE, klauzula - przykład (Microsoft Access)
WHERE, klauzula – przykład (Microsoft Access)

Aby przetestować poniższe przykłady w programie Microsoft Access, należy najpierw utworzyć nową kwerendę w przykładowej bazie danych "Northwind". Następnie należy zamknąć okno dialogowe Pokaż tabelę, bez określania tabeli ani kwerendy, przełączyć się do widoku SQL, wkleić wybrany przykład w oknie SQL i wykonać kwerendę.

W poniższym przykładzie wybierane są pola "LastName" ("Nazwisko") i "FirstName" ("Imię") każdego rekordu, w którym wartością pola "LastName" ("Nazwisko") jest "King":

SELECT LastName, FirstName FROM Employees

WHERE LastName = 'King';

W następnym przykładzie wybierane są pola "LastName" ("Nazwisko") i "FirstName" ("Imię"), jeśli wartość wpisana w polu "LastName" ("Nazwisko") zaczyna się od litery S:

SELECT LastName, FirstName FROM Employees

WHERE LastName Like 'S*';

W poniższym przykładzie wybierane są produkty, których cena jednostkowa (UnitPrice) zawiera się między $20 a $50:

SELECT ProductName, UnitPrice FROM Products

WHERE (UnitPrice >=20.00 And UnitPrice <= 50.00);

W następnym przykładzie wybierane są wszystkie produkty, których nazwy w porządku alfabetycznym mieszczą się między "Cha" i "Out". Nie jest np. pobierany ciąg znaków "Outback Lager" ponieważ "Outback Lager" następuje po "Out", zatem nie mieści się w określonym zakresie.

SELECT ProductName, UnitPrice FROM Products

WHERE ProductName Between 'Cha' And 'Out';

W poniższym przykładzie wybierane są zamówienia (Orders) z pierwszej połowy 1995 roku:

SELECT OrderID, OrderDate FROM Orders

WHERE OrderDate Between #1-1-95# And #6-30-95#;

W następnym przykładzie wybierane są zamówienia wysłane do stanów Idaho, Oregon lub Washington:

SELECT OrderID, ShipRegion FROM Orders

WHERE ShipRegion In ('ID', 'OR', 'WA');


GROUP BY, klauzula - przykład (Microsoft Access)
GROUP BY, klauzula – przykład (Microsoft Access)

Aby przetestować poniższe przykłady w programie Microsoft Access, należy najpierw utworzyć nową kwerendę w przykładowej bazie danych "Northwind". Następnie należy zamknąć okno dialogowe Pokaż tabelę, bez określania tabeli ani kwerendy, przełączyć się do widoku SQL, wkleić wybrany przykład w oknie SQL i wykonać kwerendę.

W poniższym przykładzie znajdowana jest średnia cena jednostkowa (UnitPrice) dla wszystkich produktów (Products) od wszystkich dostawców (Suppliers), a ponadto lista cen jest grupowana według dostawców:

SELECT SupplierID, Avg(UnitPrice) AS AvgOfUnitPrice

FROM Products GROUP BY SupplierID;

W następnym przykładzie znajdowana jest maksymalna cena jednostkowa produktu w każdej kategorii:

SELECT CategoryID, Max(UnitPrice) AS MaxOfUnitPrice

FROM Products GROUP BY CategoryID;

W poniższym przykładzie wyliczana jest liczba zamówień złożonych u każdego pracownika (Employee):

SELECT EmployeeID, Count(OrderID) AS CountOfOrderID

FROM Orders GROUP BY EmployeeID;


HAVING, klauzula - przykład (Microsoft Access)
HAVING, klauzula – przykład (Microsoft Access)

Aby przetestować poniższe przykłady w programie Microsoft Access, należy najpierw utworzyć nową kwerendę w przykładowej bazie danych "Northwind". Następnie należy zamknąć okno dialogowe Pokaż tabelę, bez określania tabeli ani kwerendy, przełączyć się do widoku SQL, wkleić wybrany przykład w oknie SQL i wykonać kwerendę.

W poniższym przykładzie znajdowani są dostawcy (Suppliers), których produkty mają średnia cenę jednostkową (UnitPrice) wyższą niż $25:

SELECT SupplierID, Avg(UnitPrice) AS AvgOfUnitPrice

FROM Products GROUP BY SupplierID

HAVING (Avg(UnitPrice)>25);

W następnym przykładzie wybierani są pracownicy (Employees), którzy sprzedali więcej niż 100 zamówień (Orders):

SELECT EmployeeID, Count(OrderID) AS CountOfOrderID

FROM Orders GROUP BY EmployeeID

HAVING Count(OrderID) > 100;


ORDER BY, klauzula - przykład (Microsoft Access)
ORDER BY, klauzula – przykład (Microsoft Access)

Aby przetestować poniższe przykłady w programie Microsoft Access, należy najpierw utworzyć nową kwerendę w przykładowej bazie danych "Northwind". Następnie należy zamknąć okno dialogowe Pokaż tabelę, bez określania tabeli ani kwerendy, przełączyć się do widoku SQL, wkleić wybrany przykład w oknie SQL i wykonać kwerendę.

W poniższej instrukcji SQL została użyta klauzula ORDER BY, aby posortować rekordy alfabetycznie, a następnie według kategorii.

W tym przykładzie rekordy są sortowane według pola "LastName" ("Nazwisko") w porządku malejącym (od Z do A):

SELECT LastName, FirstName FROM Employees ORDER BY LastName DESC;

W następnym przykładzie rekordy są sortowane najpierw według pola "CategoryID" ("IDkategorii"), a następnie według pola "ProductName" ("NazwaProduktu"):

SELECT CategoryID, ProductName, UnitPrice FROM Products

ORDER BY CategoryID, ProductName;


ALL, DISTINCT, DISTINCTROW, TOP, predykaty - przykład (Microsoft Access)
ALL, DISTINCT, DISTINCTROW, TOP, predykaty – przykład (Microsoft Access)

Aby przetestować poniższe przykłady w programie Microsoft Access, należy utworzyć dwie nowe tabele, podobne do pokazanych poniżej. Następnie należy utworzyć nową kwerendę w przykładowej bazie danych "Northwind", zamknąć okno dialogowe Pokaż tabelę, bez określania tabeli ani kwerendy, przełączyć się do widoku SQL, wkleić wybrany przykład w oknie SQL i wykonać kwerendę.

Tabela Clients

FirstName	ClientID
Bob	1
Adam	2
Beverly	3
Bob	4
Tabela Invoices

ClientID	InvoiceID
1	1
1	2
2	3
2	4
2	5
4	6
4	7
W poniższym przykładzie zwracane są wszystkie rekordy zwrócone przez sprzężenie wewnętrzne podanych dwóch tabel. Zestaw wyników może zostać zaktualizowany.

SELECT ALL FirstName FROM Clients INNER JOIN Invoices

ON Clients.ClientID = Invoices.ClientID;

Wynik	Aktualizowalny
Bob Bob Adam Adam Adam Bob Bob	Tak
W następnym przykładzie wybierane są tylko rekordy z unikatowymi wartościami zwróconymi przez sprzężenie wewnętrzne podanych dwóch tabel. Zestaw wyników nie może zostać zaktualizowany.

SELECT DISTINCT FirstName FROM Clients INNER JOIN Invoices

ON Clients.ClientID = Invoices.ClientID;

Wynik	Aktualizowalny
Bob Adam	Nie
W poniższym przykładzie wybierane są tylko rekordy z unikatowymi wartościami zwróconymi przez sprzężenie wewnętrzne podanych dwóch tabel. Zestaw wyników może zostać zaktualizowany.

SELECT DISTINCTROW FirstName FROM Clients INNER JOIN Invoices

ON Clients.ClientID = Invoices.ClientID;

Wynik	Aktualizowalny
Bob Adam Bob	Tak
W następnym przykładzie wybieranych jest pierwszych pięć rekordów zwróconych przez sprzężenie wewnętrzne podanych dwóch tabel. Zestaw wyników może zostać zaktualizowany.

SELECT TOP 5 FirstName FROM Clients INNER JOIN Invoices

ON Clients.ClientID = Invoices.ClientID

ORDER BY Invoices.InvoiceID;

Wynik	Aktualizowalny
Bob Bob Adam Adam Adam	Tak


DELETE, instrukcja - przykład (Microsoft Access)
DELETE, instrukcja – przykład (Microsoft Access)

Aby przetestować poniższy przykład, należy dodać kilka rekordów do tabeli "Employees" ("Pracownicy") z wartością "Trainee" pola "Title" ("Stanowisko").

W przykładzie tym usuwane są wszystkie rekordy, które w polu "Title" ("Stanowisko") mają wartość "Trainee". Jeśli klauzula FROM obejmuje tylko jedną tabelę, nie trzeba wymieniać nazwy tabeli w instrukcji DELETE.

DELETE * FROM Employees WHERE Title = 'Trainee';


INNER JOIN, operacja - przykład (Microsoft Access)
INNER JOIN, operacja – przykład (Microsoft Access)

Aby przetestować poniższy przykład w programie Microsoft Access, należy najpierw utworzyć nową kwerendę w przykładowej bazie danych "Northwind". Następnie należy zamknąć okno dialogowe Pokaż tabelę, bez określania tabeli ani kwerendy, przełączyć się do widoku SQL, wkleić wybrany przykład w oknie SQL i wykonać kwerendę.

W poniższym przykładzie tworzone są dwa równorzędne sprzężenia: jedno między tabelami "Order Details" ("Opisy zamówień") i "Orders" ("Zamówienia") i drugie między tabelami "Orders" ("Zamówienia") i "Employees" ("Pracownicy"). Oba sprzężenia są niezbędne, ponieważ tabela "Employees" ("Pracownicy") nie zawiera danych o sprzedaży (Order Details), a tabela "Order Details" ("Opisy zamówień") nie zawiera danych o pracownikach (Employees). Kwerenda zwraca listę pracowników oraz ich wyniki sprzedaży.

SELECT DISTINCTROW Sum(UnitPrice * Quantity)

AS Sales, FirstName & " " & LastName AS Name FROM Employees

INNER JOIN(Orders INNER JOIN [Order Details]

ON Orders.OrderID = [Order Details].OrderID)

ON Employees.EmployeeID = Orders.EmployeeID

GROUP BY FirstName & " " & LastName;


INSERT INTO, instrukcja - przykład (Microsoft Access)
INSERT INTO, instrukcja – przykład (Microsoft Access)

Ostrzeżenie   Przykłady te wprowadzają zmiany w przykładowej bazie danych "Northwind". Przed ich wykonaniem warto utworzyć kopię zapasową tej bazy danych.

Aby przetestować poniższy przykład, należy utworzyć kopię tabeli "Customers" ("Klienci") i nadać jej nazwę "NewCustomers". W tym przykładzie wybierane są wszystkie rekordy w tabeli "New Customers", po czym są one dodawane do tabeli "Customers" ("Klienci"). Jeśli poszczególne kolumny nie są określone, nazwy kolumn tabeli w instrukcji SELECT muszą dokładnie odpowiadać nazwom kolumn tabeli w instrukcji INSERT INTO.

INSERT INTO Customers SELECT * FROM NewCustomers;

W następnym przykładzie tworzony jest nowy rekord w tabeli "Employees" ("Pracownicy"):

INSERT INTO Employees (FirstName,LastName, Title) VALUES ('Harry', 'Washington', 'Trainee');

W poniższym przykładzie wybierani są wszyscy stażyści z tabeli "Trainees", którzy zostali zatrudnieni więcej niż 30 dni wcześniej. Ich rekordy są dodawane do tabeli "Employees" ("Pracownicy").

INSERT INTO Employees SELECT Trainees.* FROM Trainees WHERE HireDate < Now() - 30;

Można również użyć klauzuli INSERT INTO do utworzenia kopii zapasowej informacji zawartych w bazie danych przed ich zmianą. Można na przykład utworzyć kopię zapasową informacji zawartych w tabeli "Employees" ("Pracownicy"), zanim użytkownik wprowadzi jakieś zmiany w jej danych.

Aby przetestować poniższy przykład, należy w oknie bazy danych skopiować tabelę "Employees" ("Pracownicy") do nowej tabeli o nazwie "EmployeeHistory" przez kliknięcie tabeli, kliknięcie przycisku Kopiuj  [image]  na pasku narzędzi i kliknięcie przycisku Wklej  [image]. W polu Opcje wklejania okna dialogowego Wklej tabelę jako należy kliknąć przycisk opcji Tylko struktura. Spowoduje to skopiowanie tylko struktury tabeli, bez danych. Następnie należy wkleić poniższą instrukcję SQL do nowej kwerendy i zapisać tę kwerendę pod nazwą "BackUpQuery":

INSERT INTO EmployeesHistory (FirstName, LastName, Title)

VALUES (Forms!Employees!FirstName, Forms!Employees!Lastname,Forms!Employees!Title);

Należy otworzyć formularz "Employees" ("Pracownicy") w widoku "Projekt" formularza i ustawić właściwość BeforeUpdate formularza na [Procedura zdarzenia]. W procedurze zdarzenia BeforeUpdate należy wprowadzić następujący kod:

DoCmd.OpenQuery "BackUpQuery"

Dane istniejące w tabeli "Employees" ("Pracownicy") będą teraz kopiowane do tabeli kopii zapasowej za każdym razem, gdy użytkownik zmieni je.


LEFT JOIN, RIGHT JOIN, operacje - przykład (Microsoft Access)
LEFT JOIN, RIGHT JOIN, operacje – przykład (Microsoft Access)

Aby przetestować poniższe przykłady w programie Microsoft Access, należy najpierw utworzyć nową kwerendę w przykładowej bazie danych "Northwind". Następnie należy zamknąć okno dialogowe Pokaż tabelę, bez określania tabeli ani kwerendy, przełączyć się do widoku SQL, wkleić wybrany przykład w oknie SQL i wykonać kwerendę.

W poniższym przykładzie wybierani są wszyscy klienci (Customers), łącznie z tymi, którzy nie złożyli zamówień (Orders):

SELECT Customers.CustomerID, CompanyName, OrderID

FROM Customers

LEFT JOIN Orders

ON Customers.CustomerID = Orders.CustomerID

ORDER BY OrderID;

W następnym przykładzie wybierani są wszyscy dostawcy (Suppliers), łącznie z tymi, którzy nie dostarczyli żadnych produktów. Przed przetestowaniem tego przykładu należy wykonać poniższą kwerendę, aby dodać rekord do tabeli "Suppliers" ("Dostawcy"):

INSERT INTO Suppliers (CompanyName, ContactName, ContactTitle)

VALUES ('Acme Supply Co.', 'That Coyote', 'Sales Manager');

Następnie należy utworzyć nową kwerendę, wkleić poniższą instrukcję SQL w oknie SQL i wykonać kwerendę.

SELECT Suppliers.SupplierID, Suppliers.CompanyName, Products.ProductID, Products.ProductName

FROM Products RIGHT JOIN Suppliers ON Products.SupplierID = Suppliers.SupplierID

ORDER BY Products.SupplierID;

Aby usunąć dodatkowy rekord utworzony w tabeli "Suppliers" ("Dostawcy") można wykonać następującą kwerendę:

DELETE * FROM Suppliers

WHERE CompanyName = 'Acme Supply Co.';


PARAMETERS, deklaracja - przykład (Microsoft Access)
PARAMETERS, deklaracja – przykład (Microsoft Access)

Aby przetestować poniższe przykłady w programie Microsoft Access, należy najpierw utworzyć nową kwerendę w przykładowej bazie danych "Northwind". Następnie należy zamknąć okno dialogowe Pokaż tabelę, bez określania tabeli ani kwerendy, przełączyć się do widoku SQL, wkleić wybrany przykład w oknie SQL i wykonać kwerendę.

W poniższym przykładzie użytkownik jest monitowany o podanie nazwiska (Last Name) pracownika. Wprowadzony wpis jest używany jako kryterium dla kwerendy:

PARAMETERS [Enter a Last Name:] Text;

SELECT *

FROM Employees

WHERE LastName = [Enter a Last Name:];

W następnym przykładzie użytkownik jest monitowany o podanie ID kategorii. Wprowadzony wpis jest używany jako kryterium dla kwerendy:

PARAMETERS [Enter a Category ID:] Value;

SELECT CategoryID, ProductName, Count([Order Details].OrderID) AS Tally

FROM Products

INNER JOIN [Order Details] ON Products.ProductID = [Order Details].ProductID

GROUP BY CategoryID, ProductName

HAVING CategoryID = [Enter a Category ID:];


SELECT...INTO, instrukcja - przykład (Microsoft Access)
SELECT...INTO, instrukcja – przykład (Microsoft Access)

Aby przetestować poniższe przykłady w programie Microsoft Access, należy najpierw utworzyć nową kwerendę w przykładowej bazie danych "Northwind". Następnie należy zamknąć okno dialogowe Pokaż tabelę, bez określania tabeli ani kwerendy, przełączyć się do widoku SQL, wkleić wybrany przykład w oknie SQL i wykonać kwerendę.

W poniższym przykładzie wybierane są wszystkie rekordy tabeli "Employees" ("Pracownicy"), po czym są one kopiowane do nowej tabeli o nazwie "Employees Backup":

SELECT * INTO [Employees Backup] FROM Employees;

W następnym przykładzie tworzona jest nowa tabela o nazwie "Sales Representatives" zawierająca tylko rekordy tych pracowników, którzy mają tytuł "Sales Representative":

SELECT Employees.FirstName, LastName INTO [Sales Representatives]

FROM Employees

WHERE Title = 'Sales Representative';

W poniższym przykładzie tworzona jest kopia tabeli "Employees" ("Pracownicy"), która zostaje umieszczona w bazie danych Backup.mdb:

SELECT Employees.* INTO Employees IN Backup.mdb FROM Employees;

Następny przykład dotyczy tabeli "Payroll" zawierającej dwa pola: "EmployeeID" i "Salary". W przykładzie tym jest tworzona nowa tabela zawierająca dane o zatrudnieniu i o płacach dotyczące wszystkich stażystów. Tabele "Employees" ("Pracownicy") i "Payroll" są powiązane relacją jeden-do-jednego. Nowa tabela zawiera wszystkie dane z tabeli "Employees" ("Pracownicy") oraz pole "Salary" z tabeli "Payroll".

SELECT Employees.*, Salary INTO Trainees

FROM Employees

INNER JOIN Payroll ON Employees.EmployeeID = Payroll.EmployeeID

WHERE Title = 'Trainee';


TRANSFORM, instrukcja - przykład (Microsoft Access)
TRANSFORM, instrukcja – przykład (Microsoft Access)

Aby przetestować poniższe przykłady w programie Microsoft Access, należy najpierw utworzyć nową kwerendę w przykładowej bazie danych "Northwind". Następnie należy zamknąć okno dialogowe Pokaż tabelę, bez określania tabeli ani kwerendy, przełączyć się do widoku SQL, wkleić wybrany przykład w oknie SQL i wykonać kwerendę.

W poniższym przykładzie tworzona jest nowa kwerenda krzyżowa pokazująca miesięczną sprzedaż produktów w roku określonym przez użytkownika. Miesiące są zwracane od strony lewej do prawej, jako kolumny, a nazwy produktów od góry do dołu, jako wiersze.

PARAMETERS [Sales for which year?] LONG;

TRANSFORM Sum([Order Details].Quantity * ([Order Details].UnitPrice - ([Order Details].Discount / 100) * [Order Details].UnitPrice)) AS Sales

SELECT ProductName FROM Orders

INNER JOIN (Products INNER JOIN [Order Details] ON Products.ProductID = [Order Details].ProductID)

ON Orders.OrderID = [Order Details].OrderID

WHERE DatePart("yyyy", OrderDate) = [Sales for which year?]

GROUP BY ProductName

ORDER BY ProductName

PIVOT DatePart("m", OrderDate);

W następnym przykładzie tworzona jest nowa kwerenda krzyżowa pokazująca kwartalną sprzedaż produktów dla każdego dostawcy, w roku określonym przez użytkownika. Kwartały są zwracane od strony lewej do prawej, jako kolumny, a nazwy dostawców od góry do dołu, jako wiersze.

PARAMETERS [Sales for which year?] LONG;

TRANSFORM Sum([Order Details].Quantity * ([Order Details].UnitPrice - ([Order Details].Discount / 100) * [Order Details].UnitPrice)) AS Sales

SELECT CompanyName FROM Orders

INNER JOIN ((Suppliers INNER JOIN Products ON Suppliers.SupplierID = Products.SupplierID)

INNER JOIN [Order Details] ON Products.ProductID = [Order Details].ProductID)

ON Orders.OrderID = [Order Details].OrderID

WHERE DatePart("yyyy", OrderDate) = [Sales for which year?]

GROUP BY CompanyName

ORDER BY CompanyName

PIVOT "Qtr " & DatePart("q", OrderDate) In ('Qtr 1', 'Qtr 2', 'Qtr 3', 'Qtr 4');


UPDATE, instrukcja - przykład (Microsoft Access)
UPDATE, instrukcja – przykład (Microsoft Access)

Aby przetestować poniższe przykłady w programie Microsoft Access, należy najpierw utworzyć nową kwerendę w przykładowej bazie danych "Northwind". Następnie należy zamknąć okno dialogowe Pokaż tabelę, bez określania tabeli ani kwerendy, przełączyć się do widoku SQL, wkleić wybrany przykład w oknie SQL i wykonać kwerendę.

Ostrzeżenie   Przykłady te wprowadzają zmiany w przykładowej bazie danych "Northwind". Przed ich wykonaniem warto utworzyć kopię zapasową tej bazy danych.

W poniższym przykładzie ulega zmianie wartość w polu "ReportsTo" na 5 dla wszystkich rekordów pracowników (Employees) zawierających w polu "ReportsTo" wartość 2:

UPDATE Employees SET ReportsTo = 5 WHERE ReportsTo = 2;

W następnym przykładzie ulega zwiększeniu o 10 procent cena jednostkowa (UnitPrice) wszystkich produktów o wartości "No" pola "Discontinued", pochodzących od dostawcy #8:

UPDATE Products SET UnitPrice = UnitPrice * 1.1

WHERE SupplierID = 8 AND Discontinued = No;

W poniższym przykładzie ulega zmniejszeniu o 5 procent cena jednostkowa wszystkich produktów o wartości "No" pola "Discontinued", dostarczanych przez firmę "Tokyo Traders". Tabele "Products" ("Produkty") i "Suppliers" ("Dostawcy") są powiązane relacją wiele-do-jednego.

UPDATE Suppliers INNER JOIN Products

ON Suppliers.SupplierID = Products.SupplierID SET UnitPrice = UnitPrice * .95

WHERE CompanyName = 'Tokyo Traders' AND Discontinued = No;


UNION, operacja - przykład (Microsoft Access)
UNION, operacja – przykład (Microsoft Access)

Aby przetestować poniższe przykłady w programie Microsoft Access, należy najpierw utworzyć nową kwerendę w przykładowej bazie danych "Northwind". Następnie należy zamknąć okno dialogowe Pokaż tabelę, bez określania tabeli ani kwerendy, przełączyć się do widoku SQL, wkleić wybrany przykład w oknie SQL i wykonać kwerendę.

W poniższym przykładzie zwracane są nazwy (CompanyName) i miasta (City) wszystkich dostawców (Suppliers) i klientów (Customers) w Brazylii:

SELECT CompanyName, City FROM Suppliers

WHERE Country = 'Brazil'

UNION SELECT CompanyName, City FROM Customers

WHERE Country = 'Brazil';

W następnym przykładzie zwracane są nazwy i miasta wszystkich dostawców i klientów znajdujących się w Brazylii:

SELECT CompanyName, City, 'Supplier' AS Source

FROM Suppliers

WHERE Country = 'Brazil'

UNION SELECT CompanyName, City, 'Customer'

FROM Customers

WHERE Country = 'Brazil'

ORDER BY City, Source;

W poniższym przykładzie zwracane są nazwy i identyfikatory wszystkich dostawców i klientów. Założono, że w każdej tabeli istnieje taka sama liczba kolumn.

TABLE Customers UNION TABLE Suppliers;


Podkwerendy SQL - przykład (Microsoft Access)
Podkwerendy SQL – przykład (Microsoft Access)

Aby przetestować poniższe przykłady w programie Microsoft Access, należy najpierw utworzyć nową kwerendę w przykładowej bazie danych "Northwind". Następnie należy zamknąć okno dialogowe Pokaż tabelę, bez określania tabeli ani kwerendy, przełączyć się do widoku SQL, wkleić wybrany przykład w oknie SQL i wykonać kwerendę.

W poniższym przykładzie pokazywane są wszystkie zamówienia (Orders) o wartości 0 pola "Discount", których całkowita wartość jest większa niż średnia wartość zamówienia:

SELECT OrderID, (UnitPrice * Quantity) As OrderTotal FROM [Order Details]

WHERE Discount = 0 AND (UnitPrice * Quantity) > ALL(SELECT Avg(UnitPrice * Quantity)

FROM [Order Details]);

W następnym przykładzie wyświetlona zostaje nazwa (ProductName) i cena jednostkowa (UnitPrice) każdego produktu, którego cena jest taka sama, jak cena produktu o nazwie "Aniseed Syrup":

SELECT ProductName, UnitPrice FROM Products

WHERE UnitPrice = (SELECT UnitPrice FROM [Products]

WHERE ProductName = 'Aniseed Syrup');

W poniższym przykładzie wyświetlane są nazwy firm (CompanyName) i kontaktów (ContactTitle) każdego klienta, który złożył zamówienie w drugim kwartale 1995 roku:

SELECT ContactName, CompanyName, ContactTitle, Phone FROM Customers

WHERE CustomerID IN (SELECT CustomerID FROM Orders WHERE OrderDate

BETWEEN #04/1/95# AND #06/30/95#);

W następnym przykładzie wybierane są nazwy wszystkich pracowników, którzy złożyli przynajmniej jedno zamówienie. Można to również zrobić za pomocą operacji INNER JOIN.

SELECT FirstName, LastName FROM Employees

WHERE EXISTS (SELECT OrderID FROM Orders

WHERE Orders.EmployeeID = Employees.EmployeeID);


Like, operator - przykład (Microsoft Access)
Like, operator – przykład (Microsoft Access)

W poniższym przykładzie zwracana jest lista pracowników (Employees), których nazwiska (LastName) zaczynają się na litery od A do D. Aby przetestować poniższy przykład w programie Microsoft Access, należy najpierw utworzyć nową kwerendę w przykładowej bazie danych "Northwind". Następnie należy zamknąć okno dialogowe Pokaż tabelę, bez określania tabeli ani kwerendy, przełączyć się do widoku SQL, wkleić wybrany przykład w oknie SQL i wykonać kwerendę.

SELECT * FROM Employees WHERE LastName Like '[A-D]*';


Instrukcja Option Private Module nie jest dozwolona w module klasy (Microsoft Access)

Moduły formularzy i moduły raportów programu Microsoft Access są modułami klasy. W module formularza i raportu nie wolno umieszczać instrukcji Option Private Module.


#Const, dyrektywa (Microsoft Access)

W programie Microsoft Access można zdefiniować publiczną stałą kompilacji warunkowej w sekcji deklaracji modułu. Publiczną stałą kompilacji można zastosować do wszystkich modułów w bieżącej bazie danych, ale nie w innych bazach danych.

Można również zadeklarować publiczną stałą kompilacji klikając polecenie Opcje w menu Narzędzia, a następnie klikając kartę Zaawansowane. Stałą tą należy wpisać w polu Argumenty kompilacji warunkowej.

W polu Argumenty kompilacji warunkowej można na przykład wpisać następujące wyrażenie:

conDebug = 1

Publicznej stałej kompilacji można użyć w kodzie każdego modułu. Można na przykład utworzyć konstrukcję #If...Then...#Else służącą do opcjonalnego wykonywania kodu analizy programu.

#If conDebug = 1 Then

.	' Run debug code.

.

.

#Else

.	' Run streamlined code.

.

.

#End If

Aby utworzyć wiele stałych kompilacji warunkowej, należy zadeklarować je w osobnych wierszach w sekcji deklaracji. W polu Argumenty kompilacji warunkowej należy je oddzielić dwukropkiem. Można na przykład wpisać następujące stałe kompilacji warunkowej w polu Argumenty kompilacji warunkowej:

conActiveLanguage = 1 : conDebug = 1

Można użyć operatora logicznego do połączenia obu stałych w konstrukcji #If...Then...#Else. W poniższym przykładzie pierwsza część kodu jest wykonywana, gdy obie stałe mają wartość 1, co oznacza, że wyrażenie zawierające te stałe jest prawdziwe

#If (conActiveLanguage = 1 And conDebug = 1) Then

.	' Run debug code for the active language version.

.

.

#Else

.	' Run another code segment.

.

.

#End If

Jeśli wartości tych dwóch stałych są różne, wykonywany jest kod znajdujący się w części #Else konstrukcji. Aby sterować tym, który blok kodu ma być wykonywany, wystarczy po prostu zmienić wartości stałych.

Uwagi

•	Stała kompilacji warunkowej jest zawsze wyliczana w oparciu o metodę tekstową porównywania ciągów znaków. Jest to równoważne umieszczeniu w module instrukcji Option Compare Text i ma miejsce nawet wtedy, gdy w module znajduje się instrukcja Option Compare Database.

•	Podczas pisania kodu kompilacji warunkowej wygodniej jest pracować z pojedynczymi procedurami modułu niż ze wszystkimi na raz. Sposób wyświetlania kodu można ustawić klikając polecenie Opcje w menu Narzędzia, a następnie klikając kartę Moduł. W obszarze Widok kodu należy wyczyścić pole wyboru Widok całego modułu.


Choose, funkcja (Microsoft Access)

Można również użyć funkcji Choose w formancie wyliczanym formularza lub raportu programu Microsoft Access. Można na przykład użyć funkcji Choose, aby ustawić wartość formantu na podstawie wartości innego pola. Należy w tym celu ustawić właściwość ControlSource (ŹródłoFormantu) formantu na wyrażenie zawierające funkcję Choose. Wyrażenia przedstawionego w poniższym przykładzie można użyć do ustawienia właściwości ControlSource formantu opartego na wartości pola o nazwie "ShipVia" tabeli "Orders".

=Choose([ShipVia], "Speedy", "United", "Federal")

W powyższym przykładzie, jeśli pole "ShipVia" zawiera wartość1, funkcja Choose zwraca pierwszy ciąg znaków, "Speedy". Jeśli zawiera ono wartość 2, funkcja zwraca drugi ciąg znaków, "United" itd. Jeśli pole "ShipVia" zawiera wartość 0, funkcja Choose zwraca wartość Null.

W następnym przykładzie zostało pokazane, jak można zapewnić, że zwracany będzie ciąg znaków nawet wtedy, gdy pole zawiera wartość 0.

=Choose([ShipVia] + 1, "none", "Speedy", "United", "Federal")

Uwaga   Aby w module Visual Basic zwrócić wartość wybraną z zestawu kilku możliwości, można użyć instrukcji Select Case, posiadającej większe możliwości.


IIf, funkcja (Microsoft Access)

Można również użyć funkcji IIf (ang. "immediate if" – natychmiastowe if) w formancie wyliczanym formularza lub raportu programu Microsoft Access. Funkcji IIf można użyć do wyliczenia wyrażenia i zwrócenia jednej z dwóch wartości, w zależności od tego, czy wartością wyrażenia jest True (–1) czy False (0). Można na przykład użyć funkcji IIf do sprawdzenia, czy wartością pola w formularzu jest Null. Jeśli tak, funkcja może zwracać pusty ciąg znaków, a jeśli nie – zawartość pola.

W poniższym przykładzie sprawdzane jest pole "ShipCountry" tabeli "Orders". Jeśli wartością tego pola jest Null, zostaje zwrócony pusty ciąg znaków.

=IIf(IsNull(Forms!Orders![ShipCountry]), "", Forms!Orders![ShipCountry])

W kodzie języka Visual Basic wyliczane są obie części funkcji Iif, tzn. część_true i częśćfalse, mimo iż zwracana jest tylko jedna z nich. W formularzu lub raporcie programu Microsoft Access, wyliczana jest tylko odpowiednia z części część_true i częśćfalse funkcji IIf. Dlatego nie trzeba się niepokoić niepożądanymi efektami ubocznymi wynikającymi z wyliczania obu argumentów, gdy funkcja IIf jest używana w formancie wyliczanym, wyrażeniu kwerendy lub makrze.

Uwaga   Funkcja Nz programu Microsoft Access konwertuje wartości Null na zero, ciąg znaków zerowej długości lub inną wartość określoną przez użytkownika. Jeśli dane wyrażenie obsługuje wartości Null, można używać funkcji Nz jako alternatywy dla funkcji IIf.

Funkcja IIf jest bardziej użyteczna w wyrażeniach formularzy i raportów, niż w kodzie Visual Basic, gdzie istnieje instrukcja If...Then...Else o większych możliwościach.


Switch, funkcja (Microsoft Access)

Można również użyć funkcji Switch w formancie wyliczanym formularza lub raportu programu Microsoft Access. Można na przykład użyć funkcji Switch, aby ustawić wartość formantu na podstawie wartości innego pola. Należy w tym celu ustawić właściwość ControlSource (ŹródłoFormantu) formantu na wyrażenie zawierające funkcję Switch.

W poniższym przykładzie funkcja Switch zwraca ciąg znaków będący nazwą spedytora na podstawie wartości pola "Freight" ("Fracht"). Jeśli wartość pola "Freight" jest mniejsza od $25, funkcja Switch zwraca ciąg znaków "Speedy"; jeśli zawiera się między $25 a $50, funkcja Switch zwraca ciąg znaków "United", a jeśli jest większa od $50, funkcja Switch zwraca ciąg znaków "Federal".

=Switch([Freight] < 25, "Speedy", ([Freight] >= 25 and [Freight] <= 50), "United", [Freight] > 50, "Federal")

Uwaga   Aby w module Visual Basic zwrócić wartość wybraną z zestawu kilku możliwości, można użyć instrukcji Select Case, posiadającej większe możliwości.


Fix, funkcja (Microsoft Access)

Jeśli funkcja Fix jest używana do utworzenia nowego pola w kwerendzie tworzącej tabelę, typem danych nowego pola będzie dbDouble. Typ danych można sprawdzić używając właściwości Type obiektów dostępu do danych (DAO).


Choose, funkcja – przykład (Microsoft Access)

Funkcji Choose można użyć do utworzenia formantu wyliczanego, którego wartość jest określana przez wartość pola w tabeli bazy danych. Załóżmy na przykład, że istnieje tabela "Shippers" ("Dostawcy") zawierająca pole o nazwie "ShipperID" ("IDDostawcy"). Można na formularzu utworzyć formant wyliczany wyświetlający nazwę dostawcy w oparciu o wartość pola "ShipperID".

=Choose([ShipperID], "Speedy", "United", "Federal")


DateAdd, funkcja – przykład (Microsoft Access)

W poniższym przykładzie zostało pokazane, jak używając funkcji DateAdd utworzyć formant wyliczany wyświetlający datę dostarczenia zamówienia – w tym wypadku o 30 dni późniejszą od daty "OrderDate" ("DataZamówienia"). Załóżmy, że istnieje formularz utworzony na podstawie tabeli "Orders" ("Zamówienia") z polem o nazwie "OrderDate". Można utworzyć jeszcze jedno pole tekstowe wyświetlające datę dostarczenia, ustawiając właściwość ControlSource (ŹródłoFormantu) tego pola tekstowego, jak w poniższym przykładzie.

= DateAdd("d", 30, [OrderDate])


DateDiff, funkcja – przykład (Microsoft Access)

W poniższym przykładzie funkcja DateDiff została użyta do obliczenia liczby tygodni od początku roku do bieżącego dnia oraz liczby dni od 1 lutego 1995.

Debug.Print DateDiff("ww", "1-1", Now())

Debug.Print DateDiff("y", #1-Feb-1995#, Now())

W następnym przykładzie zostało pokazane, jak użyć funkcji DateDiff w wyrażeniu kwerendy. Załóżmy, że istnieje tabela "Orders" ("Zamówienia") zawierająca pola "OrderDate" ("DataZamówienia") i "ShippedDate" ("DataWysyłki"). Można utworzyć w kwerendzie pole wyliczane wyświetlające czas, jaki upłynął między złożeniem każdego zamówienia a jego wysyłką. W oknie kwerendy należy utworzyć nową kwerendę dodając tabelę "Orders" i przeciągając pole "OrderID" do siatki projektu kwerendy. W pustej rubryce Pole należy wpisać poniższy wiersz kodu, aby utworzyć formant wyliczany.

DaysElapsed: DateDiff("y", [OrderDate], [ShippedDate])


DatePart, funkcja – przykład (Microsoft Access)

W poniższym przykładzie funkcja DatePart została użyta do określenia kryteriów dla kwerendy wybierającej. Przypuśćmy, że ma być utworzona kwerenda oparta na tabeli "Orders" ("Zamówienia") wyświetlająca listę wszystkich zamówień złożonych w pierwszym kwartale 1996 roku. Zakładając, że tabela "Orders" zawiera pola "OrderID" i "OrderDate", można przeciągnąć pole "OrderID" do pierwszej rubryki w siatce projektu kwerendy i wpisać poniższy kod w rubryce Kryteria poniżej.

(DatePart("q", [OrderDate]) = 1) and (DatePart("yyyy", [OrderDate]) = 1996)


IIf, funkcja – przykład (Microsoft Access)

W poniższym przykładzie funkcja IIf została użyta do wyliczenia wartości pola "OrderAmount" i zwrócenia słowa "Large", jeśli wartość ta jest większa od 1000; w przeciwnym wypadku zwracane jest słowo "Small". Można wpisać poniższe wyrażenie we właściwości ControlSource (ŹródłoFormantu) formantu wyliczanego.

= IIf([OrderAmount] > 1000, "Large", "Small")


Partition, funkcja – przykład (Microsoft Access)

Funkcji Partition można użyć zarówno w siatce projektu kwerendy, jak i w widoku SQL okna kwerendy. W siatce projektu kwerendy funkcji Partition można użyć w polu wyliczanym lub do określenia kryteriów dla kwerendy wybierającej.

W poniższym przykładzie zostało pokazane, jak można użyć funkcji Partition do utworzenia pola wyliczanego pokazującego liczbę rekordów w określonym zakresie. Załóżmy, że istnieje tabela "Orders" ("Zamówienia") zawierająca pole "Freight" ("Fracht"). W oknie kwerendy należy utworzyć nową kwerendę podsumowującą przez dodanie tabeli "Orders" i kliknięcie przycisku Podsumowanie na pasku poleceń Kwerenda. Następnie należy przeciągnąć pole "Freight" do pierwszej rubryki Pole w siatce projektu kwerendy i ustawić wartość rubryki Podsumowanie na "Count". W następnej rubryce Pole należy wpisać poniższe wyrażenie.

Range: Partition([Freight], 0, 1000, 50)

Rubrykę Podsumowanie poniżej tego pola należy ustawić na "Grupuj według", a następnie wykonać kwerendę. Funkcja Partition zwraca jedenaście zakresów (0:99, 100:199, 200:299, itd). Kwerenda pokazuje liczbę zamówień o kosztach wysyłki mieszczących się w każdym z zakresów.

W następnym przykładzie zostało pokazane, jak można użyć funkcji Partition w widoku SQL okna kwerendy. Tworzona jest w nim kwerenda krzyżowa wyliczająca pole "Freight" ("Fracht") tabeli "Orders" ("Zamówienia"). Następnie wyliczana jest liczba zamówień każdego klienta, dla których koszt wysyłki mieści się w jednym z kilku zakresów wartości. Zakresy te zdefiniowane są przez argumenty funkcji Partition: start = 0, stop = 1000, interval = 50.

Należy wpisać poniższe wyrażenie w widoku SQL. Po uruchomieniu tej kwerendy, każdy zakres pojawi się jako nagłówek kolumny.

TRANSFORM Count(Orders.[OrderID]) AS [CountOfOrderID]

SELECT Orders.[CustomerID]

FROM Orders

GROUP BY Orders.[CustomerID]

PIVOT Partition(Int([Freight]), 0, 1000, 50);


Switch, funkcja – przykład (Microsoft Access)

W poniższym przykładzie funkcja Switch została użyta do określenia właściwego języka dla podanego miasta w oparciu o wartości pól "ShipCountry" ("KrajOdbiorcy") i "ShipCity" ("MiastoOdbiorcy") tabeli "Orders" ("Zamówienia"). Można wpisać poniższe wyrażenie w formancie wyliczanym formularza lub raportu. Wyrażenie zostało pokazane w kilku wierszach, aby było bardziej czytelne; można je wprowadzić w jednym wierszu.

= Switch([ShipCity] = "Madrid", "Spanish", _

[ShipCity] = "Berlin", "German", _

[ShipCity] = "Torino", "Italian", _

[ShipCountry] = "France", "French", _

True, "English")

Jeśli miastem jest Madryt, funkcja Switch zwraca język "Spanish"; jeśli Berlin – "German" itd. Jeśli miasta nie ma na liście, a krajem jest Francja, funkcja zwraca język "French". W innym wypadku funkcja Switch zwraca język "English".


Add, metoda (Microsoft Access)

Elementy dodawane do kolekcji zdefiniowanej przez użytkownika są indeksowane automatycznie. Do każdego elementu można się odwoływać poprzez jego indeks. Jeśli na przykład istnieje kolekcja colThings zawierająca cztery obiekty, do jej trzeciego elementu można się odwołać za pomocą wyrażenia colThings(3).

Uwaga   Podczas dodawania elementów do obiektu Collection są one automatycznie indeksowane, począwszy od numeru 1. Należy o tym pamiętać przy określaniu pozycji elementów obiektu Collection. W kolekcjach wbudowanych indeksowanie elementów zazwyczaj rozpoczyna się od zera.

Podczas dodawania obiektu do kolekcji zdefiniowanej przez użytkownika, poza automatycznym indeksowaniem, istnieje możliwość określenia niestandardowego klucza. Tego klucza można używać w kolejnych odwołaniach do obiektu. Można na przykład dodać obiekt objMine z poniższym kluczem:

colThings.Add Item := objMine, key := ("A")

W kolejnych odwołaniach do tego obiektu kolekcji można używać bądź wyrażenia colThings(A), bądź indeksu numerycznego.


Collection, obiekt (Microsoft Access)

W programie Microsoft Access obiekt Collection może się składać z zestawu obiektów dowolnego typu. Obiekty wchodzące w skład obiektu Collection mogą być tego samego typu lub różnych typów.

Kolekcja zdefiniowana przez obiekt Collection może zawierać dowolną kombinację obiektów programu Microsoft Acces, obiektów dostępu do danych i obiektów innych aplikacji udostępniających swe obiekty programowi Microsoft Access. Do obiektu typu Collection można również dodać inny obiekt typu Collection.

Kolekcja może również zawierać obiekty zdefiniowane przez użytkownika tworzone w programie Microsoft Access. Można na przykład tworzyć obiekty zdefiniowane przez użytkownika z niestandardowymi metodami i właściwościami, za pomocą modułu formularza lub modułu raportu. Następnie można dodać je do kolekcji zdefiniowanej przez obiekt typu Collection i manipulować nimi jako jednym zestawem.


Tworzenie zmiennych obiektowych (Microsoft Access)

W programie Microsoft Access można zadeklarować zmienną obiektową jako Variant, jako Object lub jako konkretny typ obiektu. Konkretne typy obiektów obejmują obiekty programu Microsoft Access, obiekty dostępu do danych (DAO), obiekty Collection języka Visual Basic, instancje modułów klas i obiekty automatyzacji. Poniżej zostały pokazane przykładowe deklaracje konkretnych typów obiektów.

Dim frmOrderForm As Form	  ' Declares as Form object.

Dim tdfOrders As TableDef	  ' Declares as TableDef object.

Dim colThings As New Collection	  ' New Collection object.

Dim obj As New Class1  	  ' New instance of a class module.

Dim appXL As Excel.Application	  ' Automation object.

Uwaga   Użycie słowa kluczowego New w deklaracji zmiennej obiektowej tworzy nowy obiekt i automatycznie przypisuje go tej zmiennej, zwalniając z potrzeby użycia instrukcji Set.

Użycie słowa kluczowego Me w module formularza lub module raportu jest równoznaczne z odwołaniem się do formularza lub raportu, z którym moduł ten jest związany. Słowo kluczowe Me pozwala odwoływać się do bieżącego formularza bez konieczności podawania jego pełnej nazwy.

Aby na przykład zmienić kolor sekcji szczegółów formularza, można utworzyć w module standardowym poniższą procedurę.

Sub ChangeFormColor(frmCurrent As Form)

frmCurrent.Section(acDetail).BackColor = RGB(Rnd * 256, _

Rnd * 256, Rnd * 256)

End Sub

Procedurę tę można wywołać z modułu formularza przekazując jako argument słowo kluczowe Me. Słowo kluczowe Me reprezentuje formularz, z którego wywołano procedurę i w którym procedura te jest wykonywana.

Można na przykład wywołać poniższą procedurę ze zdarzenia Click sekcji formularza. Właściwość OnClick sekcji szczegółów należy ustawić na [Procedura zdarzenia] i utworzyć w module formularza poniższą procedurę Sub.

Private Sub Detail_Click()

ChangeFormColor Me

End Sub

Jeśli formularz nosi nazwę "Orders", procedurę tę można również wywołać za pomocą poniższej instrukcji.

ChangeFormColor Forms!Orders

Podstawową zaletą użycia słowa kluczowego Me jest fakt, że nie trzeba znać nazwy wywoływanego formularza.


Automatyzacja (Microsoft Access)

W programie Microsoft Access można utworzyć obiekt automatyzacji stosując słowo kluczowe New, aby zadeklarować zmienną obiektową, albo przez użycie funkcji CreateObject lub GetObject.

Program Microsoft Access obsługuje automatyzację na dwa różne sposoby. Program Microsoft Access jest składnikiem ActiveX, co oznacza, że można uzyskać dostęp do obiektów innych aplikacji i manipulować nimi w programie Microsoft Access, albo w innej aplikacji obsługującej automatyzację można manipulować obiektami programu Microsoft Access.

Uwaga   Zanim będzie można użyć programu Microsoft Access lub innej aplikacji jako składnika ActiveX, trzeba ustawić odwołanie do biblioteki obiektów tej aplikacji. Aby uzyskać informacje dotyczące ustawiania odwołań, należy znaleźć w indeksie Pomocy hasło "ustawianie odwołań".

Na przykład, jeśli program Microsoft Access jest używany jako składnik ActiveX, można korzystać z obiektów programu Microsoft Excel. Należy w tym celu w programie Microsoft Access utworzyć nowy obiekt programu Microsoft Excel i przypisać go zmiennej obiektowej. Można następnie ustawić jego właściwości i wywoływać jego metody, tak jak dla każdego innego obiektu. Nową instancję klasy Application programu Microsoft Excel można utworzyć na dwa sposoby:

Dim appXL As New Excel.Application

' lub

Dim appXL As Excel.Application

Set appXL = CreateObject("Excel.Application")

Jeśli program Microsoft Excel jest już uruchomiony, można użyć funkcji GetObject, aby przypisać zmiennej obiektowej bieżącą instancję klasy Application programu Microsoft Excel.

Dim appXL As Excel.Application

Set appXL = GetObject( , "Excel.Application")

Aby uzyskać więcej informacji na temat obiektu Application, należy znaleźć w indeksie Pomocy hasło “Application, obiekt”.

Jeśli program Microsoft Access jest używany jako składnik ActiveX, można manipulować obiektami programu Microsoft Access w innej aplikacji. Można na przykład w programie Microsoft Excel otworzyć formularz programu Microsoft Access i użyć go do obejrzenia danych skoroszytu programu Microsoft Excel. W poniższym kodzie przykładowym tworzony jest nowy obiekt programu Microsoft Access w programie Microsoft Excel.

Dim appAccess As New Access.Application

Jeśli program Microsoft Access jest już uruchomiony, można użyć funkcji GetObject, aby przypisać zmiennej obiektowej bieżącą instancję klasy Application programu Microsoft Access.


Usuwanie konfliktów nazewniczych (Microsoft Access)

Poniżej zostało przedstawionych kilka błędów związanych z konfliktami nazewniczymi, które mogą wystąpić w programie Microsoft Access.

Procedury i zmienne w modułach standardowych i modułach klas

W programie Microsoft Access, jeśli moduł standardowy i moduł klasy zawierają procedurę publiczną o tej samej nazwie, skrócone odwołanie do tej procedury zawsze spowoduje wywołanie procedury umieszczonej w module standardowym. Aby wywołać procedurę umieszczoną w module klasy, trzeba ją poprzedzić nazwą klasy. To samo dotyczy zmiennych o tych samych nazwach zdefiniowanych w modułach standardowych i modułach klas.

Na przykład, jeśli w module formularza o nazwie "Orders" znajduje się funkcja CountOrders, można ją wywołać w następujący sposób.

Form_Orders.CountOrders

Różne zakresy zmiennych o tej samej nazwie

Jeśli na poziomie modułu zostanie zadeklarowana zmienna o tej samej nazwie, co zmienna zadeklarowana na poziomie procedury w procedurze znajdującej się w tym module, trzeba poprzedzić zmienną na poziomie modułu nazwą tego modułu. Odnosi się to zarówno do modułów standardowych, jak i modułów klas.

Załóżmy na przykład, że zadeklarowano zmienną varScope jednocześnie na poziomie modułu i na poziomie procedury w module standardowym o nazwie "Important Functions". Do zmiennej na poziomie modułu można się wtedy odwołać poprzez [Important Functions].varScope.

Lepiej jest unikać zmiennych o tych samych nazwach w obrębie jednego modułu.

Nazwy stałych, zmiennych i procedur w modułach klas

Nie można nadać stałej, zmiennej ani procedurze w module formularza lub raportu nazwy takiej samej, jak nazwa metody lub właściwości tego formularza lub raportu. Na przykład, jeśli zostanie utworzona procedura Sub o nazwie "Name", program Microsoft Access wygeneruje błąd czasu kompilacji, ponieważ formularz posiada właściwość Name.


Zasięg i widoczność (Microsoft Access)

Zasięg na poziomie procedury odnosi się do zmiennych i stałych zadeklarowanych w obrębie procedury. Zasięg na poziomie prywatnego lub publicznego modułu odnosi się do zmiennych, stałych, typów zdefiniowanych przez użytkownika i instrukcji Declare umieszczonych na górze modułu. Odnosi się on również do procedur Sub, Function, Property Get, Property Let i Property Set zdefiniowanych w obrębie tego modułu. Aby uzyskać więcej informacji, należy znaleźć w indeksie Pomocy hasła "Declare, instrukcja" lub "Property, procedury".

W poniższej tabeli zostały przedstawione zasięgi różnych elementów dla dwóch różnych poziomów zasięgu.

Poziom zasięgu	Typ elementu	Zasięg	Uwagi
Poziom procedury	Zmienne	Prywatne
	Stałe	Prywatne
Poziom modułu	Zmienne	Prywatne, chyba że zadeklarowane jako Public
	Stałe	Prywatne, chyba że poprzedzone słowem kluczowym Public	Nie można zadeklarować stałej publicznej w obrębie modułu klasy.
	Instrukcje Declare	Publiczne, chyba że poprzedzone słowem kluczowym Private	Instrukcje Declare w obrębie modułu klasy muszą być poprzedzone słowem kluczowym Private.
	Typy zdefiniowane przez użytkownika	Publiczne, chyba że poprzedzone słowem kluczowym Private	Typy zdefiniowane przez użytkownika zadeklarowane w obrębie modułu klasy muszą być poprzedzone słowem kluczowym Private.
	Procedury	Publiczne, chyba że poprzedzone słowem kluczowym Private	Procedury zdarzeń w modułach formularzy i raportów są domyślnie prywatne.
Uwagi

•	Elementy publiczne zdefiniowane w module standardowym są dostępne dla wszystkich procedur w bieżącej bazie danych i w wywołujących bazach danych, chyba że moduł zawiera instrukcję Option Private Module. Jeśli moduł zawiera instrukcję Option Private Module, elementy publiczne są dostępne tylko dla procedur w bieżącej bazie danych.

•	Moduły klas są domyślnie prywatne. Elementy publiczne zdefiniowane w module klasy są dostępne tylko dla procedur w bieżącej bazie danych; nie są one nigdy dostępne dla wywołujących baz danych. Należy pamiętać, że moduły formularza i raportu są modułami klasy.

•	Zmienne, stałe, procedury, typy zdefiniowane przez użytkownika i instrukcje Declare zdefiniowane w bazie danych programu Microsoft Access nigdy nie są dostępne dla projektów w aplikacjach innych niż aplikacje programu Microsoft Access.

•	Aby odwołać się do zmiennej na poziomie modułu lub procedury w module klasy, należy ją poprzedzić nazwą klasy. Na przykład, jeśli została zadeklarowana zmienna na poziomie modułu varOrders w module klasy o nazwie Class1, to do tej zmiennej można się odwołać za pomocą Class1.varOrders. Trzeba to zrobić, jeśli zmienna ta jest używana w module standardowym lub w  oknie analizy programu. Jeśli nazwa formularza składa się z kilku słów, to nazwę klasy tego formularza należy ująć w nawias.

•	Zmienna na poziomie modułu zadeklarowana w module klasy pozostaje w zasięgu modułu tak długo, jak istnieje instancja tej klasy. Jeśli instancja klasy przestaje istnieć, zmienna wychodzi poza zasięg modułu.

•	W module standardowym, po zainicjowaniu zmiennej na poziomie modułu, zmienna ta zachowuje swoją wartość, niezależnie od tego, czy kod jest wykonywany, dopóki zmiennej tej nie zostanie przypisana inna wartość, kod nie zostanie zresetowany lub baza danych nie zostanie zamknięta.

•	Jeśli w module klasy i w module standardowym zostaną utworzone procedury o identycznych nazwach, zawsze wywoływana jest procedura z modułu standardowego, chyba że nazwa procedury zostanie poprzedzona nazwą klasy dla modułu klasy.


Date, funkcja (Microsoft Access)

Do formularza lub raportu można wstawić bieżącą datę klikając polecenie Data i godzina w menu Wstaw. Polecenie to tworzy w formularzu lub raporcie pole tekstowe i ustawia właściwość ControlSource (ŹrodłoFormantu) tego pola na wyrażenie zawierające funkcję Date. Postać tego wyrażenia zależy od ustawionego formatu wyświetlania daty. Polecenie to jest dostępne tylko w widoku "Projekt" formularza i w widoku "Projekt" raportu.

Można również użyć funkcji Date w wyrażeniu kwerendy lub w makrze. Jednak wszędzie z wyjątkiem modułu języka Visual Basic, nazwę funkcji należy uzupełnić nawiasami, jak w wyrażeniu Date().


Time, funkcja (Microsoft Access)

Do formularza lub raportu można wstawić bieżącą godzinę klikając polecenie Data i godzina w menu Wstaw. Polecenie to tworzy w formularzu lub raporcie pole tekstowe i ustawia właściwość ControlSource (ŹrodłoFormantu) tego pola na wyrażenie zawierające funkcję Time. Postać tego wyrażenia zależy od ustawionego formatu wyświetlania godziny. Polecenie to jest dostępne tylko w widoku "Projekt" formularza i w widoku "Projekt" raportu.

Można również użyć funkcji Time w wyrażeniu kwerendy lub w makrze. Jednak wszędzie z wyjątkiem modułu języka Visual Basic, nazwę funkcji należy uzupełnić nawiasami, jak w wyrażeniu Time().


Date, funkcja – przykład (Microsoft Access)

Funkcji Date można użyć w formancie wyliczanym ustawiając jego właściwość ControlSource (Źródło formantu) następująco.

= Date()

Funkcji Date można również użyć do ustawienia kryteriów dla kwerendy. Załóżmy na przykład, że istnieje tabela "Orders" zawierająca pole "OrderDate". Można utworzyć kwerendę dla tabeli "Orders" zwracającą wszystkie rekordy, których pole "OrderDate" zawiera się między datą 4-1-95 a datą bieżącą. Do komórki "Kryteria" pod polem "OrderDate" należy wpisać poniższe wyrażenie.

Between #4-1-95# and Date()


DateSerial, Day, Month i Year, funkcje – przykład (Microsoft Access)

W poniższym przykładzie została użyta funkcja DateSerial wraz z funkcjami Year, Month i Day, aby zwrócić liczbę dni w miesiącu. Do funkcji DaysInMonth można przekazać zarówno datę (Date), jak i ciąg znaków (String).

Function DaysInMonth(dteInput As Date) As Integer

Dim intDays As Integer

' Add one month, subtract dates to find difference.

intDays = DateSerial(Year(dteInput), Month(dteInput) + 1, Day(dteInput)) _

- DateSerial(Year(dteInput), Month(dteInput), Day(dteInput))

DaysInMonth = intDays

Debug.Print intDays

End Function

W poniższej procedurze Sub zostało pokazanych kilka sposobów wywołania funkcji DaysInMonth.

Sub CallDaysInMonth()

Dim intDays As Integer

intDays = DaysInMonth(#4/1/96#)

intDays = DaysInMonth("4-1-96")

intDays = DaysInMonth("April 1, 1996")

End Sub


Now, funkcja – przykład (Microsoft Access)

Funkcji Now można użyć w formancie wyliczanym, aby otrzymać bieżącą datę i godzinę systemową. Można na przykład utworzyć pole tekstowe i ustawić jego właściwość ControlSource (ŹródłoFormantu) na następujące wyrażenie:

= Now()


Time, funkcja – przykład (Microsoft Access)

Funkcji Time można użyć w formancie wyliczanym, aby otrzymać bieżącą godzinę systemową. Można na przykład utworzyć pole tekstowe i ustawić jego właściwość ControlSource (ŹródłoFormantu) na następujące wyrażenie:

= Time()


Timer, funkcja – przykład (Microsoft Access)

Funkcji Timer można użyć do pomiaru czasu trwania operacji lub zdarzeń w aplikacji programu Microsoft Access. Funkcję Timer należy umieścić w kodzie bezpośrednio przed i po operacji, której czas trwania ma być zmierzony. W poniższej procedurze przykładowej została użyta nazwa kwerendy jako jej argument, następnie obliczany jest czas wykonania kwerendy.

Sub QueryTimer (strQueryName As String)

Dim sngStart As Single, sngEnd As Single

Dim sngElapsed As Single

sngStart = Timer	' Get start time.

DoCmd.OpenQuery strQueryName, acNormal	' Run query.

sngEnd = Timer	' Get end time.

sngElapsed = Format(sngEnd - sngStart, "Fixed")	' Elapsed time.

MsgBox ("The query " & strQueryName & " took " & sngElapsed _

& " seconds to run.")

End Sub


Const, instrukcja (Microsoft Access)

Stała w module standardowym programu Microsoft Access jest domyślnie prywatna. Jeśli jednak stała zostanie poprzedzona słowem kluczowym Public, staje się ona dostępna w innych modułach bieżącej bazy danych, jak również w modułach odwołujących się do bieżącej bazy danych.

Stała zdefiniowana w module klasy jest zawsze prywatna dla tego modułu, nawet jeśli zostanie poprzedzona słowem kluczowym Public.


Declare, instrukcja (Microsoft Access)

W programie Microsoft Access instrukcje Declare są domyślnie publiczne. W module standardowym publiczna instrukcja Declare jest dostępna dla wszystkich procedur zarówno w bieżącej bazie danych, jak i w bazach danych odwołujących się do niej. Instrukcję Declare można poprzedzić słowem kluczowym Private, co powoduje, że staje się ona niedostępna poza modułem bieżącym.

Umieszczając instrukcję Declare w module klasy trzeba ją poprzedzić słowem kluczowym Private. Jeśli nie zostanie użyte słowo kluczowe Private, w programie Microsoft Access generowany jest błąd czasu kompilacji.


Dim, instrukcja (Microsoft Access)

Słowa kluczowego New można użyć z instrukcją Dim do zadeklarowania zmiennej obiektowej określonego typu. Użycie słowa kluczowego New w deklaracji zmiennej automatycznie powoduje utworzenie nowego obiektu i przypisanie go zmiennej obiektowej. Jeśli zmienna obiektowa zostanie zadeklarowana za pomocą słowa kluczowego New, nie trzeba używać instrukcji Set.

Za pomocą słowa kluczowego New można tworzyć zmienne obiektowe wskazujące dowolny typ obiektu. Słowo kluczowe New jest najczęściej używane do utworzenia nowej instancji klasy lub nowego obiektu Collection, jak to zostało pokazane w poniższym przykładzie.

' Create object variable and point it to new object.

Dim colInstances As New Collection

W następnym przykładzie zostało pokazane, jak użyć słowa kluczowego New do utworzenia nowej instancji klasy.

' Create new instance of class module.

Dim obj As New Class1

Słowa kluczowego New można użyć do utworzenia nowego obiektu programu Microsoft Access z kilku składników obsługujących automatyzację. Należy sprawdzić w dokumentacji składnika, czy obsługuje on tę składnię.

Na przykład, zakładając, że zostało ustanowione odwołanie do biblioteki typów programu Microsoft Access, można z innego składnika utworzyć nowy obiekt Application programu Microsoft Access, za pomocą poniższego kodu.

Dim appAccess As New Access.Application


Function, instrukcja (Microsoft Access)

W programie Microsoft Access publiczna procedura Function jest dostępna dla wszystkich innych procedur zarówno w bieżącej bazie danych, jak i w odwołujących się do niej bazach danych programu Microsoft Access. Nie jest ona jednak dostępna w innych aplikacjach.

Jeśli procedura Function zostanie zadeklarowana w dowolnym module jako prywatna, przez poprzedzenie jej słowem kluczowym Private, procedura ta jest dostępna tylko dla innych procedur w tym samym module.

Jeśli procedura Function zostanie zadeklarowana jako publiczna w module prywatnym, takim jak moduł klasy, procedura ta jest dostępna dla wszystkich innych procedur w tej samej bazie danych, ale nie jest dostępna dla innych baz danych programu Microsoft Access.


Option Compare, instrukcja (Microsoft Access)

W programie Microsoft Access wszystkie moduły zawierają domyślnie w sekcji deklaracji instrukcję Option Compare Database. Instrukcja ta ustawia metodę porównywania ciągów znaków dla modułu na metodę określoną dla całej bazy danych.

Metodę porównywania ciągów znaków można zmienić dla wszystkich nowych baz danych klikając polecenie Opcje w menu Narzędzia i zmieniając wartość pola Domyślny porządek sortowania baz danych na karcie Ogólne okna dialogowego Opcje. Wartością domyślną tego pola jest wartość "Ogólny", określająca sortowanie według alfabetu angielskiego bez rozróżniania wielkich i małych liter.

Zmiana opcji Domyślny porządek sortowania baz danych nie wpływa na metodę porównywania ciągów znaków dla bieżącej bazy danych. Wpływa ona tylko na bazy danych utworzone po zmianie tej opcji.

Aby w pojedynczym module określić metodę sortowania różną od metody obowiązującej w bazie danych, należy zastąpić instrukcję Option Compare Database instrukcją Option Compare Binary lub Option Compare Text. Instrukcja Option Compare Binary porównuje ciągi znaków korzystając z wartości kodu ASCII odpowiadających znakom, a więc z rozróżnianiem wielkich i małych liter. W przypadku zastosowania instrukcji Option Compare Text wielkie i małe litery nie są rozróżniane.

Uwaga   Jeśli używana jest właściwość Bookmark obiektu Recordset, w sekcji Deklaracje modułu trzeba umieścić instrukcję Option Compare Binary. Wartość ustawiana i zwracana przez właściwość Bookmark jest tablicą typu Variant danych typu Byte. Użycie metody porównywania nie rozróżniającej małych i wielkich liter może spowodować, że właściwość Bookmark będzie wskazywać niewłaściwe rekordy.


Option Explicit, instrukcja (Microsoft Access)

W programie Microsoft Access istnieje możliwość automatycznego wstawiania instrukcji Option Explicit do wszystkich nowych modułów. Należy kliknąć polecenie Opcje w menu Narzędzia i na karcie Moduł zaznaczyć opcję Żądanie deklaracji zmiennych.

Po ustawieniu tej opcji, będzie ona obowiązywać we wszystkich nowo tworzonych i otwieranych bazach danych programu Microsoft Access.

Uwaga   Po ustawieniu tej opcji, będzie ona obowiązywać tylko w nowych modułach. W modułach istniejących należy umieścić instrukcję Option Explicit w sekcji deklaracji lub w otwartym module kliknąć polecenie Opcje w menu Narzędzia i na karcie Moduł zaznaczyć opcję Żądanie deklaracji zmiennych.


Option Private, instrukcja (Microsoft Access)

Umieszczenie instrukcji Option Private w module standardowym programu Microsoft Access powoduje, że wszystkie zmienne i procedury publiczne tego modułu są wciąż dostępne dla wszystkich innych procedur w bieżącej bazie danych, ale przestają być dostępne dla procedur w innych bazach danych.

Ponieważ moduły klas są domyślnie prywatne, umieszczenie instrukcji Option Private w module klasy generuje błąd.


Property Get, instrukcja (Microsoft Access)

Instrukcji Property Get można użyć do zdefiniowania procedury właściwości zwracającej wartość właściwości. Przy tworzeniu właściwości w module klasy korzysta się na ogół z pary instrukcji Property Let i Property Get. Można na przykład zdefiniować w module klasy procedurę Property Let, aby ustawić nową właściwość i procedurę Property Get, aby zwrócić wartość tego ustawienia. Gdy tworzy się nową instancję klasy, procedury właściwości zachowują się jak niestandardowe właściwości nowego obiektu. Więcej informacji o modułach klas można znaleźć w indeksie Pomocy pod hasłem “moduły klas”.

Procedury właściwości w module klasy domyślnie są publiczne i są dostępne dla procedur w innych modułach bieżącej bazy danych, o ile nie zostaną poprzedzone słowem kluczowym Private.


Property Let, instrukcja (Microsoft Access)

Instrukcji Property Let można użyć do zdefiniowania procedury właściwości, która przypisuje wartość właściwości. Przy tworzeniu właściwości w module klasy korzysta się na ogół z pary instrukcji Property Let i Property Get. Można na przykład zdefiniować w module klasy procedurę Property Let, aby ustawić nową właściwość i procedurę Property Get, aby zwrócić wartość tego ustawienia. Gdy tworzy się nową instancję klasy, procedury właściwości zachowują się jak niestandardowe właściwości nowego obiektu. Więcej informacji o modułach klas można znaleźć w indeksie Pomocy pod hasłem “moduły klas”.

Procedury właściwości w module klasy domyślnie są publiczne i są dostępne dla procedur w innych modułach bieżącej bazy danych, o ile nie zostaną poprzedzone słowem kluczowym Private.


Public, instrukcja (Microsoft Access)

Zmienne na poziomie modułu domyślnie są prywatne w tym module. Aby zadeklarować zmienną jako publiczną, należy użyć instrukcji Public.

Zmienne na poziomie modułu zadeklarowane w module standardowym z użyciem instrukcji Public są dostępne dla wszystkich innych procedurach wszystkich modułów zarówno w bieżącej bazie danych, jak i w odwołujących się do niej bazach danych programu Microsoft Access. Nie jest ona jednak dostępna w innych aplikacjach.

Jeśli zmienna publiczna została zadeklarowana w module standardowym zawierającym instrukcję Option Private lub w module klasy, zmienna ta jest dostępna we wszystkich procedurach bieżącej bazy danych, ale nie w procedurach innych baz danych.

Uwaga   Instrukcji Public nie można użyć w module klasy do zadeklarowania stałej, ciągu znaków o stałej długości ani tablicy. Ponadto, jeśli instrukcja Declare zostanie umieszczona w module klasy, trzeba ją poprzedzić słowem kluczowym Private. Więcej informacji na temat instrukcji Declare można znaleźć w indeksie Pomocy pod hasłem "Declare, instrukcja".


Sub, instrukcja (Microsoft Access)

W programie Microsoft Access procedura publiczna Sub w module standardowym jest dostępna dla wszystkich innych procedur wszystkich modułów zarówno w bieżącej bazie danych, jak i w odwołujących się do niej bazach danych programu Microsoft Access. Nie jest ona jednak dostępna w innych aplikacjach.

Jeśli procedura Sub zostanie zadeklarowana w dowolnym module jako prywatna, procedura ta jest dostępna tylko dla innych procedur w tym samym module.

Jeśli procedura Sub zostanie zadeklarowana jako publiczna w module prywatnym, takim jak moduł klasy, procedura ta jest dostępna dla wszystkich innych procedur w tej samej bazie danych, ale nie jest dostępna dla innych baz danych programu Microsoft Access.

Podczas tworzenia procedury zdarzenia dla formularza lub raportu tworzony jest automatycznie kod szczątkowy dla procedury Sub, która zostaje poprzedzona słowem kluczowym Private. Na przykład, aby zobaczyć moduł formularza, należy utworzyć na nowym formularzu nowy przycisk polecenia, ustawić jego właściwość OnClick (PrzyKliknięciu) na [Procedura zdarzenia] i kliknąć przycisk Buduj  [image]. Program Microsoft Access automatycznie wstawi do tego modułu poniższy kod.

Private Sub Command0_Click

End Sub

Następnie można wprowadzić kod, który ma być wykonywany, gdy wystąpi zdarzenie Click dla tego przycisku.


Type, instrukcja (Microsoft Access)

W programie Microsoft Access typy definiowane przez użytkownika są domyślnie publiczne. Nie można zdefiniować publicznego typu definiowanego przez użytkownika w module klasy. Aby zdefiniować typ definiowany przez użytkownika w module klasy, należy poprzedzić instrukcję Type słowem kluczowym Private. Jeśli nie zostanie użyte słowo kluczowe Private, w programie Microsoft Access generowany jest błąd czasu kompilacji.


Const, instrukcja – przykład (Microsoft Access)

W programie Microsoft Access nie można zadeklarować stałych publicznych w sekcji deklaracji modułu klasy. Stałe w module klasy muszą być prywatne. Można natomiast deklarować zarówno stałe publiczne, jak i prywatne w sekcji deklaracji modułu standardowego.

' In class module.

Const conCommission As Single = .08

' In standard module.

Const conErrorNumber As Integer = 91

Public Const conAddress As String = "8421 58th Avenue, College Park, MD"


Declare, instrukcja – przykład (Microsoft Access)

W programie Microsoft Access można użyć instrukcji Declare na poziomie modułu w module standardowym, aby zadeklarować odwołanie do zewnętrznej procedury w bibliotece dołączanej dynamicznie (DLL). Domyślnie instrukcja Declare jest publiczna. Umieszczając instrukcję Declare w module klasy, należy ją poprzedzić słowem kluczowym Private.

W poniższym przykładzie najpierw deklaruje się procedurę z biblioteki DLL, a następnie wywołuje ją z języka Visual Basic.

' In standard module.

Declare Sub MessageBeep Lib "User32" (ByVal intN As Integer)

' In class module.

Private Declare Sub MessageBeep Lib "User32" (ByVal intN As Integer)

' Once you have referenced procedure in DLL with Declare

' statement, you can call that procedure normally from code.

Sub SystemBeep(intBeeps As Integer, sngPause As Single)

Dim intI As Integer

Dim sngStart As Single

For intI = 1 To intBeeps

' Call system function.

Call MessageBeep(intBeeps)

' Get start time.

sngStart = Timer

' Pause between beeps.

Do While Timer < sngStart + sngPause

' Return control to operating system.

DoEvents

Loop

Next intI

End Sub


Nieprawidłowe użycie słowa kluczowego New (Microsoft Access)

W programie Microsoft Access moduły formularzy i moduły raportów są modułami klasy. Aby utworzyć nową instancję modułu formularza lub modułu raportu i przypisać ją zmiennej obiektowej, można użyć słowa kluczowego New.

Na przykład, aby utworzyć nową instancję modułu formularza o nazwie "Form_Orders", należy użyć słowa kluczowego New, jak w poniższym kodzie:

Dim frmOrdersObject As New Form_Orders


Stałe, ciągi znaków o stałej długości, tablice i instrukcje Declare nie mogą być publicznymi elementami modułu klasy (Microsoft
Stałe, ciągi znaków o stałej długości, tablice i instrukcje Declare nie mogą być publicznymi elementami modułu klasy (Microsoft Access)

W programie Microsoft Access moduły klas istnieją zarówno samodzielnie, jak i w powiązaniu z formularzami i raportami. Nie można deklarować publicznych stałych, ciągów znaków o stałej długości i instrukcji Declare w module formularza ani w module raportu. Trzeba poprzedzić taką deklarację słowem kluczowym Private.


Element już istnieje w tym formularzu (Microsoft Access)

W programie Microsoft Access nie można używać identyfikatora w module formularza i module raportu, jeśli ten identyfikator ma taką samą nazwę, jak metoda lub właściwość formularza lub raportu. Na przykład, ponieważ jedną z właściwości formularza jest RecordSource, poniższa procedura umieszczona w module formularza spowoduje błąd:

Sub RecordSource()	' Generates an error.

.	' Some code.

.

.

End Sub


DoEvents, funkcja (Microsoft Access)

W programie Microsoft Access funkcja DoEvents będzie zignorowana, jeśli zostanie użyta w:

•	Funkcji lub procedurze zdefiniowanej przez użytkownika, która wylicza pole w kwerendzie, formularzu lub raporcie.

•	Funkcji zdefiniowanej przez użytkownika, która tworzy listę wypełniającą pole kombi, pole listy lub obiekt OLE.

Jeśli funkcja DoEvents wystąpi w jednej z powyższych sytuacji, program Microsoft Access nie przekaże sterowania do systemu operacyjnego.


IsDate, funkcja – przykład (Microsoft Access)

W poniższym przykładzie użytkownik jest monitowany o wpisanie wartości typu ciąg znaków. Następnie funkcja IsDate zostaje użyta do sprawdzenia, czy ten ciąg znaków można konwertować na datę, po czym wyświetlany jest odpowiedni komunikat.

Sub CheckDate()

Dim strDate As String

strDate = InputBox("Enter string to display as a date.")

' Test variable.

If IsDate(strDate) Then

' If string is date, format and display in dialog.

MsgBox "The date is: " & Format(DateValue(strDate), "Long Date")

Else

MsgBox "The value you entered is not a date."

End If

End Sub


IsNull, funkcja – przykład (Microsoft Access)

W poniższym przykładzie funkcja IsNull zostaje użyta do sprawdzenia, czy wartością formantu jest Null. Jeśli tak, wyświetlany jest komunikat monitujący użytkownika o wprowadzenie danych. Jeśli wartością tą nie jest Null, wyświetlana jest wartość formantu.

Sub ControlValue(ctlText As Control)

Dim strMsg As String

' Check that control is text box.

If ctlText.ControlType = acTextBox Then

' If value of control is Null, prompt for data.

If IsNull(ctlText.Value) Then

strMsg = "No data in the field '" & ctlText.Name & "'." _

& vbCrLf & "Please enter data for this field now."

If MsgBox(strMsg, vbQuestion) = vbOK Then

Exit Sub

End If

' If value is not Null, display value.

Else

MsgBox (ctlText.Value)

End If

End If

End Sub


IsObject, funkcja – przykład (Microsoft Access)

W poniższym przykładzie funkcja IsObject została użyta do sprawdzenia, czy argument przekazany funkcji jest obiektem.

Sub CheckObject(varAny As Variant)

Dim varX as Variant

If IsObject(varAny) Then

Set varX = varAny

Else

varX = varAny

End If

End Sub


TypeName, funkcja – przykład (Microsoft Access)

W poniższym przykładzie tworzonych jest kilka zmiennych obiektowych. Zmienne te zostają następnie przekazane do funkcji TypeName.

Sub ObjectTypes()

Dim dbs As Database, tdf As TableDef

Dim fld As Field

' Get current database.

Set dbs = CurrentDb

' Return TableDef object pointing to Orders table.

Set tdf = dbs.TableDefs("Orders")

' Return Field object pointing to OrderDate field.

Set fld = tdf.Fields("OrderDate")

' Print value returned by TypeName for each object.

Debug.Print TypeName(dbs)

Debug.Print TypeName(tdf)

Debug.Print TypeName(fld)

End Sub


Stałe kompilatora (Microsoft Access)

Program Microsoft Access jest 32-bitowym środowiskiem projektowym. Wartością stałej kompilatora Win32 jest zawsze Prawda (-1), natomiast wartością stałej Win16 jest zawsze Fałsz (0).


MsgBox, funkcja (Microsoft Access)

W programie Microsoft Access funkcji MsgBox można użyć do utworzenia formatowanego komunikatu o błędzie podobnego do wbudowanych komunikatów o błędach wyświetlanych przez program Microsoft Access. Funkcja ta umożliwia stosowanie ciągu znaków jako argumentu monit składającego się z trzech części. Części te należy oddzielić znakiem "@".

W poniższym przykładzie wyświetlane jest formatowane okno dialogowe z podzielonym na części ciągiem znaków. Pierwsza część tekstu jest wyświetlana czcionką pogrubioną jako nagłówek. Druga część jest wyświetlana jako zwykły tekst poniżej tego nagłówka. Trzecia część jest wyświetlana jako zwykły tekst poniżej nagłówka "Solution", który funkcja tworzy automatycznie.

MsgBox "Wrong button!@This button doesn't work.@Try another.", _

vbOKOnly + vbExclamation

Uwaga   Aby w programie Microsoft Access wyświetlić okno komunikatu bez ikony, wystarczy pominąć wszelkie stałe oznaczające ikonę albo zastosować argument przyciski o wartości zero, tak jak w poniższym przykładzie.

MsgBox "No icons included.", 0


InputBox, funkcja (Microsoft Access)

W programie Microsoft Access niemożliwe jest otwarcie pliku Pomocy z okna dialogowego utworzonego za pomocą funkcji InputBox. Jeśli dla argumentów plik_pomocy i kontekst zostaną określone wartości, są one ignorowane, a przycisk Pomoc nie pojawia się w oknie. Jednak program Microsoft Access nie wygeneruje błędu.


MsgBox, funkcja – przykład (Microsoft Access)

W poniższym przykładzie funkcja MsgBox została użyta do utworzenia formatowanego komunikatu o błędzie w programie Microsoft Access. Należy zauważyć, że do oddzielenia poszczególnych części tekstu został zastosowany znak "@".

Sub CustomMessage()

Dim strMsg As String, strInput As String

' Initialize string.

strMsg = "Number outside range.@You entered a number that is " _

& "less than 1 or greater than 10.@Press OK to enter " _

& "the number again."

' Prompt user for input.

strInput = InputBox("Enter a number between 1 and 10.")

' Determine if user chose "Cancel".

If strInput <> "" Then

' Test value of user input.

Do While strInput < 0 Or strInput > 10

If MsgBox(strMsg, vbOKCancel, "Error!") = vbOK Then

strInput = InputBox("Enter a number between 1 and 10.")

Else

Exit Sub

End If

Loop

' Display user's correct input.

MsgBox "You entered the number " & strInput & "."

Else

Exit Sub

End If

End Sub


InputBox, funkcja – przykład (Microsoft Access)

W poniższym przykładzie funkcja InputBox została użyta do zwrócenia nazwy użytkownika. Należy zauważyć, że w programie Microsoft Access nie można otworzyć pliku Pomocy z okna dialogowego utworzonego za pomocą funkcji InputBox.

Sub Greeting()

Dim strInput As String, strMsg As String

strMsg = "Enter your name."

strInput = InputBox(Prompt:=strMsg, Title:="User Info", XPos:=2000, YPos:=2000)

MsgBox "Hello, " & strInput

End Sub


Paski poleceń – przegląd (Microsoft Access)

Aby w programie Microsoft Access 97 możliwe było programowanie z użyciem pasków poleceń, trzeba najpierw ustawić odwołanie do biblioteki obiektów pakietu Microsoft Office. W widoku "Projekt" modułu należy kliknąć polecenie Odwołania w menu Narzędzia i zaznaczyć pole wyboru Biblioteka obiektów pakietu Microsoft Office 8.0.

Po ustawieniu odwołania do biblioteki obiektów pakietu Microsoft Office, obiekty, metody i właściwości pakietu Microsoft Office można przeglądać w Przeglądarce obiektów. Do obiektów, których można użyć przy programowaniu pasków poleceń należą obiekty CommandBar, CommandBarControl, CommandBarButton, CommandBarComboBox i CommandBarPopup oraz kolekcje CommandBars i CommandBarControls.


Korzystanie z pasków poleceń (Microsoft Access)

W programie Microsoft Access 97 można użyć okna dialogowego Dostosuj, dostępnego przez wskazanie polecenia Narzędzia w menu Widok i kliknięcie polecenia Dostosuj, aby w czasie projektowania dokonać zmian pasków poleceń. Można użyć tego okna dialogowego do dodawania i modyfikacji pasków menu, pasków narzędzi i menu podręcznych oraz do dodawania wszelkich wbudowanych elementów menu i przycisków pasków narzędzi do wymienionych typów pasków poleceń. Jednak za pomocą tego okna dialogowego można dodawać do paska poleceń tylko niestandardowe przyciski poleceń i elementy menu. Aby dodać niestandardowe pole tekstowe, pole listy rozwijalnej lub pole kombi, trzeba użyć języka Visual Basic.


Używanie modelu pasków poleceń pakietu Microsoft Office w programie Microsoft Access

Aby w programie Microsoft Access 97 możliwe było programowanie z użyciem pasków poleceń, trzeba najpierw ustawić odwołanie do biblioteki obiektów pakietu Microsoft Office. W widoku "Projekt" modułu należy kliknąć polecenie Odwołania w menu Narzędzia i zaznaczyć pole wyboru Biblioteka obiektów pakietu Microsoft Office 8.0.


Dodawanie i wyświetlanie menu podręcznych (Microsoft Access)

Program Microsoft Access 97 dostarcza interfejsu użytkownika do dodawania i modyfikacji menu podręcznych. Aby dodać niestandardowe menu podręczne, należy dodać pasek narzędzi w oknie dialogowym Dostosuj, dostępnym przez wskazanie polecenia Paski narzędzi w menu Widok i kliknięcie polecenia Dostosuj, a następnie użyć okna dialogowego Właściwości paska narzędzi do zmiany właściwości Typ paska narzędzi na Wyskakujący. Aby usunąć menu podręczne, trzeba najpierw zmienić jego typ na Pasek menu lub Pasek narzędzi. W języku Visual Basic można dodawać, modyfikować i usuwać dowolne menu podręczne.

Wbudowane i niestandardowe menu podręczne są wyświetlane na pasku narzędzi Menu podręczne, dostępnym przez zaznaczenie pola wyboru Menu podręczne w oknie dialogowym Dostosuj. Do menu podręcznych można dodawać i usuwać z nich przyciski poleceń i elementy menu, za pomocą paska narzędzi Menu podręczne. Należy jednak zauważyć, że aby odwołać się do menu podręcznego w kodzie języka Visual Basic, trzeba użyć składni CommandBars("nazwa_menu_podręcznego"). Kod CommandBars("Shortcut Menus") nie działa.

Można użyć procedury zdarzenia, aby menu podręczne było wyświetlane w odpowiedzi na kliknięcie prawym przyciskiem myszy. W poniższym przykładzie menu podręczne "CustomerFormShortcut" wyświetlane jest, gdy użytkownik kliknie prawym przyciskiem myszy pusty obszar lub selektor rekordu na formularzu.

Private Sub Form_MouseDown(Button As Integer, Shift As Integer, _

X As Single, Y As Single)

Dim cmdBar As CommandBar

Dim intRight As Integer

Set cmdBar = CommandBars("CustomerFormShortcut")

intRight = (Button and acRightButton) > 0

If intRight Then

cmdBar.ShowPopup 200, 200

End If

End Sub


CommandBars, kolekcja i obiekt (Microsoft Access)

W przeciwieństwie do większości kolekcji programu Access, które są indeksowane począwszy od wartości 0, wszystkie kolekcje pasków poleceń zaczynają się od numeru 1. Należy jednak zauważyć, że odwołując się do obiektów kolekcji można użyć składni For Each...Next, bez określania numerów indeksu.


CommandBarControls, kolekcja i obiekt (Microsoft Access)

W przeciwieństwie do większości kolekcji programu Access, które są indeksowane począwszy od wartości 0, wszystkie kolekcje pasków poleceń zaczynają się od numeru 1. Należy jednak zauważyć, że odwołując się do obiektów kolekcji można użyć składni For Each...Next, bez określania numerów indeksu.


Name, właściwość (Microsoft Access)

W programie Microsoft Access 97 można użyć okna dialogowego Właściwości paska narzędzi, aby zmienić nazwę niestandardowego paska menu, paska narzędzi lub menu podręcznego. Należy wskazać polecenie Paski narzędzi w menu Widok i kliknąć polecenie Dostosuj, a następnie kliknąć przycisk Właściwości w oknie dialogowym Dostosuj. Należy wybrać żądany niestandardowy pasek menu, pasek narzędzi lub menu podręczne w polu Wybrany pasek narzędzi i wprowadzić nową nazwę w polu Nazwa paska narzędzi. Nie można zmienić nazwy wbudowanego paska menu, paska narzędzi lub menu podręcznego.


Type, właściwość (Microsoft Access)

W programie Microsoft Access 97 można użyć okna dialogowego Właściwości paska narzędzi, aby zmienić typ niestandardowego paska menu, paska narzędzi lub menu podręcznego. Należy wskazać polecenie Paski narzędzi w menu Widok i kliknąć polecenie Dostosuj, a następnie kliknąć przycisk Właściwości w oknie dialogowym Dostosuj. Należy wybrać żądany niestandardowy pasek menu, pasek narzędzi lub menu podręczne w polu Wybrany pasek narzędzi i wybrać nowy typ w polu Typ. Nie można zmienić typu wbudowanego paska menu, paska narzędzi lub menu podręcznego

Jeśli typ paska poleceń zostanie ustawiony na "Wyskakujący", pasek poleceń jest usuwany z listy Paski narzędzi w oknie dialogowym Dostosuj i zostaje przeniesiony na pasek menu, który jest wyświetlany po zaznaczeniu pola Menu podręczne na liście Paski narzędzi (na tym pasku menu wyświetlane są wszystkie menu podręczne programu Microsoft Access).


Protection, właściwość (Microsoft Access)

W programie Microsoft Access 97 można użyć arkusza Właściwości paska narzędzi, aby ustawić różne opcje właściwości Protection, które umożliwiają albo uniemożliwiają dostosowanie paska menu, paska narzędzi lub menu podręcznego. Należy wskazać polecenie Paski narzędzi w menu Widok i kliknąć polecenie Dostosuj, a następnie kliknąć przycisk Właściwości w oknie dialogowym Dostosuj. Należy wybrać żądany niestandardowy pasek menu, pasek narzędzi lub menu podręczne w polu Wybrany pasek narzędzi, a następnie użyć pola kombi Dokowanie i pól wyboru Dozwolone dostosowywanie, Dozwolona zmiana rozmiaru, Dozwolone przesuwanie i Dozwolone pokazywanie/ukrywanie, aby ustawić żądane opcje zabezpieczeń. Dla niestandardowych menu podręcznych jedyną dostępną opcją jest Dozwolone dostosowywanie.


Reset, metoda (Microsoft Access)

W programie Microsoft Access 97 można użyć arkusza Właściwości paska narzędzi, aby przywrócić wbudowany pasek menu lub pasek narzędzi. Należy wskazać polecenie Paski narzędzi w menu Widok i kliknąć polecenie Dostosuj, a następnie kliknąć przycisk Właściwości w oknie dialogowym Dostosuj. Należy wybrać żądany wbudowany pasek menu lub pasek narzędzi w polu Wybrany pasek narzędzi, a następnie kliknąć przycisk Przywróć domyślne. Nie można przywrócić niestandardowego paska menu lub paska narzędzi ani określonego menu podręcznego.

Przycisk Resetuj w oknie dialogowym Dostosuj przywraca wybrany pasek menu lub pasek narzędzi albo wszystkie wbudowane menu podręczne, jeśli zostało zaznaczone pole wyboru Menu podręczne w oknie dialogowym Dostosuj. Polecenie Resetuj menu podręcznego wyświetlanego po kliknięciu prawym przyciskiem myszy dowolnego formantu wbudowanego na pasku menu lub pasku narzędzi, gdy otwarte jest okno dialogowe Dostosuj, przywraca pierwotny stan tego formantu. Przycisk Resetuj i polecenie Resetuj są równoważne metodzie Reset.

Przycisk Przywróć domyślne nie tylko przywraca wygląd, tekst i polecenia paska menu lub paska narzędzi, ale również odtwarza wszystkie pierwotne ustawienia paska menu lub paska narzędzi, łącznie z ich pierwotnym położeniem i opcją widoczności.


Caption, właściwość (Microsoft Access)

W programie Microsoft Access 97 można użyć okna dialogowego Właściwości formantu Pasek_narzędzi dla formantów pasków poleceń do ustawienia tytułu formantu na pasku poleceń. Należy wyświetlić okno dialogowe Dostosuj przez wskazanie polecenia Paski narzędzi w menu Widok i kliknięcie polecenia Dostosuj. Dla formantów pasków menu i pasków narzędzi należy wyświetlić żądany pasek menu lub pasek narzędzi, a następnie kliknąć prawym przyciskiem myszy formant, którego właściwość Caption ma być ustawiona. Dla formantów menu podręcznych należy zaznaczyć pole wyboru Menu podręczne na karcie Paski narzędzi okna dialogowego Dostosuj, a następnie znaleźć żądany formant menu podręcznego na wyświetlanym pasku menu i kliknąć ten formant prawym przyciskiem myszy. Należy kliknąć polecenie Właściwości i wprowadzić tytuł w polu Tytuł.

Po wyświetleniu ustawienia właściwości Caption formantu w oknie dialogowym Właściwości formantu Pasek_narzędzi lub w języku Visual Basic, wyświetlany jest znak ampersand (&) dla klawisza dostępu (np. &Wklej). Odwołując się do formantu w języku Visual Basic można uwzględnić ten znak lub nie. Na przykład, poniższe odwołania są identyczne:

CommandBars("Menu Bar").Controls("Tools")

CommandBars("Menu Bar").Controls("&Tools")

Ustawiając właściwość Caption trzeba wpisać znak "&", jeśli formant ma mieć klawisz dostępu.


ShortcutText, właściwość (Microsoft Access)

W programie Microsoft Access 97 można użyć okna dialogowego Właściwości formantu Pasek_narzędzi dla formantów pasków poleceń do ustawienia tekstu skrótu wyświetlanego po kliknięciu prawym przyciskiem myszy wbudowanego formantu typu przycisk na menu, podmenu lub menu podręcznym. Należy wyświetlić okno dialogowe Dostosuj przez wskazanie polecenia Paski narzędzi w menu Widok i kliknięcie polecenia Dostosuj. Dla formantów pasków menu i pasków narzędzi należy wyświetlić żądany pasek menu lub pasek narzędzi, a następnie kliknąć prawym przyciskiem myszy formant, którego właściwość ShortcutText ma być ustawiona. Dla formantów menu podręcznych należy zaznaczyć pole wyboru Menu podręczne na karcie Paski narzędzi okna dialogowego Dostosuj, a następnie znaleźć żądany formant menu podręcznego na wyświetlanym pasku menu i kliknąć ten formant prawym przyciskiem myszy. Należy kliknąć polecenie Właściwości i wprowadzić żądany tekst w polu Tekst skrótu. Właściwość tę można ustawić w programie Microsoft Access dla wszystkich wbudowanych formantów typu przycisk, ale nie dla formantów niestandardowych.

Ustawienie tej właściwości w programie Microsoft Access powoduje, że tekst skrótu jest wyświetlany obok formantu. Jeśli użytkownik zmieni lub doda tekst skrótu dla formantu wbudowanego, wpisanie tego klawisza lub kombinacji klawiszy skrótu nie uruchamia polecenia związanego z danym formantem. Aby polecenie to było uruchamiane, trzeba przypisać klawisz lub kombinację klawiszy skrótu w makrze AutoKeys. W makrze AutoKeys należy przypisać klawisz lub kombinację klawiszy skrótu do makra używającego akcji UruchomPolecenie (RunCommand).

Dla poleceń niestandardowych nie można wyświetlić tekstu skrótu obok formantu, ale można użyć makra AutoKeys do przypisania klawisza lub kombinacji klawiszy skrótu, uruchamiających ten sam zestaw akcji, co makro lub funkcja będąca ustawieniem właściwości OnAction formantu. Należy przypisać klawisz lub kombinację klawiszy do żądanego zestawu akcji makra lub użyć akcji UruchomMakro (RunMacro) albo UruchomKod (RunCode) do uruchamiania makra lub funkcji, którą dany klawisz lub kombinacja klawiszy ma wykonywać.


TooltipText, właściwość (Microsoft Access)

W programie Microsoft Access 97 można użyć okna dialogowego Właściwości formantu Pasek_narzędzi dla formantów pasków poleceń do ustawienia etykietki narzędzia dla formantu na pasku poleceń. Należy wyświetlić okno dialogowe Dostosuj przez wskazanie polecenia Paski narzędzi w menu Widok i kliknięcie polecenia Dostosuj. Dla formantów pasków menu i pasków narzędzi należy wyświetlić żądany pasek menu lub pasek narzędzi, a następnie kliknąć prawym przyciskiem myszy formant, którego właściwość TooltipText ma być ustawiona. Dla formantów menu podręcznych należy zaznaczyć pole wyboru Menu podręczne na karcie Paski narzędzi okna dialogowego Dostosuj, a następnie znaleźć żądany formant menu podręcznego na wyświetlanym pasku menu i kliknąć ten formant prawym przyciskiem myszy. Należy kliknąć polecenie Właściwości i wprowadzić żądany tekst w polu Etykietka narzędzia.


OnAction, właściwość (Microsoft Access)

W programie Microsoft Access 97 można użyć okna dialogowego Właściwości formantu Pasek_narzędzi dla formantów pasków poleceń do ustawienia właściwości OnAction dla formantu na pasku poleceń. Należy wyświetlić okno dialogowe Dostosuj przez wskazanie polecenia Paski narzędzi w menu Widok i kliknięcie polecenia Dostosuj. Dla formantów pasków menu i pasków narzędzi należy wyświetlić żądany pasek menu lub pasek narzędzi, a następnie kliknąć prawym przyciskiem myszy formant, którego właściwość OnAction ma być ustawiona. Dla formantów menu podręcznych należy zaznaczyć pole wyboru Menu podręczne na karcie Paski narzędzi okna dialogowego Dostosuj, a następnie znaleźć żądany formant menu podręcznego na wyświetlanym pasku menu i kliknąć ten formant prawym przyciskiem myszy. Należy kliknąć polecenie Właściwości i wprowadzić makro lub funkcję, która ma być wykonywana, w polu On Action.

Właściwości OnAction można użyć tylko do uruchomienia makra lub funkcji. Aby uruchomić makro, należy wybrać je z rozwijalnej listy w polu On Action lub wpisać jego nazwę w tym polu. Aby uruchomić funkcję, należy wpisać w tym polu jej nazwę w formacie =nazwa_funkcji ( ).

Można również ustawić właściwość OnAction na wyrażenie. Wyrażenie to może zawierać funkcję lub kombinację funkcji wbudowanych lub zdefiniowanych przez użytkownika. Podczas wyliczania wyrażenia program Microsoft Access wykonuje wszystkie jego operacje. Na przykład, poniższe wyrażenie uruchamia zdefiniowaną przez użytkownika funkcję o nazwie "CustomControlFunction":

=CustomControlFunction()

W języku Visual Basic ustawieniem właściwości OnAction jest ciąg znaków. Aby ustawić tę właściwość na wyrażenie, trzeba przekazać jej ciąg znaków zawierający to wyrażenie. Przekazując ten ciąg znaków należy ciągi zawarte w ciągu znaków ująć w cudzysłów ("). (Należy zauważyć, że w polu On Action okna dialogowego Właściwości formantu Pasek_narzędzi ciąg znaków w wyrażeniu powinien być ujęty w jeden cudzysłów.) Należy się również upewnić, czy został wpisany znak równości (=) określający, że ciąg znaków zawiera wyrażenie. Jeśli funkcja nie ma argumentów, należy pamiętać o umieszczeniu nawiasów [( )] w obrębie ciągu znaków. Za pomocą poniższego ciągu znaków właściwość OnAction można ustawić na wyrażenie z poprzedniego przykładu:

"=CustomControlFunction()"

Należy zauważyć, że właściwość OnAction trzeba ustawić na nazwę procedury Function; nie można jej ustawić na nazwę procedury Sub.

Dla niestandardowych formantów pasków poleceń trzeba ustawić tę właściwość, aby dla formantu była wykonywana jakaś akcja. Jeśli właściwość ta zostanie ustawiona dla formantu wbudowanego, ustawienie właściwości OnAction zastępuje normalne akcje wykonywane przez ten formant; oznacza to, że można wymusić na formancie wbudowanym wykonanie innych akcji niż jego akcje domyślne. W ten sposób formant taki staje się formantem niestandardowym.


Style, właściwość (Microsoft Access)

W programie Microsoft Access 97 można użyć okna dialogowego Właściwości formantu Pasek_narzędzi dla formantów pasków poleceń do ustawienia stylu wyświetlania dla formantu typu przycisk na pasku poleceń. Należy wyświetlić okno dialogowe Dostosuj przez wskazanie polecenia Paski narzędzi w menu Widok i kliknięcie polecenia Dostosuj. Dla formantów pasków menu i pasków narzędzi należy wyświetlić żądany pasek menu lub pasek narzędzi, a następnie kliknąć prawym przyciskiem myszy formant, którego właściwość Style ma być ustawiona. Dla formantów menu podręcznych należy zaznaczyć pole wyboru Menu podręczne na karcie Paski narzędzi okna dialogowego Dostosuj, a następnie znaleźć żądany formant menu podręcznego na wyświetlanym pasku menu i kliknąć ten formant prawym przyciskiem myszy. Należy kliknąć polecenie Właściwości i wybrać żądany styl w polu Styl.

Ustawienia w polu Styl odpowiadają stałym wewnętrznym używanym jako ustawienia właściwości Style, zgodnie z poniższą tabelą.

Ustawienie w polu Styl	Stała właściwości Style
Domyślny styl	msoButtonAutomatic
Tylko tekst (zawsze)	msoButtonCaption
Tylko tekst (w menu)	msoButtonIcon
Obraz i tekst	msoButtonIconAndCaption
Bez etykiety	msoComboNormal
Pokaż etykietę	msoComboLabel


HelpFile, właściwość (Microsoft Access)

W programie Microsoft Access 97 można użyć okna dialogowego Właściwości formantu Pasek_narzędzi dla formantów pasków poleceń do ustawienia właściwości HelpFile dla formantu na pasku poleceń. Należy wyświetlić okno dialogowe Dostosuj przez wskazanie polecenia Paski narzędzi w menu Widok i kliknięcie polecenia Dostosuj. Dla formantów pasków menu i pasków narzędzi należy wyświetlić żądany pasek menu lub pasek narzędzi, a następnie kliknąć prawym przyciskiem myszy formant, którego właściwość HelpFile ma być ustawiona. Dla formantów menu podręcznych należy zaznaczyć pole wyboru Menu podręczne na karcie Paski narzędzi okna dialogowego Dostosuj, a następnie znaleźć żądany formant menu podręcznego na wyświetlanym pasku menu i kliknąć ten formant prawym przyciskiem myszy. Należy kliknąć polecenie Właściwości i wprowadzić nazwę żądanego pliku Pomocy w polu Plik pomocy.


HelpContextId, właściwość (Microsoft Access)

W programie Microsoft Access 97 można użyć okna dialogowego Właściwości formantu Pasek_narzędzi dla formantów pasków poleceń do ustawienia właściwości HelpContextId dla formantu na pasku poleceń. Należy wyświetlić okno dialogowe Dostosuj przez wskazanie polecenia Paski narzędzi w menu Widok i kliknięcie polecenia Dostosuj. Dla formantów pasków menu i pasków narzędzi należy wyświetlić żądany pasek menu lub pasek narzędzi, a następnie kliknąć prawym przyciskiem myszy formant, którego właściwość HelpContextId ma być ustawiona. Dla formantów menu podręcznych należy zaznaczyć pole wyboru Menu podręczne na karcie Paski narzędzi okna dialogowego Dostosuj, a następnie znaleźć żądany formant menu podręcznego na wyświetlanym pasku menu i kliknąć ten formant prawym przyciskiem myszy. Należy kliknąć polecenie Właściwości i wprowadzić numer kontekstu ID żądanego tematu Pomocy w polu ID kontekstu pomocy.


Parameter, właściwość (Microsoft Access)

W programie Microsoft Access 97 można użyć okna dialogowego Właściwości formantu Pasek_narzędzi dla formantów pasków poleceń do ustawienia właściwości Parameter dla formantu na pasku poleceń. Należy wyświetlić okno dialogowe Dostosuj przez wskazanie polecenia Paski narzędzi w menu Widok i kliknięcie polecenia Dostosuj. Dla formantów pasków menu i pasków narzędzi należy wyświetlić żądany pasek menu lub pasek narzędzi, a następnie kliknąć prawym przyciskiem myszy formant, którego właściwość Parameter ma być ustawiona. Dla formantów menu podręcznych należy zaznaczyć pole wyboru Menu podręczne na karcie Paski narzędzi okna dialogowego Dostosuj, a następnie znaleźć żądany formant menu podręcznego na wyświetlanym pasku menu i kliknąć ten formant prawym przyciskiem myszy. Należy kliknąć polecenie Właściwości i wprowadzić żądane informacje w polu Parametr.


Tag, właściwość (Microsoft Access)

W programie Microsoft Access 97 można użyć okna dialogowego Właściwości formantu Pasek_narzędzi dla formantów pasków poleceń do ustawienia właściwości Tag dla formantu na pasku poleceń. Należy wyświetlić okno dialogowe Dostosuj przez wskazanie polecenia Paski narzędzi w menu Widok i kliknięcie polecenia Dostosuj. Dla formantów pasków menu i pasków narzędzi należy wyświetlić żądany pasek menu lub pasek narzędzi, a następnie kliknąć prawym przyciskiem myszy formant, którego właściwość Tag ma być ustawiona. Dla formantów menu podręcznych należy zaznaczyć pole wyboru Menu podręczne na karcie Paski narzędzi okna dialogowego Dostosuj, a następnie znaleźć żądany formant menu podręcznego na wyświetlanym pasku menu i kliknąć ten formant prawym przyciskiem myszy. Należy kliknąć polecenie Właściwości i wprowadzić żądane informacje w polu Tag.


BeginGroup, właściwość (Microsoft Access)

W programie Microsoft Access 97 można użyć okna dialogowego Właściwości formantu Pasek_narzędzi dla formantów pasków poleceń, aby określić, czy formant na pasku poleceń ma się znajdować na początku grupy formantów. Przed takim formantem paska poleceń jest wyświetlany pasek separatora. Należy wyświetlić okno dialogowe Dostosuj przez wskazanie polecenia Paski narzędzi w menu Widok i kliknięcie polecenia Dostosuj. Dla formantów pasków menu i pasków narzędzi należy wyświetlić żądany pasek menu lub pasek narzędzi, a następnie kliknąć prawym przyciskiem myszy formant, którego właściwość BeginGroup ma być ustawiona. Dla formantów menu podręcznych należy zaznaczyć pole wyboru Menu podręczne na karcie Paski narzędzi okna dialogowego Dostosuj, a następnie znaleźć żądany formant menu podręcznego na wyświetlanym pasku menu i kliknąć ten formant prawym przyciskiem myszy. Należy kliknąć polecenie Właściwości i zaznaczyć lub wyczyścić pole wyboru Początek grupy.

Pasek separatora pojawiający się na początku grupy formantów nie jest formantem i nie jest uwzględniany przy zliczaniu elementów lub indeksowaniu w kolekcji CommandBarControls.


Add, metoda (kolekcja CommandBarControls) (Microsoft Access)

Argument Id tej metody należy ustawić na wartość typu Liczba całkowita odpowiadającą wbudowanemu przyciskowi polecenia lub elementowi menu. Powoduje to, że nowy formant działa i wygląda, jak istniejący przycisk polecenia lub element menu.

Jednak, jeśli argument Id zostanie ustawiony na wartość typu Liczba całkowita odpowiadającą przyciskowi polecenia lub elementowi menu pakietu Microsoft Office, które nie były zmodyfikowane przez program Microsoft Access (w programie Microsoft Access może być na przykład używana inna etykieta, inny tekst skrótu lub może być używany tekst zamiast ikony) modyfikacje przycisku polecenia lub elementu menu wprowadzone w programie Microsoft Access nie będą widoczne. Aby mieć pewność, że formant dodawany do paska poleceń wygląda i działa tak, jak wersja tego formantu dla programu Microsoft Access, należy użyć metody Copy, aby skopiować formant na pasek narzędzi.


Id, właściwość (Microsoft Access)

Właściwość Id może być ustawiona tylko podczas tworzenia nowego formantu. Argument Id metody Add kolekcji CommandBarControls należy ustawić na wartość typu Liczba całkowita odpowiadającą wbudowanemu przyciskowi polecenia lub elementowi menu albo na równoważne stałe wewnętrzne używane w programie Microsoft Access przez metodę RunCommand. Dla formantu niestandardowego argument Id należy ustawić na wartość 1 lub nie określać go.

Właściwości Id można użyć do sprawdzenia, jaka wartość typu Liczba całkowita odpowiada wbudowanemu formantowi. Na przykład, aby sprawdzić, jaka wartość typu Liczba całkowita odpowiada poleceniu Wklej w menu Edycja głównego paska menu, należy użyć poniższego odwołania:

CommandBars("Menu Bar").Controls("Edit").Controls("Paste").Id


Enabled, właściwość (Microsoft Access)

Właściwości tej można użyć, aby wyłączyć (przyćmić) lub włączyć element menu albo przycisk polecenia. Właściwość ta odnosi się do nazw menu, nazw podmenu i elementów na podmenu. Właściwość Enabled zastępuje działanie akcji UstawElementMenu (SetMenuItem) i metody SetMenuItem programu Microsoft Access 95.

Można wyłączyć element menu, który w programie Microsoft Access jest normalnie włączony, ale nie można włączyć elementu menu, który w programie Microsoft Access jest normalnie wyłączony.


State, właściwość (Microsoft Access)

Właściwości State można użyć do umieszczenia lub usunięcia znacznika obok elementu menu lub przycisku polecenia. Właściwość ta zastępuje działanie akcji UstawElementMenu (SetMenuItem) i metody SetMenuItem programu Microsoft Access 95.


Position, właściwość (Microsoft Access)

Właściwości Position nie można ustawić na stałą wewnętrzną msoBarPopup. Aby utworzyć menu podręczne, należy użyć argumentu Position metody Add kolekcji CommandBars.

Stała msoBarMenuBar jest używana tylko w systemach Macintosha.


Przykład kopiowania paska poleceń (Microsoft Access)

W poniższym przykładzie pasek poleceń wraz z jego formantami jest kopiowany na nowy pasek poleceń. Należy wprowadzić nazwę kopiowanego paska poleceń i nazwę nowego paska poleceń w procedurze "EnterNewName". Procedura ta wywołuje ogólną funkcję CopyCommandBar, która używa podanych nazw do utworzenia nowego paska poleceń.

Sub EnterNewName()

CopyCommandBar "Menu Bar", "New Menu Bar"

End Sub

Function CopyCommandBar(strOrigCBName As String, strNewCBName As String) As Boolean

' This procedure copies command bar named in strOrigCBName variable to new

' command bar named in strNewCBName variable.

Dim cbrOriginal As CommandBar, intOrigCount As Integer

Dim cbrCopy As CommandBar, cbrCtl As CommandBarControl

On Error GoTo CBCopy_Err

Set cbrOriginal = CommandBars(strOrigCBName)

intOrigCount = cbrOriginal.Controls.Count

Set cbrCopy = CommandBars.Add(strNewCBName)

' Make sure new command bar is visible.

cbrCopy.Visible = True

For Each cbrCtl In cbrOriginal.Controls

cbrCtl.Copy cbrCopy

Next cbrCtl

Exit Function

CBCopy_Err:

MsgBox Err.Description

Exit Function

End Function


Przykład tworzenia niestandardowego przycisku polecenia (Microsoft Access)

W poniższym przykładzie tworzony jest niestandardowy przycisk polecenia na określonym pasku poleceń. Należy wprowadzić nazwę tego paska poleceń i nazwę nowego przycisku w procedurze "SpecifyCommandBarAndButton". Procedura ta wywołuje ogólną funkcję CreateCustomButton, która używa podanych nazw do utworzenia nowego niestandardowego przycisku polecenia na pasku poleceń.

Sub SpecifyCommandBarAndButton()

CreateCustomButton "Menu Bar", "My custom button"

End Sub

Function CreateCustomButton(strBarName As String, strName As String) As Integer

Dim cmdBar As CommandBar, cmdBarCustomButton As CommandBarButton

Set cmdBar = CommandBars(strBarName)

' Show command bar if it's not already visible.

If cmdBar.Visible = False Then cmdBar.Visible = True

On Error Resume Next

Set cmdBarCustomButton = cmdBar.Controls(strName)

If Err <> 0 Then

' Custom button doesn't already exist, so create it.

Set cmdBarCustomButton = cmdBar.Controls.Add(msoControlButton, , , , True)

End If

With cmdBarCustomButton

.Caption = strName

.BeginGroup = True

.OnAction = "=msgbox(""Hello World"")"	' Run your macro or custom function here.

.Style = msoButtonCaption

End With

End Function


Print, metoda (Microsoft Access)

Metoda Print programu Visual Basic stosuje się tylko do obiektu Debug w programie Microsoft Access, a nigdy do obiektu Form. Obiekt Debug jest wymagany, gdy użytkownik korzysta z metody Print w programie Microsoft Access.

Nie należy mylić metody Print programu Visual Basic z metodą Print w programie Microsoft Access, która stosuje się tylko do obiektu Report.


Raise, metoda (Microsoft Access)

Metoda Raise generuje określony błąd programu Visual Basic. Właściwości obiektu Err są ustawiane tak, jakby ten błąd wystąpił w wykonywanym kodzie. Jednak działa to tylko dla błędów programu Visual Basic, a nie błędów programu Microsoft Access i błędów aparatu bazy danych Microsoft Jet.

Jeśli użytkownik użyje metody Raise z numerem błędu zarezerwowanym przez program Microsoft Access lub przez aparat bazy danych Jet, wartością właściwości Description obiektu Err jest "Application-defined or object-defined error". Aby odczytać opis związany z błędem programu Microsoft Access lub aparatu bazy danych Jet, który nie wystąpił podczas wykonywania kodu, należy użyć metody AccessError.

Metoda AccessError pobiera wartość typu Long reprezentującą numer błędu, a zwraca opis związany z tym błędem.


Command, funkcja (Microsoft Access)

Aby zmienić argument polecenia po otwarciu bazy danych, należy kliknąć polecenie Opcje w menu Narzędzia, a następnie na karcie Zaawansowane okna dialogowego Opcje należy wprowadzić nowy argument w polu Argumenty polecenia. Funkcja Command zwróci wprowadzony argument.

Gdy funkcja Command jest używana w jakimkolwiek miejscu innym niż kod języka Visual Basic w module, trzeba dołączyć do niej pusty nawias. Na przykład, aby użyć funkcji Command w polu tekstowym na formularzu, można ustawić właściwość ControlSource tego pola tekstowego wpisując:

=Command()


Różne formaty dla różnych wartości ciągów znaków (funkcja Format) (Microsoft Access)

w programie Microsoft Access w wersji 1.x i 2.0, można było użyć funkcji Format, aby zwrócić jedną wartość dla ciągu znaków o zerowej długości i inną dla wartości Null. Można było na przykład użyć z funkcją Format następującego wyrażenia formatującego, aby zwrócić odpowiedni ciąg znaków:

Dim varX As Variant, varStrX As Variant

' Assign some value to varStrX and pass to Format function.

varX = Format(varStrX, "@;ZLS;Null")

W programie Microsoft Access 97 trzeba osobno sprawdzić, czy nie występuje wartość Null, a następnie zwrócić odpowiednią wartość w oparciu o wynik. Można na przykład użyć funkcji IIf z funkcją Format w następujący sposób:

varX = IIf(IsNull(varStrX),"Null", Format(varStrX, "@;ZLS"))

Ta zmiana obowiązuje tylko wtedy, gdy funkcja Format jest używana do formatowania ciągu znaków w zależności od tego, czy jest on ciągiem znaków o długości zerowej czy ma wartość Null. Inne wyrażenia formatujące używane z funkcją Format działają w taki sam sposób, jak w poprzednich wersjach.

Podczas konwersji bazy danych programu Microsoft Access w wersji 1.x lub 2.0 na wersję Microsoft Access 97, trzeba odpowiednio zmienić kod, tak aby określenie wartości Null następowało osobno.


DoEvents, funkcja – przykład (Microsoft Access)

W poniższym przykładzie funkcja DoEvents przekazuje sterowanie do systemu operacyjnego po wykonaniu pętli. Funkcja DoEvents zawsze zwraca wartość 0.

Sub LongLoop()

Dim intI As Integer

For intI = 1 To 1500 	' Start loop.

If intI Mod 100 = 0 Then	' If loop has repeated 100 times.

DoEvents	' Yield to operating system.

Debug.Print intI

End If

Next intI	' Increment loop counter.

End Sub