Avatar billede bbkdk Seniormester
21. oktober 2015 - 10:05 Der er 9 kommentarer og
1 løsning

Validering af felter eller hele poster

Jeg har lavet en database, hvor jeg gerne vil sikre mig, at et antal felter (nærmere angivet 4 stk.) er udfyldte.

Det jeg ønsker er, at når jeg forlader et felt (eller hele posten)skal der komme en meddelelse, hvis et eller flere ud af 4 udvalgte felter, ikke er udfyldte.

Jeg har prøvet lidt forskelligt:

På tabellens validering har jeg forsøgt med:

[Produkt] or [Fejltype] or [Fejlværdi] or [Antal] is not null
og så en fejlmeddelelse.

Så har jeg forsøgt med valideringsregler ind på hver enkelt felt med:

Is not null
Og så en fejlmeddelelse

Men det virker ikke korrekt på den underformular, der anvender valideringsreglerne.

Så har jeg sat følgende ind på feltet "Ved Udgang" i formularen:

Private Sub Produkt_Exit(Cancel As Integer)

If [Produkt] Is Null Then
MsgBox "Område skal være udfyldt"
Cancel = True

End If

Me.[Fejltype].Requery
Me.[Fejltype] = ""

End Sub

Ovenstående kode skulle jo så på hvert af de fire felter i formularen.

Men den giver en fejl, hvor "If [Produkt] Is Null Then" er markeret med gult i VBA.

Jeg kan bedst lide den sidste løsning, hvor det giver meddelelsesboksen med det samme et af felterne forlades uudfyldt.

Jeg tror ikke, de sidste 2 linier i koden har betydning for valideringen, idet de blot nulstillet det næste felt i formularen, før dette felt udfyldes.
Avatar billede terry Ekspert
21. oktober 2015 - 11:16 #1
In table design there is a field "required" set this to yes. Then it will not be possible to create a records without all fields containing data.

In the forms before update event you can also validate all fields and if the validation fails you set cancel = true. This stops records being created.
Avatar billede terry Ekspert
21. oktober 2015 - 11:18 #2
Avatar billede terry Ekspert
21. oktober 2015 - 11:19 #3
I actually prefer to test the length of the field, because if data has previously been entered into a field and then removed the field is no longer NULL but empty which isn't the same.
Avatar billede bbkdk Seniormester
21. oktober 2015 - 12:16 #4
Hej Terry
Nu har jeg forsøgt med følgende på formularens "Før opdatering":

Private Sub Form_BeforeUpdate(Cancel As Integer)
If Produkt Or Fejltype Or Fejlværdi Or Antal Is Null Then
MsgBox "felterne skal alle være udfyldt"
Cancel = True
End If
End Sub

Og med følgende på et af felterne "Ved Udgang" hændelse:

Private Sub Produkt_Exit(Cancel As Integer)
If Len([Produkt]) = 0 Then
MsgBox "Område skal være udfyldt"
Cancel = True
End If
Me.[Fejltype].Requery
Me.[Fejltype] = ""
End Sub

Men der sket intet, selvom feltet (eller posten) forlades, uden at der er indtastet noget, der kommer heller ikke en fejlmeddelelse - det kan vel ikke være "Msgbox", der er forkert udfyldt? Men det tror jeg nu ikke.
Avatar billede terry Ekspert
21. oktober 2015 - 12:40 #5
I'm away for an hour or so will look back ASAP
Avatar billede terry Ekspert
21. oktober 2015 - 13:56 #6
Try using the Isnull function


If IsNull(Produkt) Then ....
Avatar billede terry Ekspert
21. oktober 2015 - 14:00 #7
I'd put the code in the before update event. Exit can happen even if you haven't entered data into a new record
Avatar billede bbkdk Seniormester
21. oktober 2015 - 15:05 #8
Hej Terry
Så virker det - af uransagelige grunde skulle 2 af VBAérne bruge Len-kommandoen og 2 IsNull-kommandoen.
Jeg har sat dem alle på Exit, og det virker perfekt.

Tak for hjælpen - Smid et svar, så får du points.
Avatar billede terry Ekspert
21. oktober 2015 - 15:21 #9
Here it is
Avatar billede terry Ekspert
21. oktober 2015 - 19:52 #10
mange tak :-)
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