Obravnava napak kontrolnikov WKL v VBA
Napake kontrolnikov WKL v kodi prestrezite tako, kot prestrezate napake Accessa, uporabnikom namesto pogovornega okna VBA prikažite smiselno sporočilo in sprostite objekte, ki jih hranite.
Zahteva WKL Forms Object Library 1.23 ali novejšo različico.
Pregled rešitve
- Stalne številke. Vsak član kontrolnika ali objekta WKL, ki ne uspe, sproži napako med izvajanjem s stalno številko (
Err.Number, konstante naštevanjaWklErrorCode) inErr.Source = "WklForms";Err.Descriptionvsebuje besedilo za uporabnika v jeziku komponent ali lastno besedilo Accessa, če je zavrnil Access. - Številke zunaj
WklErrorCode. Napaka, ki jo je sprožil Access, pride do klicatelja z Accessovo številko in besedilom; pomanjkanje pomnilnika je&H8007000E; vsaka druga napaka, ki je komponente niso pričakovale, je&H8000FFFFz besedilom „Notranja napaka v knjižnici WKL Forms Object Library“ in vrsto napake – sporočite jo dobavitelju. VCase Elsene predpostavljajte, da je vsaka številka konstantawke. On Errorkot običajno. Napake obravnavajte zOn Error GoTov proceduri, ki pokliče člana, in se odločite poErr.Number.- Napake brez klicatelja – nalaganje, ki ne uspe, medtem ko kontrolnik riše, shranjevanje uporabnikovega urejanja, ki ga vir podatkov zavrne – pridejo v dogodek
DataErrorkontrolnikov dreves in mrež ter kontrolnikaWklTokenBox;Response = acDataErrContinue(0) prepreči lastno okno s sporočilom kontrolnika. - Objekti, ki jih hranite –
WklToastv spremenljivkiWithEvents,WklLinkManager,Recordset, ki ste ga podali kontrolniku –, se ob zapiranju obrazca sprostijo zSet ... = Nothing.
Err.Number | Konstanta | Pomen |
|---|---|---|
&H80040301 | wkeNotConfigured | Manjka vir podatkov ali obvezno polje |
&H80040302 | wkeSourceError | Access je med branjem ali shranjevanjem sporočil napako (besedilo Accessa v Err.Description) |
&H80040303 | wkeDuplicateKey | Podvojen ključ |
&H80040304 | wkeCycle | Krog v razmerju nadrejeni–podrejeni |
&H80040305 | wkeKeyNotFound | Ni vozlišča ali zapisa s tem ključem |
&H80040306 | wkeInvalidValue | Neveljavna vrednost ali neveljavna datoteka |
&H80040307 | wkeNotAvailable | Ukaz trenutno ni na voljo (ni pogled obrazca ali ne za zapis s fokusom) |
Izvedba
Ukazni gumb, ki izbriše izbrane zapise mreže, s sporočilom za primere, ki jih uporabnik lahko razume:
Private Sub cmdDelete_Click()
On Error GoTo Failed
Me!Grid1.Object.DeleteSelected
Exit Sub
Failed:
Select Case Err.Number
Case wkeNotAvailable
MsgBox "Bitte zuerst einen Datensatz auswählen.", vbInformation
Case wkeSourceError
MsgBox "Löschen nicht möglich: " & Err.Description, vbExclamation
Case Else
MsgBox "Fehler " & Hex(Err.Number) & " (" & Err.Source & "): " & Err.Description, vbCritical
End Select
End Sub
Zavrnitev vira podatkov med uporabnikovim urejanjem, prikazana v lastni vrstici stanja obrazca namesto v polju s sporočilom:
Private Sub Grid1_DataError(ByVal DataErr As Long, ByVal Description As String, Response As Integer)
Me!lblStatus.Caption = Description
Response = acDataErrContinue
End Sub
Sproščanje tega, kar hrani obrazec:
Private WithEvents mToast As WklToast
Private Sub Form_Load()
Set mToast = New WklToast
End Sub
Private Sub Form_Close()
Set mToast = Nothing
End Sub
Opombe
- Primerjajte s konstantami, ne z negativnimi desetiškimi števili:
Err.Numberza&H80040306je v VBA-2147220730, konstante pa potrebujejo sklic na WKL Forms Object Library (Access ga nastavi, ko vstavite kontrolnik). - Napaka v dogodkovni proceduri, ki je ne obravnavate, prikaže pogovorno okno VBA za napako med izvajanjem, kot pri vsakem dogodku Accessa; napake obravnavajte tudi v dogodkovnih procedurah.
- Koda, ki med potekajočim dogodkom istega kontrolnika pokliče člana: ukaz za zapis kontrolnika
WklGrid,WklTreeListaliWklGanttse takrat izvede po dogodkovni proceduri, zato napaka med njegovim izvajanjem ne pride do kode, ki ga je poklicala; takoj se preveri le njegova razpoložljivost, ki ob klicu sprožiwkeNotAvailable. - Besedila napak sledijo jeziku komponent (angleščina, nemščina, slovenščina, hrvaščina ali italijanščina; angleščina, kadar ne velja noben), tako kot preostali uporabniški vmesnik. Odločajte se po
Err.Number, nikoli po besedilu: številka je v vseh jezikih enaka. Izbira jezika: Izbira jezika komponent.
Sorodne teme
sl/wiki/msaccess/comctl/how-to/handle-errors-of-wkl-controls.txt · Zadnja sprememba: uporabnika Wolfgang van der Stille