Avatar billede nickmartin Nybegynder
13. november 2007 - 12:19 Der er 11 kommentarer og
1 løsning

Kontrol af indtastning i formular

Hej alle,

Egentligt bygger mit spørgsmål på følgende:
http://www.eksperten.dk/spm/64861

Jeg kan simpelhent ikke få skidtet til at virke, og jeg får alle former for fejl når jeg prøver at ændre koden. Jeg bruger access 2000 dansk version.

Private Sub kontonr_BeforeUpdate(Cancel As Integer)
  If Me.NewRecord Then
      If DCount("kontonr", "Fastrenter", "kontonr = Me!kontonr") > 0 Then
        MsgBox "Kontonummer findes i forvejen!", vbCritical
        DoCmd.CancelEvent
        Exit Sub
      End If
  End If
End Sub

Giver følgende fejl:
Run-time error '2001'
Du har annuleret den forrige handling

Hvad gør jeg galt?
Avatar billede nickmartin Nybegynder
13. november 2007 - 12:30 #1
Tilføjelse:

Jeg har med vilje fjernet alle de escape chars (\) fra koden i det oprindelige spørgsmål. VB editoren i min access brokkede sig kraftigt over det.

Denne uden "  " ved kriteriet:
Private Sub kontonr_BeforeUpdate(Cancel As Integer)
  If Me.NewRecord Then
      If DCount("*", "Fastrenter", kontonr = Me!kontonr) > 0 Then
        MsgBox "Kontonummer findes i forvejen!", vbCritical
        DoCmd.CancelEvent
        Exit Sub
      End If
  End If
End Sub

Skriver fejlbeskeden, men gør det nærmest konsekvent hver gang, selvom kontonummeret ikke findes i forvejen.
Avatar billede rosco Novice
13. november 2007 - 12:37 #2
Prøv i stedet at lægge koden her.

Private Sub Form_Current()
Avatar billede rosco Novice
13. november 2007 - 12:50 #3
Glem mit sidste forslag.
Prøv dette.

Private Sub kontonr_BeforeUpdate(Cancel As Integer)
On Error GoTo Errorhandler
DoCmd.SetWarnings False
  If Me.NewRecord Then
      If DCount("*", "Fastrenter", kontonr = Me!kontonr) > 0 Then
        MsgBox "Kontonummer findes i forvejen!", vbCritical
        DoCmd.CancelEvent
        Exit Sub
      End If
  End If
  Errorhandler:
If Error = 2001 Then
Me.Undo
End If
DoCmd.SetWarnings True
End Sub

End Sub
Avatar billede nickmartin Nybegynder
13. november 2007 - 12:51 #4
Samme fejl:

    If DCount("*", "Fastrenter", "kontonr = Me!kontonr") > 0 Then

Du har annuleret den forrige handling.

Tror også mit problem er jeg ikke ved præcis hvordan den DCount kode skal skrives. Formålet med det hele var at den skulle undersøge tabellen for at se om det indtastede i formularen allerede findes i tabellen. Helst ved fokusskifte fra indtastningsfeltet. Men pånuværende tidspunkt er jeg parat til hvad som helst for at få det til at virke :)
Avatar billede nickmartin Nybegynder
13. november 2007 - 12:56 #5
Hmmm dit sidste forslag gør bare at fejl teksten kommer frem næsten hele tiden. Eneste tidspunkt jeg ikke får den, er når jeg hopper til ny post, og straks derefter hopper videre fra feltet (kontonr) hvis det er blankt.

Hvis jeg indtaster et tal, som jeg ved ikke findes i tabellen får jeg stadig fejl teksten (kontonummer findes i forvejen).
Avatar billede rosco Novice
13. november 2007 - 12:59 #6
Jeg har brugt denne til kontrol af on det indtastede leverandørvarenr. ikke allerede var anvendt.Måske det kan hjælpe dig på vej.

Private Sub Form_BeforeUpdate(Cancel As Integer)
On Error GoTo Errorhandler
DoCmd.SetWarnings False
If DCount("*", "tblvareliste", "[Lnummer] = '" & Me!LVnummer & "' AND VareID <> " & Me!VareID) > 0 Then
      MsgBox "Dette leverandør-varenummer findes i forvejen!" & vbNewLine & "", vbCritical
      DoCmd.CancelEvent
      Me.Undo
      DoCmd.GoToRecord , , acNewRec
      Me.Vnr.SetFocus
     
      Exit Sub
  End If
 
Errorhandler:
If Error = 2001 Then
Me.Undo
End If
DoCmd.SetWarnings True
End Sub
Avatar billede rosco Novice
13. november 2007 - 13:04 #7
Prøv at fjerne koden fra Exit_kontonr.
Avatar billede rosco Novice
13. november 2007 - 13:12 #8
Jeg sloges med samme problem da jeg endte med at lægge koden (fra forrige kommentar) ved Form_BeforeUpdate , og refresh på et senere felt (ikke på det felt det vedrører).
Avatar billede nickmartin Nybegynder
13. november 2007 - 13:13 #9
Nu virker det sq!

Private Sub kontonr_BeforeUpdate(Cancel As Integer)
  If Me.NewRecord Then
      If DCount("*", "Fastrenter", "[kontonr] = '" & Me!kontonr & "' AND Id <> " & Me!Id) > 0 Then
        MsgBox "Kontonummer findes i forvejen!", vbCritical
        DoCmd.CancelEvent
        Exit Sub
      End If
  End If
End Sub

Tror jeg manglede '  ' rundt om Me!kontonr

Mange tak for hjælpen!

Send mig et svar så skal du have point :)
Avatar billede rosco Novice
13. november 2007 - 13:19 #10
Godt du fik løst problemet.
Avatar billede nickmartin Nybegynder
13. november 2007 - 13:28 #11
Ja super lækkert :)
Avatar billede terry Ekspert
13. november 2007 - 14:24 #12
I can see that the problem is solved so this is juts for interest.

The beforeupdate event receives a parameter (cancel) if you want to cancel the update then just set the paramater to true

so instead of DoCmd.CancelEvent

use

Cancel = True
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