Avatar billede jan Novice
05. juni 2003 - 19:28 Der er 14 kommentarer og
1 løsning

Skrivebeskyttelse og tomme felter

I en flerbruger database har jeg behov for at skrivebeskytte imod utilsigtet ændringer af indtastet data.

Meddelsen skal kun aktiveres hvis féltet er udfyldt, dvs at når feltet er tom / ikke udfyldt skal meddelsen ikke poppe op.
Det kan jeg ikke rigtig få på plads. Hvad gør jeg galt når jeg skriver.

Private Sub Arbejdsgiver_BeforeUpdate(Cancel As Integer)
      If Not IsNull(Arbejdsgiver) Then
        If MsgBox("Du har ændret data! Er du sikker på at du vil gemme ændringerne?", vbQuestion + vbYesNo, "Gem ændringer?") = vbNo Then
            DoCmd.CancelEvent
            Me.Undo
        End If
    End If
End Sub

Hilsen JAN
Avatar billede mugs Novice
05. juni 2003 - 19:32 #1
Jeg har ikke afprøvet dette, men jeg vil mene, at fejlen kan ligge i din linie DoCmd.CancelEvent.

Når du bruger denne, vil du jo annullere den foregående hændelse, i dette tilfælde din MsgBox.
Avatar billede mugs Novice
05. juni 2003 - 19:37 #2
Afprøvet og det fungerer: slet DoCmd.CancelEvent
Avatar billede jan Novice
05. juni 2003 - 19:49 #3
Desværre ikke helt.
Hvis der er indtastet data og jeg sletter dem og feltet ´nu er blank så popper meddelsen ikke op.
Men når jeg går ind i et tom felt og udfylder det med data popper Msgbox'en op, og det er præsis i den situation jeg godt vil ha at Msgbox'en ikke fremkommer med sin forespørgelse

jan
Avatar billede mugs Novice
05. juni 2003 - 19:51 #4
Er der tale om en ny post?
Avatar billede terry Ekspert
05. juni 2003 - 19:52 #5
If MsgBox("Du har ændret data! Er du sikker på at du vil gemme ændringerne?", vbQuestion + vbYesNo, "Gem ændringer?") = vbNo Then

Cancel = True
Avatar billede terry Ekspert
05. juni 2003 - 19:54 #6
LOOK at the declaration of this event

Private Sub Arbejdsgiver_BeforeUpdate(Cancel As Integer)

Cancel is here to "undo" the changes made, setting it to true does just that :o)
Avatar billede jan Novice
05. juni 2003 - 20:26 #7
Jeg må indrømme jeg ikke kan få det til at fungerer.
Der er tale både om nye poster og tomme felter på tidligere oprettet poster hvor jeg godt vil undgå at msgbox popper op.
Jeg har prøvet i makro, men har her problemer med hvordan jeg skal difiner betingelsen for at vise meddelsesboxen - idet den ikke skal poppe op hvis fletet IsNull.

jan
Avatar billede mugs Novice
05. juni 2003 - 20:28 #8
Du skal dele opgaven mellem nye og allerede eksisterende poster.

Når der er tale om nye poster, kan du bruge betingelsen:

If Me.NewRecord Then

Som indsættes i formularens OnCurrent Event (Vedaktuel).
Avatar billede terry Ekspert
05. juni 2003 - 20:42 #9
Private Sub Arbejdsgiver_BeforeUpdate(Cancel As Integer)

If NOT Me.newrecord and len(me.Arbejdsgiver) > 0 Then
  If MsgBox("Du har ændret data! Er du sikker på at du vil gemme ændringerne?", vbQuestion + vbYesNo, "Gem ændringer?") = vbNo Then
 
  Cancel = True
  End If



End Sub
Avatar billede jan Novice
05. juni 2003 - 21:08 #10
Nu bliver der meget bedre med Terrys svar. Den er lige ved at være der. Det eneste problem der står tilbage er hvis sletter alt data i et felt og det står tomt fremkommer meddelsen ikke. Msgbox kommer derimod hvis man delvist sletter noget af teksten.
Avatar billede mugs Novice
05. juni 2003 - 21:11 #11
Se på terry's betingelse. Feltet me.Arbejdsgiver > 0 når du bruger Len. Jeg ved ikke om du kan bruge >=0 men prøv lige.
Avatar billede jan Novice
05. juni 2003 - 21:44 #12
Det hjalp desværre ikke.
Avatar billede mugs Novice
05. juni 2003 - 21:49 #13
Jeg må indrømme, at siden terry kom ind i billedet har jeg ikke afprøvet mine forslag. Men et nyt gæt er:

If NOT Me.newrecord and len(me.Arbejdsgiver) > 0 Or If IsNull(me.Arbejdsgiver) Then
  If MsgBox("Du har ændret data! Er du sikker på at du vil gemme ændringerne?", vbQuestion + vbYesNo, "Gem ændringer?") = vbNo Then
Avatar billede jan Novice
05. juni 2003 - 22:04 #14
Nu er den der. Jeg fjernede lige IF i den sidste del så der stå Or IsNull....

Fedt tak til alle - nu er jeg ny her hvem skal ha point !!!
Avatar billede mugs Novice
05. juni 2003 - 22:08 #15
kun du bestemmer hvem der skal have point. Du må vurdere hvem der har bidraget til løsningen. husk at du kan dele point mellem flere bidragsydere.
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