Urejanje zapisov v Accessovem obrazcu
Uporabnikom omogočite, da zapise kontrolnika WklGrid, WklTreeList ali WklGantt urejajo v navadnem obrazcu
Access – kot pogovorno okno, kot okno ali pripeto ob seznamu – namesto v celicah seznama.
Zahteva WKL Forms Object Library 1.30 ali novejšo različico.
Pregled rešitve
- Obrazec je vaš. Za tabelo ali poizvedbo zapisov oblikujte vezan Accessov obrazec s polji, pravili za veljavnost in postavitvijo po svoji izbiri. Ne potrebuje kode ne modula. Deluje tudi nevezan obrazec, ki svoje vrednosti bere in zapisuje sam (na primer prek shranjenih procedur); glejte Nevezan obrazec v razdelku Opombe.
- Odpre ga seznam.
EditFormnavaja obrazec,EditFormModepa določa, kje se prikaže. Dvoklik, Enter, F2 inEditSelectedga odprejo s filtrom na izbrani zapis; Ctrl++ inNewRecordga odpreta za nov zapis. Ko je delo z obrazcem končano, seznam svoje zapise prebere znova. - Ključi in vrste.
EditKeyFieldsnavaja ključna polja obrazca, kadar se razlikujejo od lastnostiKeyFieldseznama;EditKindFieldinEditFormsizbereta obrazec za vsako vrsto zapisa, za drevo prek več tabel. Podrobni pogled kontrolnikaWklGridima lahko svoj obrazec (editFormvDetailViews). - Kaj je obrazec naredil. Po obrazcu
EditFormResultpove, ali je zapis nespremenjen, spremenjen, dodan ali izbrisan; zapis, ki ga je obrazec dodal, je izbran (EditFormNewKey).
EditFormMode | Kje se obrazec prikaže | Kdaj seznam znova prebere zapise |
|---|---|---|
wfmNone | Brez obrazca; seznam ureja v svojih celicah (privzeto) | - |
wfmDialog | Modalno pogovorno okno (acDialog) | Ko se pogovorno okno zapre |
wfmWindow | Navadno okno obrazca; uporabnik se lahko vrne na seznam | Ko se okno zapre |
wfmDocked | V kontrolniku podobrazca EditFormControl istega obrazca; sledi izbiri | Ko se fokus vrne na seznam |
wfmAuto | Pripeto, dokler seznamu ob kontrolniku podobrazca ostane 320 slikovnih pik, sicer pogovorno okno | Kot pri pripetem obrazcu ali pogovornem oknu |
wfmOverlay | V kontrolniku podobrazca EditFormControl, čez desni del seznama (EditFormWidth), samo med urejanjem zapisa | Ko se fokus vrne na seznam; obrazec se takrat skrije |
Izvedba
Obrazec frmStranke z mrežo Grid1 na tblStranka (ključ ID) in obrazec za urejanje frmStranka, vezan na
tblStranka, z poljem z besedilom za vsako polje.
- V pogledu načrta obrazca
frmStrankeodprite oblikovalnik mreže (Lastnosti kontrolnika ali gumb […] lastnosti v listu z lastnostmi), stran Vedenje (v kontrolnikuWklTreeList: Mreža, združevanje in izvoz), razdelek Obrazec za urejanje:- Obrazec (EditForm):
frmStranka - Prikaz (EditFormMode):
Pogovorno okno
- Shranite obrazec in ga odprite v pogledu obrazca. Dvokliknite stranko:
frmStrankase odpre kot pogovorno okno s to stranko. Spremenite vrednost in zaprite pogovorno okno; mreža prikaže novo vrednost.
Iste nastavitve s kodo:
Private Sub Form_Load()
With Me!Grid1.Object
.EditForm = "frmStranka"
.EditFormMode = wfmDialog
End With
End Sub
Pripeto ob mreži: obrazcu frmStranke dodajte kontrolnik podobrazca sfEdit (na primer v območju postavitve
WklDockLayout) in njegov Izvorni objekt pustite prazen; mreža ga napolni.
With Me!Grid1.Object
.EditForm = "frmStranka"
.EditFormControl = "sfEdit"
.EditFormMode = wfmDocked
End With
Drevo prek poizvedbe UNION strank in naročil, s stolpcem Vrsta in skupnim ključnim stolpcem ID:
With Me!Tree1.Object
.EditKindField = "Vrsta"
.EditForms = "{""forms"":[{""kind"":""Stranka"",""form"":""frmStranka"",""keys"":""StrankaID""}," & _
"{""kind"":""Narocilo"",""form"":""frmNarocilo"",""keys"":""NarociloID""}]}"
.EditFormMode = wfmDialog
End With
Drevo, katerega ključ je enoličen prek več tabel samo kot besedilo, na primer 'r5' (pravilo 5) ali
'i5:resource' (element resource pravila 5): unija nosi ključe tabel v lastnih stolpcih (Nr, Item),
sourceKeys pa iz njih vzame ključ obrazca. children omogoči, da Ctrl++ na pravilu temu pravilu doda element,
deleteFrom pa navaja tabelo, iz katere se elementi brišejo:
With Me!Tree1.Object
.KeyField = "Key"
.EditKindField = "Kind"
.EditForms = "{""forms"":[" & _
"{""kind"":""Rule"",""form"":""frmRule"",""sourceKeys"":""Nr"",""keys"":""Id""," & _
"""children"":[{""kind"":""Item"",""link"":""RuleId=Nr""}]}," & _
"{""kind"":""Item"",""form"":""frmRuleItem"",""sourceKeys"":""Nr;Item"",""keys"":""RuleId;Item""," & _
"""deleteFrom"":""tblRuleItem""}]}"
.EditFormControl = "sfEdit"
.EditFormMode = wfmDocked
End With
Lastni gumbi za vsako vrsto uporabljajo NewRecordOfKind in CanAddKind:
Private Sub Tree1_CommandStateChange()
Me!cmdNewRule.Enabled = Me!Tree1.Object.CanAddKind("Rule")
Me!cmdNewItem.Enabled = Me!Tree1.Object.CanAddKind("Item")
End Sub
Private Sub cmdNewItem_Click()
Me!Tree1.Object.NewRecordOfKind "Item"
End Sub
Opombe
- Preverjanje ostane v obrazcu. Obvezna polja, pravila za veljavnost in napake vira podatkov se prikažejo v obrazcu za urejanje, kot v vsakem Accessovem obrazcu; seznam zanje ne prikaže lastnih sporočil. Obrazec za urejanje, ki ne obstaja, ali ključ, ki se ne ujema s ključnimi polji obrazca, je sporočen prek
DataError(ali s poljem s sporočilom, če procedureDataErrorni). - Novi zapisi povezanega seznama. Ko je seznam povezan z glavnim zapisom (
LinkChildFields), kontrolniki obrazca za urejanje, vezani na povezovalna polja, dobijo vrednosti glavnega zapisa kot privzeto vrednost. Obrazec potrebuje kontrolnik za vsako povezovalno polje; ta je lahko neviden. V načinu pogovornega okna se tak obrazec odpre skrito, pripravi in nato prikaže zModal = Truenamesto kotacDialog, ker pogovornega okna, ko je enkrat odprto, ni mogoče spremeniti: seznam še vedno čaka, da se zapre, glavno okno Accessa pa ostane omogočeno. - Kaj je obrazec naredil. Seznam zapis iz svojega vira zapisov prebere pred odpiranjem obrazca in po njem ter primerja vsa polja:
EditFormResultjewfrUnchangedtudi, če je obrazec shranil brez spremembe. Pri novem zapisu primerja ključe, ki jih ima seznam prej in pozneje (v strežniškem načinu največji ključ enega številskega ključnega polja); nato izbere nov zapis, razširi njegov nadrejeni element in se pomakne do njega. Seznam prekRecordsetsporočiwfrUnknown.AfterEditFormza obrazec, odprt za nov zapis, še vedno sporočiNewRecord = True. Ker seznam svoj vir zapisov bere sam, jewfrChangedsporočen za vsako spremembo, ki jo vir zapisov pozneje pokaže, tudi za tisto, ki jo je obrazec zapisal prek shranjene procedure, namesto da bi shranil svoj zapis. - Izbira zapisa, ki ga je obrazec dodal drugače. Če novega ključa ni mogoče najti s primerjavo ključev (več uporabnikov hkrati dodaja zapise, ključ ni naraščajoče število), nastavite
SelectedKeyvAfterEditForm: seznam je svoje zapise pred dogodkom že znova prebral. - Nevezan obrazec. Obrazec se odpre s pogojem WhereCondition na ključ (pripeto:
FilterinFilterOn); nevezan obrazec iz tega ne dobi zapisa in ne dobiOpenArgs. Ključ prebere iz seznama (Forms!frmList!Grid1.Object.SelectedKeyaliKeydogodkaBeforeEditForm), svoje vrednosti pa naloži in zapiše sam, na primer prek prepustne poizvedbe.EditFormResultše vedno sporočiwfrChanged, ko vir zapisov pozneje pokaže spremembo, tudi če obrazec sam ni shranil ničesar (wfrUnknownza seznam prekRecordset). Zanj uporabite način pogovornega okna: v pripetem in samodejnem načinu seznam ob vsaki izbiri spremeni le filter obrazca, česar nevezan obrazec ne opazi. - Zapisi poizvedbe
UNION. Access unije ne more spremeniti, zato se zapis vrste ssourceKeysalideleteFromizbriše v tej tabeli (ali vRecordSourceobrazca), prek ključnih polj obrazca, zBeforeDeletein vprašanjem kot običajno. Z obrazci za urejanje je mogoče urejati in brisati samo zapise, katerih vrsta ima obrazec. Vrsta, ki jo je mogoče dodajati in brisati, ne pa spreminjati, ne potrebuje nastavitve seznama: lastnostAllowEditsnjenega obrazca nastavite na Ne in obrazec se odpre samo za branje. - Način okna. Če obrazec znova odprete za drug zapis, medtem ko je njegovo okno odprto, se drug zapis prikaže v istem oknu: Access obrazec brez modula odpre samo enkrat. Če zaprete obrazec seznama, tako okno z njegovimi spremembami ostane odprto, tako kot Access pusti odprt vsak drug obrazec; seznam ničesar ne vpraša.
- Pripeti način. Access zapis pripetega obrazca shrani, ko se fokus vrne na seznam, kot pri vsakem podobrazcu; zapis, ki ga ni mogoče shraniti, obdrži fokus v obrazcu s sporočilom Accessa. Klik na drug zapis v seznamu fokus premakne nazaj na seznam, zato se prikazani zapis shrani, kot je opisano, pripeti obrazec pa nato prikaže izbranega. Ko zaprete obrazec seznama, se pripeti zapis shrani kot pri vsakem podobrazcu.
- Način prekrivanja. Kontrolnik podobrazca mora biti v vrstnem redu obrazca za seznamom (Razporedi › Postavi v ospredje), da leži nad njim. Seznam ga postavi čez svoj desni del (
EditFormWidth, sicer lastna širina kontrolnika), ko se zapis ureja, in ga skrije, ko se fokus vrne na seznam; prekrivni obrazec ne sledi izbiri. - Podrobni pogledi. Podrobni pogled nima lastnega kontrolnika podobrazca, zato pripeti in samodejni način njegov obrazec odpreta kot pogovorno okno. Njegova dogodka
BeforeEditForminAfterEditFormsproži glavna mreža. - Dogodki potrebujejo modul, obrazec ne.
BeforeEditForm(izbira drugega obrazca, preklic) inAfterEditFormsta dogodka kontrolnika in potrebujeta modul obrazca; odpiranje, filtriranje in vnovično branje delujejo brez njiju. - Ne v uporabniških obrazcih (UserForm). V Excelu in Wordu ni Accessovega obrazca, ki bi ga bilo mogoče odpreti; lastnosti se ohranijo, vendar nimajo učinka.
Sorodne teme
- Referenčni priročnik API (v angleščini): WklTreeList (
EditForm,EditKeyFields,EditFormMode,EditKindField,EditForms,EditFormControl,EditFormWidth,EditFormResult,EditFormNewKey,NewRecordOfKind,CanAddKind,BeforeEditForm,AfterEditForm), WklGrid (DetailViews), naštevanja (WklEditFormMode,WklEditFormResult)