Avatar billede admiralen Nybegynder
08. juni 2004 - 12:07 Der 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.

håber der er en der kan hjælpe :)
Avatar billede jensen363 Forsker
08. juni 2004 - 12:10 #1
I tabellerne kan du benytte dig af valideringsregler og valideringsmeddelelser til at begrænse data og give fejlmeddelelser
Avatar billede webcreator Nybegynder
08. juni 2004 - 12:12 #2
Hm, mon det er noget i denne retning ? :

$indexs = mysql_query("SELECT * FROM table WHERE `id` = '$id'") or $error=true;

if ($error) {
  echo "Der opstod en fejl!";
}

Tror at ovenstående virker.
Avatar billede jensen363 Forsker
08. juni 2004 - 12:14 #3
Hvis du angiver at dataindtastning er obligatorisk, kan du forhindre at feltet forlades unde indtastning
08. juni 2004 - 12:14 #4
webcreator, skulle vi ikke lige holde os til Access (da vi er i Access-kategorien)
Avatar billede webcreator Nybegynder
08. juni 2004 - 12:32 #5
Hov, det havde jeg overset. Det beklager jeg meget
08. juni 2004 - 12:33 #6
np :o)
Avatar billede admiralen Nybegynder
08. juni 2004 - 12:33 #7
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 :(
08. juni 2004 - 12:38 #8
fejlen skal fanges på formularens VedFejl-hændelse (Form_Error)

Lav en msgbox som skriver fejlkoden ud:

msgbox DataErr

Nummeret husker du, hvorefter du ændre koden til:

If Dataerr = <det huskede nummer> then
  Msgbox "Leverandøre er ikke oprettet!", vbcritical, "Leverandør mangler!"
endif
Avatar billede admiralen Nybegynder
08. juni 2004 - 12:54 #9
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
08. juni 2004 - 12:56 #10
sorry....du skal starte formularen og fremprovokere fejlen. Så kommer den :o)
Avatar billede admiralen Nybegynder
08. juni 2004 - 13:02 #11
det overvejede jeg faktisk også, og prøvede det også, men der stod ikke noget nummer på :(
08. juni 2004 - 13:03 #12
Du har kun msgbox Dataerr i koden, ikke?
08. juni 2004 - 13:04 #13
Kom lige i tanke om, at den endelige kode skal være lidt længere:

If Dataerr = <det huskede nummer> then
  Msgbox "Leverandøre er ikke oprettet!", vbcritical, "Leverandør mangler!"
  response = acdataerrcontinue
else
    response = acdataerdisplay
endif
Avatar billede admiralen Nybegynder
08. juni 2004 - 13:10 #14
Jo, jeg har slet ikke været inde og pille ved koden, har ikek erfaring med visual basic :)

og jeg har fudnet vedfejl proceduren nu ;) - så de tgår fremad :-p
08. juni 2004 - 13:11 #15
ok, et skridt ad gang :o)
Avatar billede admiralen Nybegynder
08. juni 2004 - 13:19 #16
jeps, men sidder tilsyneladende fast, da jeg ikek kan finde frem til det omtalte nummer. Hvor skulle det såt henne??
08. juni 2004 - 13:22 #17
Du starter med, at der kun står således (ca):

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.
Avatar billede admiralen Nybegynder
08. juni 2004 - 13:46 #18
har nu fundet frem til nummeret, ved at skrive som du siger :)
og fik det sørme til at virke med at der kom en fejlmeddelelse frem.

Kan man ikke lave en case struktur, for der er flere felter hvori de kan kvaje sig :)
08. juni 2004 - 13:48 #19
ja, selvfølgelig:

Select case Dataerr
  Case 3211
    msgbox "bla bla"
    response = acdataerrcontinue
  Case 3206
    msgbox "bla bla"
    response = acdataerrcontinue
  Case else
    response = acdataerrdisplay
end select
Avatar billede admiralen Nybegynder
08. juni 2004 - 14:10 #20
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å
08. juni 2004 - 14:14 #21
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.
Avatar billede admiralen Nybegynder
08. juni 2004 - 14:24 #22
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.
08. juni 2004 - 14:25 #23
nej, det er den rigtige (det var i Access 97, den stadig hed Nulstil - jeg blander det lidt sammen af og til)
Avatar billede admiralen Nybegynder
08. juni 2004 - 14:47 #24
mystisk, det bliver ved med at være det samme. Jeg prøvede tilmed i en anden formular, og stadig med samme resultat
08. juni 2004 - 14:48 #25
luk databasen og start igen, så er den i hvert fald resat
Avatar billede admiralen Nybegynder
08. juni 2004 - 15:20 #26
har jeg også prøvet :(
08. juni 2004 - 15:23 #27
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.
Avatar billede admiralen Nybegynder
08. juni 2004 - 15:37 #28
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


    DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70

Exit_Gem_Leverandør_Click:
    Exit Sub

Err_Gem_Leverandør_Click:
    MsgBox Err.Description
    Resume Exit_Gem_Leverandør_Click
   
End Sub

-----------------------------------------

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
08. juni 2004 - 15:45 #29
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)
08. juni 2004 - 15:48 #30
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?)
Avatar billede admiralen Nybegynder
08. juni 2004 - 15:48 #31
tja, det virker vel som sådan også, men bare ikke når jeg trykekr på gem knappen, først når jeg forsøger at lukke formen ned
08. juni 2004 - 15:49 #32
Det er måske fordi gem-knappen har sin egen fejlhåndtering, som overruler den anden...!?
Avatar billede admiralen Nybegynder
08. juni 2004 - 16:01 #33
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??
08. juni 2004 - 16:05 #34
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.
Avatar billede admiralen Nybegynder
08. juni 2004 - 16:08 #35
ok, det vil gøre, du er godt nok hjælpsom :)

du får pointene uanset hvad, som tak for din hjælp
08. juni 2004 - 16:13 #36
jamen, så må vi håbe, at jeg kan løse det :o)

thnx
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester