Avatar billede knudj Nybegynder
12. februar 2005 - 19:30 Der er 12 kommentarer og
1 løsning

forhindre dubletter

Hej
Jeg søger hjælp til at forhindre oprettelse af dublet poster eller alternativt finde dubletposter.
Jeg har en formular der består af flere relaterede tabeller.  Mit problem går ud på at forhindre at der ved oprettelsen af en ny post ikke vil være muligt at oprette en post hvor inholdet af  felt1 og felt2 er lig indholdet i felt1 og felt2 i en tidligere post. Felt1 og felt2 kommer fra samme tabel. Jeg har læst et tidligere indlæg om samme emne men da tror jeg ikke der var tale om flere relaterede tabeller, ihvertfald hvirkede fremgangsmåden ikke i mit tilfælde.
Da det kun er  noget der vil ske ved en fejl kunne jeg alternativt bruge opskriften påhvordan kan jeg lave en forespørgelse der checker om der findes dubletter og så  manuelt slette dem.
Mvh
Knud
Avatar billede plx Nybegynder
12. februar 2005 - 19:35 #1
En mulighed er at indeksere feltet og vælge at der ikke må forekomme dubletter..
Avatar billede knudj Nybegynder
12. februar 2005 - 19:39 #2
Hej
det har jeg prøvet  men problemmet er at der gerne må komme dubletter at felt1 og  felt2 hver for sig men ikke sammen
Mvh
Knud
Avatar billede plx Nybegynder
12. februar 2005 - 19:51 #3
Så kan du lade indekset løbe over flere felter. Fra hjælpefilen:


Oprette et indeks med flere felter
Åbn tabellen i designvisning.


Klik på Indeks  på værktøjslinjen.


Skriv i første tomme række i kolonnen Indeksnavn et navn på indekset. Du kan navngive indekset efter et af indeksfelterne eller bruge et andet passende navn.


Klik på pilen i kolonnen Feltnavn, og marker det første felt for indekset.


Marker i den anden række i kolonnen Feltnavn det andet felt for indekset. Lad kolonnen Indeksnavn stå tom i rækken. Gentag dette trin, indtil du har markeret alle de felter, du vil medtage i dette indeks. Du kan bruge op til 10 felter.
Avatar billede mugs Novice
12. februar 2005 - 20:19 #4
Du kan benytte funktionen dCount med 2 kriterier:

If DCount("*", "Tabel1", "[Felt1]= '" & Me.Felt1 & "' And [Felt2]= " & Me.Felt2 & "") >0 Then
Msgbox "Der er flere ens poster"
Me Undo
End If

I dette tilfælde er Felt1 et alfanumerisk felt og Felt2 er numerisk
Avatar billede knudj Nybegynder
12. februar 2005 - 20:21 #5
Hej -  det ser ud som det virker som jeg havde ønsket -  tak for hjælpen

mvh

Knud
Avatar billede knudj Nybegynder
16. februar 2005 - 20:14 #6
Til Mugs: Jeg har lige afprøvet din metode, men kan umiddelbart ikke få den til at virke. Hvor skal jeg indsætte den? Altså under hvilken hændelse ?
Avatar billede mugs Novice
16. februar 2005 - 20:28 #7
Prøv at indsætte den i formularens BeforeUpdate. Får du nogen fejlmelding?
Avatar billede knudj Nybegynder
16. februar 2005 - 20:34 #8
Ja, den giver en fejlmeddelse hvor den siger:

Run-Time Error '3464'
Datatyperne stemmer ikke overens med kriterieudtrykket

Den metode plx gav mig, virker fint, men jeg kunne godt tænke mig at selv bestemme den fejlmeddelse der skal komme op. Kan det evt. lade sig gøre?
Avatar billede mugs Novice
16. februar 2005 - 20:36 #9
"Datatyperne stemmer ikke overens med kriterieudtrykket"

Betyder, at du prøver at sammenligne alfanumeriske data med numeriske, som jeg ofså skrev i mit svar. Hvilke felttyper arbejder du med?
Avatar billede knudj Nybegynder
16. februar 2005 - 20:43 #10
Det er to alfanummeriske felter. HVad skal der ændres for at dette fungere ? Undskyld jeg lige overså det du havde skrevet før.
Avatar billede mugs Novice
16. februar 2005 - 20:46 #11
Prøv denne:

MsgBox DCount("*", "Tabel1", "[Felt1]= '" & Me.Felt1 & "' And [Felt2]= '" & Me.Felt2 & "'")
Avatar billede knudj Nybegynder
16. februar 2005 - 20:56 #12
Okay, nu sker der et eller andet. Men den søger kun på [Felt1], og denne findes der flere af.
Avatar billede knudj Nybegynder
16. februar 2005 - 22:01 #13
Jeg har klaret problemmet. Jeg benytter mig blot af plx metode, og tilføjer følgende i formularen:

Private Sub Form_Error(DataErr As Integer, Response As Integer)
Const conDuplicateKey = 3022 '3022 er duplicate indeks
Dim strMsg As String

If DataErr = conDuplicateKey Then
    Response = acDataErrContinue
    strMsg = "Der findes allerede en transport med dette læsnr. Ændre evt. Læs nr'et eller tryk F3 for at fortryde indtastningen."
    MsgBox strMsg
End If

End Sub

Mange tak for hjælpen, og nu da plx ikke har givet noget svar, går pointene til mugs, som tak for hjælpen og ideen :)
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