Barvna shema: Svetla
Trenutno dejavna stran: start » sl » Dokumentacija » Orodja za Microsoft Access » WKL Forms Object Library » how-to » Povezovanje drevesa z glavnim zapisom

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:

LastnostVrednost
RecordSourcetblPostavke
KeyFieldNarociloID;StPostavke
ParentFieldNarociloID;NadrejenaPostavka
LinkChildFieldsNarociloID
LinkMasterFieldsID
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 MasterValues iz kode ne sproži dogodkov; z nastavitvijo na Null se kontrolnik vrne k MasterRecordset ali obrazcu.
  • LinkMasterFields lahko namesto polja navaja kontrolnik obrazca, tako kot pri podobrazcu.
  • Če je vir zapisov prepustna poizvedba ali počasna povezana tabela, nastavite MasterFilterMode na wmfLocal (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 LivePreview in 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.

Sorodne teme

sl/wiki/msaccess/comctl/how-to/link-to-a-master-record.txt · Zadnja sprememba: uporabnika Wolfgang van der Stille