Color scheme: Light
You are here: start » sl » Dokumentacija » Orodja za Microsoft Access » WKL Forms Object Library » how-to » Urejanje zapisov v Accessovem obrazcu

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. EditForm navaja obrazec, EditFormMode pa določa, kje se prikaže. Dvoklik, Enter, F2 in EditSelected ga odprejo s filtrom na izbrani zapis; Ctrl++ in NewRecord ga odpreta za nov zapis. Ko je delo z obrazcem končano, seznam svoje zapise prebere znova.
  • Ključi in vrste. EditKeyFields navaja ključna polja obrazca, kadar se razlikujejo od lastnosti KeyField seznama; EditKindField in EditForms izbereta obrazec za vsako vrsto zapisa, za drevo prek več tabel. Podrobni pogled kontrolnika WklGrid ima lahko svoj obrazec (editForm v DetailViews).
  • Kaj je obrazec naredil. Po obrazcu EditFormResult pove, ali je zapis nespremenjen, spremenjen, dodan ali izbrisan; zapis, ki ga je obrazec dodal, je izbran (EditFormNewKey).
EditFormModeKje se obrazec prikažeKdaj seznam znova prebere zapise
wfmNoneBrez obrazca; seznam ureja v svojih celicah (privzeto)-
wfmDialogModalno pogovorno okno (acDialog)Ko se pogovorno okno zapre
wfmWindowNavadno okno obrazca; uporabnik se lahko vrne na seznamKo se okno zapre
wfmDockedV kontrolniku podobrazca EditFormControl istega obrazca; sledi izbiriKo se fokus vrne na seznam
wfmAutoPripeto, dokler seznamu ob kontrolniku podobrazca ostane 320 slikovnih pik, sicer pogovorno oknoKot pri pripetem obrazcu ali pogovornem oknu
wfmOverlayV kontrolniku podobrazca EditFormControl, čez desni del seznama (EditFormWidth), samo med urejanjem zapisaKo 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.

  1. V pogledu načrta obrazca frmStranke odprite oblikovalnik mreže (Lastnosti kontrolnika ali gumb […] lastnosti v listu z lastnostmi), stran Vedenje (v kontrolniku WklTreeList: Mreža, združevanje in izvoz), razdelek Obrazec za urejanje:
    • Obrazec (EditForm): frmStranka
    • Prikaz (EditFormMode): Pogovorno okno
  2. Shranite obrazec in ga odprite v pogledu obrazca. Dvokliknite stranko: frmStranka se 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 procedure DataError ni).
  • 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 z Modal = True namesto kot acDialog, 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: EditFormResult je wfrUnchanged tudi, č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 prek Recordset sporoči wfrUnknown. AfterEditForm za obrazec, odprt za nov zapis, še vedno sporoči NewRecord = True. Ker seznam svoj vir zapisov bere sam, je wfrChanged sporoč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 SelectedKey v AfterEditForm: seznam je svoje zapise pred dogodkom že znova prebral.
  • Nevezan obrazec. Obrazec se odpre s pogojem WhereCondition na ključ (pripeto: Filter in FilterOn); nevezan obrazec iz tega ne dobi zapisa in ne dobi OpenArgs. Ključ prebere iz seznama (Forms!frmList!Grid1.Object.SelectedKey ali Key dogodka BeforeEditForm), svoje vrednosti pa naloži in zapiše sam, na primer prek prepustne poizvedbe. EditFormResult še vedno sporoči wfrChanged, ko vir zapisov pozneje pokaže spremembo, tudi če obrazec sam ni shranil ničesar (wfrUnknown za seznam prek Recordset). 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 s sourceKeys ali deleteFrom izbriše v tej tabeli (ali v RecordSource obrazca), prek ključnih polj obrazca, z BeforeDelete in 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: lastnost AllowEdits njenega 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 BeforeEditForm in AfterEditForm sproži glavna mreža.
  • Dogodki potrebujejo modul, obrazec ne. BeforeEditForm (izbira drugega obrazca, preklic) in AfterEditForm sta 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

sl/wiki/msaccess/comctl/how-to/edit-records-in-a-form.txt · Last modified: by Wolfgang van der Stille