Avatar billede andersjensen Nybegynder
08. november 2000 - 00:12 Der er 9 kommentarer og
1 løsning

forhindre indtastning af samme værdi i et felt i en formular

Hallo
Er der nogen der kan hjælpe mig.
Jeg har en formular med nogle forskellige felter. der er tre specifikke felter der spiller en stor rolle i databasen. Disse tre felter kalder jeg for Nr1, Nr2, og Nr3, kan jeg under egenskaber for det aktuelle felt før opdatering (before opdate), på en eller anden måde forhindre at brugeren indtaster en værdi der allerede er brugt. Det skal fungere på denne måde: hvis brugeren indtaster en værdi der allerede er brugt i samme felt i en anden post, skal der poppe en meddelse op til brugeren.Det lidt drilske er at værdien gerne må findes i Nr2, men ikke i Nr1 o.s.v. De forskellige muligheder for at indexsere i tabeldesign fungere ikke efter hensigten, det har jeg arbejdet en del med. Kunne man bruge en eller anden form for valideringsregl for det aktuelle felt og ikke globalt for formularen?? det driller meget. Til slut et lille praktisk eks.

Brugeren opretter en ny post.
I feltet Nr1 indtastet værdien 456, denne værdi findes ikke i feltet Nr1 i nogen anden post, men findes feks i felt Nr2 i en anden post, derfor ingen meddelse til brugeren da dette er tilladt o.s.v.

Som sagt det skal helst fungere på formularniveu for det aktuelle felt, forstået på den måde at selvom der ikke er defineret nogen form for Indexregler på tabelniveu feks  ingen dubletter skal det helst køre aligevel.Puha sikken en smøre håber nogen der kan hjælpe.


*SSSS*

andersjensen
Avatar billede lens Nybegynder
08. november 2000 - 01:12 #1
Kunne du ikke, lave valideringsregler til alle tre felter i koden: (pseudo)
if input not in \"feltnavn\"
indsæt....
else
fejl!

eller det har du måske allerede prøvet
Avatar billede janbangm Nybegynder
08. november 2000 - 08:17 #2
Du kan bruge DAO-Modellen til den gennemløbe din table. Her har jeg lavet en funktion der liger ldt, menlig hvis den samme post bliver indtastet 3 ganger kommer der en box frem. Det er i DAO ligegyldigt om det du vil teste er i forskellige feltet. Jeg kan give et bud, men jeg sidder ikke hjemme, hvor jeg har mine funktoner, så derfor kan der være fejl i.

Dim R as Recordset.
Set R = CurrentDB.Openrecordset(\"Tabelnavn\"
Dim flag as Byte

R.Movefirst
Do until R.EOF

If me.NR1 = R(X) og me.NR1 = r(Y) Then flag = 1
r.Movenext
Loop

If flag = 1 Then
Msgbox \"Denne post findes iforvejen\"
End if


R(X) og R(Y) er felter i tabellen. Du skal alså tælle felterne i tabelen startende fra 0

Hvis du ikke kan få det til at virke, så skrive. Jeg er hjemme i eftermiddag, hvor jeg har mine databaser. Så bliver det lettere at hjælpe

Avatar billede andersjensen Nybegynder
08. november 2000 - 10:52 #3
Hej lens
Tak for indlægget kunne du uddybe det lidt mere


*sss* andersjensen

Til janbangm
Har prøvet diet eks., men det virker ikke håber at vende tilbage i eftermiddag
Avatar billede andersjensen Nybegynder
08. november 2000 - 12:40 #4
Til jangbangm
Hvis nu man kun havede et felt feks, Nr1, kunne man så bruge dit kodeforslag, eller en mere simpel valideringsregl.


*sss* andersjensen
Avatar billede janbangm Nybegynder
08. november 2000 - 14:50 #5
Jamen jeg mener at du kan bruge mit forslag uanset hvor mange felter du hvor.

Jeg kan umildbart se 2 fejl i min kode.
1. Der skal være ) efter tabelnavn.
2. du kan prøve at skrive

Dim svar as byte
Svar = Msgbox \"Denne post findes iforvejen\"

Hvis sker der når du køre koden
Avatar billede andersjensen Nybegynder
08. november 2000 - 15:19 #6
Det tror jeg også den gør, men kan koden også fungere selv om den kun skal chekke felt Nr1, i tabellen. felt Nr2, og Nr3 er nedlagt.
et kodeeks på dette ville bare være dejligt

Mvh andersjensen
Avatar billede janbangm Nybegynder
08. november 2000 - 15:45 #7
Hej igen

Ja det kan og jeg kan også lave et kodeeksempel. Men hvis jeg har forstået det rigtigt, har du nu kun et felt tilbage. Hvis der er rigtig, kan du indeksere dette men ingen Ja - ingen dubletter.
Det vil have den samme virkning.
Avatar billede andersjensen Nybegynder
08. november 2000 - 16:04 #8
rigtigt, men senere vil der komme flere felter på formularen som skal opfylde de samme kriterier som på felt Nr1, ideen er at hvis koden virker på felt Nr1,vil jeg senere bruge koden på evt. nye felter

Mvh  andersjensen
Avatar billede janbangm Nybegynder
08. november 2000 - 16:51 #9
Hej igen

Her er koden
Private Sub Navn_Exit(Cancel As Integer)
Dim RC As Recordset
Dim flag As Byte
Dim svar As Byte
  Set RC = CurrentDb.OpenRecordset(\"Kunde\")
  RC.MoveFirst
  Do Until RC.EOF
    If Me.Navn = RC(1) Then flag = 1
  RC.MoveNext
  Loop
 
  If flag = 1 Then
    svar = MsgBox(\"Dette er indtasted\", vbOKOnly, \"VB\")
  End If
 
   
End Sub

Kan kan udbygger, så den sletter det indtastet efter man har klikke på OK.

Hvis du ender en e-mail til access@EDB.dk, skal jeg sende den database jeg har lavet til dig. Den er lavet version 97.
Avatar billede andersjensen Nybegynder
08. november 2000 - 17:19 #10
Tusind tak for hjælpen, nu har jeg noget atarbejde vidre med
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