Avatar billede susanne_larsen Nybegynder
04. september 2002 - 09:44 Der er 19 kommentarer og
1 løsning

Ændring i datofelt

oki here we go again :)

problem - har datofelt (Købt_dato) hvor bruger indtaster en dato. Ønsker at bruger promtes hvis der foretages ændringer i det indtastede datofelt.
Havde i første omgang placeret koden på "Ved ændring" - men det duer absolut ikke, da msgboxen så vises ved hvert eneste tal der tastes ind i feltet, og så dumme er brugerne altså heller ikke..... G***

Har så lagt den på "før opdatering" i stedet for. Det fungerer næsten ok ;) altså lige bortset fra hvis bruger har skrevet en anden dato, og så vælger NEJ til at bruge den nye dato - - > Access sletter så det indtastede i datofeltet, OG den oprindeligt indtastede dato er også væk - skod :/ Skyldes selvfølgelig at jeg har brugt Me.Undo - er der nogen der har en rigtig god ide, til hvordan jeg kan løses problemet

Yderligere for at komplicere det hele - datoen indtastes ikke altid med det samme, så der vil være records hvor datofeltet er tomt :/
__________________________________

Private Sub Købt_dato_BeforeUpdate(Cancel As Integer)


    If Not Me.NewRecord Then
   
        If MsgBox("Du har foretaget en ændring i datofeltet, der oplyser om hvornår varen " & Me.VareNavn & " er købt." + vbLf + vbLf + "Er du HELT sikker på du ønsker at ændre datoen til den " & Me.Købt_dato & " ??", vbCritical + vbYesNo, "Købsdato ændret....") = vbNo Then
            DoCmd.CancelEvent
            Me.Undo
        End If
    End If

End Sub

_______________________________________
Avatar billede terry Ekspert
04. september 2002 - 09:51 #1
jkrons!

Susanne take a look at the OldValue property
Avatar billede susanne_larsen Nybegynder
04. september 2002 - 10:35 #2
mhh har syslet en del med OldValue, men hvis der ikke er indtastet nogen dato i feltet får jeg fejlen:

"Runtime error 94 - invalid use of null"

har i stedet for brugt følgendende:

______________________________________________

Private Sub Købt_dato_BeforeUpdate(Cancel As Integer)

On Error GoTo Err_Handler

    If Not Me.NewRecord Then
   
        If MsgBox("Du har foretaget en ændring i datofeltet, der oplyser om hvornår varen " & Me.VareNavn & " er købt." + vbLf + vbLf + "Er du HELT sikker på du ønsker at ændre datoen til den " & Me.Købt_dato & " ??", vbCritical + vbYesNo, "Købsdato ændret....") = vbNo Then
            DoCmd.CancelEvent
            Me.Undo
        End If
    End If
   
    ' tja send 2 x ESC - er snyd :)
    SendKeys "{esc}{esc}", False
   
    'Købt_dato.Text = Købt_dato.OldValue
   
    Me.Refresh
   
    Exit Sub
   

Err_Handler: 
     
    MsgBox "ERROR:" & Err.Description
   
End Sub
_____________________________________________________

men spørgsmålet er om jeg beder om problemer når jeg fusker mig ud af sagen på den måde, hvad siger I ?
Avatar billede terry Ekspert
04. september 2002 - 10:55 #3
Hi Susanne

You say that if no date has been entered then you get an error! You are also testing that the record is one that already exists, so you should ask yourslef IF it should be allowed to create a record WITHOUT a date and IF it is then you could also allow the entry of a date IF it is empty and prompt if it is not
Avatar billede terry Ekspert
04. september 2002 - 11:01 #4
In your BEFORE UPDATE event use something like this


If IsNull(Me.YourField.OldValue) Then Exit Sub 'Allow entry
   
    If (Me.YourField <> Me.YourField.OldValue) Then 'Changed
Avatar billede susanne_larsen Nybegynder
04. september 2002 - 11:16 #5
Hi Terry
I´ll have to allow that the user skips købt_dato, as the user sometimes creates a record, before having the actual date on an invoice - rather annoying, but so it is :/

U have a point though - I think I´ll just talk to them....
Avatar billede susanne_larsen Nybegynder
04. september 2002 - 11:52 #6
nearly there :D

would really like to use OldValue as I´m not sure how reliable ít is just sending 2x ESC :/

_____________________________________________

Private Sub Købt_dato_BeforeUpdate(Cancel As Integer)

