16. maj 2009 - 11:45Der er
9 kommentarer og 1 løsning
opdatere felter i formular ved "opdater"
Jeg har en formular med nogle felter som hentes fra en forespørgsel som linker nogle forskellige tabeller - det er der selvfølgelig ikke noget mærkeligt i.
Mine brugere er ikke specielt velbavandret i Access så jeg vil gerne gøre det lidt sværere for dem at lave fejlopdateringer.
F.eks. kunne jeg tænke mig, at når man skriver/opdaterer et eller flere felter i formularen - så skal man først bekræfte opdateringen af denne record ved f.eks. at skulle klikke på en knap "Opdater".
Det betyder også at hvis brugeren skulle lave nogle opdateringer i formularen - så skal knappen "Opdater" komme frem hvis brugeren går væk fra denne record - f.eks. hvis der vælges næste eller forrige record eller formularen lukkes.
Kort fortalt så skal mine brugere ikke kunne opdatere noget som helst før de er blevet bedt om at bekræfte det på en eller anden måde.
Ret beset skal du indsætte en hændelse i Current (VedAktuelt) og lukning. Der kan du bruge en MSGBOX med Ja og Nej og en betingelse. Hvis brugeren vælger Ja opdateres formularen. Vælges der Nej kan du indsætte Me.Undo
Private Sub Kommandoknap19_Click() If MsgBox("Ønsker du at opdatere posten, tryk på Ja" & vbNewLine & vbNewLine & "Ønsker du at annulere rettelsen, tryk på Nej", vbYesNo, "Bekræft opdatering") = vbYes Then DoCmd.RunCommand acCmdSave Else: Me.Undo End If End Sub
mugs - hvad gør ovenstående helt præcist? er det en knap man skal trykke på når man har fundet den record man vil kigge på, eller? hvad nu hvis brugeren går hen på en record og bare skriver i et af felterne - bliver brugeren så bedt om at tage stilling til om opdateringen skal gemmes eller?
Linien viser hvor koden er indsat, nemlig i en kommandoknap's OnClick: Private Sub Kommandoknap19_Click()
Her en msgbox med 2 muligheder / knapper vbYesNo. Den er koblet sammen med en betingelse: Hvis du trykker på Ja udføres kommandoen acCmdSave der gemmer ændringen:
If MsgBox("Ønsker du at opdatere posten, tryk på Ja" & vbNewLine & vbNewLine & "Ønsker du at annulere rettelsen, tryk på Nej", vbYesNo, "Bekræft opdatering") = vbYes Then DoCmd.RunCommand acCmdSave
Hvis du trykker på Nej udføres en anden kommando Me.Undo der annullerer indtastningen overalt i formularen og vender tilbage til den forrige indtastning / værdier: Else: Me.Undo
afslutter med en End If. Det skal du gøre når du er startet på en If.. Then handling. End If End Sub
Umiddelbart så virker det ok. Der er bare det problem at hvis brugeren vælger ikke at klikke på knappen og går til anden record eller lukker for formularen - så vil en evt. opdatering blive gemt (som normalt) - uanset om den er tilsigtet eller ej?
Men du må vurdere brugerens muligheder og indsætte en kode hvor det er nødvendigt.
Hvis brugeren skal promptes hvis formularen lukkes, må du indsætte koden i formularens Close event. Ligerledes hvis brugeren ikke må gå til en anden post, kan du fjerne navigationsknapperne nede til venstre, også MIN / MAX knapperne skal du tage stilling til.
Jo mere du vil begrænse brugerens muligheder og lave systemet idiotseikkert, jo flere ting skal du tage stilling til.
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.