08. juni 2004 - 12:07Der er
35 kommentarer og 1 løsning
hvordan laver jeg mine egne fejlmeddelser??
jeg har lavet en formular der henter tabeller fra 3 tabeller i en relations database. Jeg ønsker, når mine brugere trykker på gem knappen, at der bliver vist en andne fejlmeddelelse end dem de får vist. Helt konkret drejer det sig om at de fejlmeddelelser der opstår når de ikke udfylder et felt der skal udfyldes, eller indtaster en primærnøgle der ikke findes. For det er jo sådan så data blvier hentet fra de forskellige tabeller, og er en leverandør ikke oprettet, så får man en fejlmeddelelse, hvis man indtaster et forkert leverandør navn.
jeg forsøgte nu at skrive IS NOT NULL under valideringsregel, og skrev min egen fejlmeddelse under valideringsmeddelse, for feltet. Resultatet er nu at at det stadig er Access's fejlmeddelse der blvier vist :(
hvor finder jeg det nummer du skriver om, og Form_error?? Jeg har åbnet både kodemodulet, og kigget i formularens egenskaber, men synes ikek jeg kan finde det
Private sub Form_error(Dataerr as long, response as integer) msgbox DataErr end sub
Herefter åbner du formularen i alm. formularvisning og fremprovokerer fejlen, så skulle du gerne få en beskedboks, som fortæller dig, hvilken fejlkode der er opstået. Det er denne kode, du skriver ned eller husker.
mange tak for hjælpen. Jeg har tilmed prøvet at gøre således, så proceduren bliver kaldt, når man trykker på gem knappen, og ikek når man lukekr formen.
Jeg prøvede først at henvise til formens error procedure under knappens error procedure, det gav fejlmeddelse. Herefter forsøgte jeg at kopiere koden ind under knappens error procedure, men her spørger access om man virkelig vil det, da det vil resette ens projekt. Det turde jeg så ikke, jeg er sikekrt en kylling, eller også er der en bedre måde at gøre det på
Access' advarsel kom kun fordi Access åbenbart stadig var i gang med at afvikle koden (du har måske haft en fejl og røget ind i debug). Hvis du nulstiller på Nulstil-knappen på værktøjslinien og derefter prøver at kopiere koden igen, kommer der ingen fejl.
Men koden vil næppe virke andre steder end i Form_Error, og det vil også være forkert. Som det er nu, bliver koden aktiveret så snart en bruge forøger at gemme posten (enten ved at bladre, ved at lukke formularen, ved at trykke shift+enter eller andet). Dette er det rigtigste og er et godt eksempel på fejlhåndtering.
jeg trykkede nu på reset, inde i værktøjslinjen ved koden. Er det en anden knap du snakker om??
resultatet er nemlig stadig det samme, access fejlmeddelser kommer når man trykekr på gem knappen, og mine egne fejlmeddelser kommer frem når jeg vil lukke formularen.
hmm, så er jeg ikke helt klar over, hvad det er, vi snakker om? Er det ikke stadig dette problem: "Herefter forsøgte jeg at kopiere koden ind under knappens error procedure, men her spørger access om man virkelig vil det, da det vil resette ens projekt"?
Men som jeg skriver, så vil koden ikke virke, hvis du flytter den andre steder end hvor den er i Form_Error.
det vi snakker om er at få det til at virke sådan, så man ser mine fejlmeddelelser, og ikke de indbyggede i access, når man forsøger at gemme data. Og sådan som jeg forstod det på dig, så ville det virke hvis man bare havde koden oppe under form_error
jeg har følgende kode, de forskellige steder:
Private Sub Gem_Leverandør_Click() On Error GoTo Err_Gem_Leverandør_Click
Private Sub Form_Error(DataErr As Integer, Response As Integer) MsgBox DataErr Select Case DataErr Case 3101 MsgBox "Du SKAL indtaste et postnummer, og postnummeret SKAL være i postnummertabellen. Hvis det ikke befinder sig i postnummertabellen, skal du oprette det, med tilhørende bynavn" Response = acDataErrContinue Case Else Response = acDataErrDisplay End Select End Sub
hmm, det ser rigtigt ud (du skal dog lige fjerne MsgBox DataErr fra første linie)....og det plejer at virke (jeg afprøvede det inden jeg skrev mit første indlæg)
prøv at sætte et breakpoint i første linie i Form_Error-koden (breakpoint sættes ved at trykke F9, når man har markøren på linien) Herefter fremprovokerer du fejlen, hvorved du gerne skulle hoppe ind i koden ved breakpointet. Herefter kan du single-steppe med F8. Når du holder musen over f.eks. Dataerr kan du se hvilken værdi den har (måske er det i virkeligheden en anden kode end 3101?)
det ku sagtens være. det lyder logisk ihvertfald. Hvad gør jeg ved det?? for det er jo ikek sådan så jeg har skrevet noget kode selv i gemknappen.
jeg prøvede iøvrigt at gøre som du sagde med breakpointet. Jeg forsøgte først at indsætte et der hvor du sagde(første linje i form_error) og der havde værdien 3101, men da jeg indsatte et breakpoint i første linje i gemknappen, og desuden anvendte msgbox DataErr til at få nummeret, viste det sig at den var tom??
hmm, jeg tror ikke, at vi kommer meget videre sådan her. Der er mange ting, som kan spille ind, hvorfor vi efter yderligere 50 indlæg stadig kan risikere at være uden resultat. ;o)
Hvis du har mulighed for det, så kan du sende din db til mig, og jeg skal kigge på den i morgen formiddag. du finder min mailadresse ved at klikke på mit navn.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.