Povezovanje drevesa z glavnim zapisom
Prikažite samo zapise, ki pripadajo trenutnemu zapisu obrazca ali drugega nabora zapisov, tako kot to naredi Accessov podobrazec – na primer postavke naročila, prikazanega na obrazcu.
Zahteva WKL Forms Object Library 1.23 ali novejšo različico.
Pregled rešitve
LinkChildFields navaja polja vira zapisov drevesa, LinkMasterFields pa ustrezna polja glavnega zapisa, v enakem
vrstnem redu. Obe se shranita z obrazcem. Glavni zapis je trenutni zapis obrazca, na katerem je kontrolnik. Med
izvajanjem lahko za glavni zapis namesto tega določite nabor zapisov (MasterRecordset) ali vrednosti podate
neposredno (MasterValues), kar deluje tudi na uporabniških obrazcih (UserForm) v Excelu, Wordu in Outlooku.
BeforeMasterChange in AfterMasterChange se sprožita, ko se glavni zapis spremeni. Pravila, kateri vir obvelja, so
opisana pri `LinkMasterFields` (v angleščini).
Izvedba
Na strani oblikovalnika Povezava (vrstica Po meri [...] kontrolnika) dodajte en par polj za vsako
povezovalno polje. Predlagaj polja z enakim imenom predlaga pare polj, ki imajo v obeh virih zapisov enako ime, tako kot čarovnik
za podobrazce. Nastavi vir kontrolnika lastnost ControlSource kontrolnika nastavi na polja glavnega zapisa,
zato Access vsako menjavo zapisa sporoči takoj. Brez tega kontrolnik glavni zapis preverja vsakih 250 ms.
Iste nastavitve v listu z lastnostmi (zavihka Drugo in Podatki) za seznam postavk naročila na obrazcu
naročil frmNarocila:
| Lastnost | Vrednost |
|---|---|
RecordSource | tblPostavke |
KeyField | NarociloID;StPostavke |
ParentField | NarociloID;NadrejenaPostavka |
LinkChildFields | NarociloID |
LinkMasterFields | ID |
ControlSource (zavihek Podatki) | ID |
Odziv na spremembo glavnega zapisa v modulu obrazca:
Private Sub List1_AfterMasterChange(ByVal Values As Variant)
Me!lblPostavke.Caption = "Postavke: " & Me!List1.Object.NodeCount
End Sub
Glavni zapis iz drugega podobrazca namesto iz samega obrazca:
Private Sub Form_Load()
Set Me!List1.Object.MasterRecordset = Me!sfmNarocila.Form.Recordset
End Sub
Na uporabniškem obrazcu (UserForm), ki nima nabora zapisov obrazca, vrednosti podajte iz kode:
Private Sub cboNarocilo_Change()
Me.List1.MasterValues = Me.cboNarocilo.Value ' Array(...) for several link fields
End Sub
Opombe
- Brez glavnega zapisa (nov ali prazen glavni zapis) je drevo prazno, dodajanje ali kopiranje vozlišč pa sproži
wkeInvalidValue. - Novi zapisi v svojih povezovalnih poljih dobijo vrednosti glavnega zapisa.
- Nastavitev
MasterValuesiz kode ne sproži dogodkov; z nastavitvijo na Null se kontrolnik vrne kMasterRecordsetali obrazcu. LinkMasterFieldslahko namesto polja navaja kontrolnik obrazca, tako kot pri podobrazcu.- Če je vir zapisov prepustna poizvedba ali počasna povezana tabela, nastavite
MasterFilterModenawmfLocal(oblikovalnik: Naloži enkrat, filtriraj v pomnilniku): drevo vir prebere enkrat in ga ob vsaki menjavi glavnega zapisa filtrira v pomnilniku, namesto da bi poizvedbo izvedlo znova. - V pogledu načrta z
LivePreviewin v predogledu oblikovalnika drevo prikaže zapise prvega zapisa obrazca, ker pogled načrta nima trenutnega zapisa. - Na uporabniškem obrazcu (UserForm) kontrolnik naslovite brez
.Object(Me.List1), ker MSForms svoje lastnosti združi z lastnostmi kontrolnika. Če VBA tam sporoči, da člana ni mogoče najti, glejte „Method or data member not found“ za kontrolnik na obrazcu UserForm.