Dim PrevValue As Variant

    PrevValue = Forms!frmVareInfo![Købt dato].OldValue

    On Error GoTo Err_Handler
   
    If IsNull(Me.Købt_dato.OldValue) Then Exit Sub
     
    If Not Me.NewRecord Then
   
        If MsgBox("Du har foretaget en ændring i datofeltet, der oplyser om hvornår varen " & Me.VareNavn & " er købt." + vbLf + vbLf + "Er du HELT sikker på du ønsker at ændre datoen til den " & Me.Købt_dato & " ??", vbCritical + vbYesNo, "Købsdato ændret....") = vbNo Then
            DoCmd.CancelEvent
            Me.Undo
        End If
    End If

    Me.Købt_dato = PrevValue
     
    Exit Sub

Err_Handler: 
     
    MsgBox "ERROR:" & Err.Description
   
End Sub
_________________________________________________


MEN af en eller anden grund kan OldValue absolut ikke lide min Err_Handler - der insisteres i hvert fald på at jeg lige skal have besked på, at det ikke kan lade sig gøre at gemme - maybee I should just stick with "SendKeys "{esc}{esc}", False" ??
Avatar billede susanne_larsen Nybegynder
04. september 2002 - 11:58 #7
selvfølgelig kan jeg bare snyde og skrive

Err_Handler: 
     
    Exit Sub
   
End Sub

.....men hvor smart er det lige ;D
Avatar billede terry Ekspert
04. september 2002 - 12:15 #8
Why do you need to "snyde"?

IF there IS a date then prompt the user and revert to the old value (me.Købt_dato.OldValue) if he answers no.

If there is no old value (If IsNull(me.Købt_dato.OldValue)) then just accept the entered value.
Avatar billede susanne_larsen Nybegynder
04. september 2002 - 12:28 #9
If I use

If IsNull(Me.Købt_dato.OldValue) Then Exit Sub
'and
If (Me.YourField <> Me.YourField.OldValue) Then 'xxxxx

or the combination 11:52 the alterations are acceptet but Access also displays the error:

"ERROR: Den egenskab eller funktion, der er angivet for egenskaben FørOpdatering eller Valideringsregl for dette felt, forhindrer Varestyring i at gemme dataene i feltet"

(Varestyring is the name of my dB)
Avatar billede terry Ekspert
04. september 2002 - 12:39 #10
have you tried replacing

DoCmd.CancelEvent
Me.Undo

with
Me.YourField = Me.YourField.OldValue
Avatar billede susanne_larsen Nybegynder
04. september 2002 - 13:47 #11
jep makes no difference - I still get the error :(
Avatar billede terry Ekspert
04. september 2002 - 13:49 #12
you can send the db to dktebrsa@europe.lego.com and I will take a look if you want
Avatar billede susanne_larsen Nybegynder
04. september 2002 - 13:55 #13
I wish I could, but there are a lot of confidiential stuff in the dB :/

....but I can make a small dB containg my problem I hope :)
just a sec....
Avatar billede susanne_larsen Nybegynder
04. september 2002 - 14:09 #14
I have send U an example
Avatar billede terry Ekspert
04. september 2002 - 14:12 #15
OK
Avatar billede susanne_larsen Nybegynder
04. september 2002 - 15:08 #16
thnx Terry

koden skal være som følger


Private Sub Købt_dato_BeforeUpdate(Cancel As Integer)

    On Error GoTo Err_Handler 
   
    ' er datofeltet tomt, accepteres det indtastede
    If IsNull(Me.Købt_dato.OldValue) Then Exit Sub
   
    If Not Me.NewRecord Then
   
        If MsgBox("Du har foretaget en ændring i datofeltet, der oplyser om hvornår varen " & Me.VareNavn & " er købt." + vbLf + vbLf + "Er du HELT sikker på du ønsker at ændre datoen til den " & Me.Købt_dato & " ??", vbCritical + vbYesNo, "Købsdato ændret....") = vbNo Then
        '    opdater ikke købt_dato med ændringerne
            Me.Undo
           
            Else
            ' accepter ændringerne dvs. =vbYes - ikke nødvendigt at skrive noget
            ' så ELSE er faktisk ikke nødvendigt
           
        End If
    End If
       
    Exit Sub


Err_Handler:
   
    MsgBox "ERROR:" & Err.Description
       
End Sub

mhh VBA in Access really is strange sometimes :D
Avatar billede terry Ekspert
04. september 2002 - 15:11 #17
your welcome :o)
Avatar billede susanne_larsen Nybegynder
04. september 2002 - 15:15 #18
can U tell me why my code didn´t work 100% - that is if U have the time ??
Avatar billede terry Ekspert
04. september 2002 - 15:24 #19
In the example I sent you will see that I had commented out the line, this caused an error, and as it wasnt needed I removed it :o)

Me.Købt_dato=Me.Købt_dato.OldValue
Avatar billede susanne_larsen Nybegynder
04. september 2002 - 19:39 #20
I still get lost in the forrest now and then ;)

and right U are why make the code complicated when it is possible to solve the problem with less lines :D
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