Avatar billede plato Juniormester
05. januar 2011 - 10:27 Der er 13 kommentarer og
1 løsning

DLookup, nybegynder spm. Duplicate value check

Hej Alle

Jeg er meget nybegynder til Access, så bær over med mig. :)

Jeg har en form:
"Opret_Ny_Itemnummer"
Felter i form: Itemnummer, Produkt, Items_Tabel_LinieId

En tabel:
"Items_Tabel"
Felter i tabel: ItemId, Itemnummer, LinieId og produkt
ItemId (Autonumber) og Itemnummer (Text) har begge "Primary Key"

Jeg bruger min form til at oprette nye data i tabellen. Jeg har dog søgt og søgt efter en løsning på, hvis man opretter et Itemnummer der allerede eksisterer med egen textmeddelse. Men uden held

Jeg har prøvet:
"If Not IsNull(DLookup("[KeyFieldName]", "TableName","[KeyFieldName] = '" _
& Me.MyTextBox & "'") Then
MsgBox Me.MyTextBox & " Already exists".......
End If"

hvor jeg har prøvet at ændre [KeyFieldName]og "Tablename" i en macro uden held. Har også prøvet nogle forskellige løsninger i "Before update" men uden held.

Jeg har prøvet at skrive en text i "Validation Text" i tabellen, men uden held.

Som jeg antyder. Jeg vil gerne have min egen besked box hvis man prøver at indsætte et itemnummer der allerede eksistere.

Nogen med tålmodighed der kan hjælpe?
Avatar billede jensen363 Forsker
05. januar 2011 - 10:41 #1
Hvad har du stående i Indexed i tabellen ???

(No Duplicates )
Avatar billede jensen363 Forsker
05. januar 2011 - 10:50 #2
Hvis du ikke tillader dubletter i din tabel, skulle det være muligt at få din form til at reagerer med nedenstående


Public Function FormError(frm As Form, DataErr As Integer, Response As
Integer) As Integer
If DataErr = 3022 Then
strMsg = "Duplicate value ..."
MsgBox strMsg, vbCritical, "Invalid data"
Response = acDataErrContinue
End If
End Function
Avatar billede mugs Novice
05. januar 2011 - 10:51 #3
Du kna tælle hvor mange poster i tabellen der har det samme string som den du forsøger at oprette:

Dim VARa As String, Svar
VARa = DCount("*", "Tabel1", "[Felt1]= '" & Me.Felt1 & "'")
If a > 0 Then
If MsgBox("Vil du oprette posten?", vbYesNo) = vbYes Then
DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70
Else:
Me.Undo
DoCmd.GoToRecord acForm, "DIN FORM", acPrevious, 1
Exit Sub
End If
End If
End Sub
Avatar billede plato Juniormester
05. januar 2011 - 11:32 #4
Hehe...

Jensen363. Yes (No duplicates)

Og hvor skal jeg sætte din kode ind?

Mugs:
Hvor skal jeg sætte koden ind?

Husk.... Nybegynder ;)
Avatar billede mugs Novice
05. januar 2011 - 18:12 #5
I det felt der ikke må indeholde duplicates i BeforeUpdate
Avatar billede mugs Novice
05. januar 2011 - 18:15 #6
Når feltet ikke må indeholde duplicates, kan koden forenkles:

Dim VARa As String
VARa = DCount("*", "Tabel1", "[Felt1]= '" & Me.Felt1 & "'")
If VARa > 0 Then
MsgBox "Du forsøger at oprette duplicates"
Me.Undo
Exit Sub
End If
End Sub

Husk at ændre objektnavnene Tabel1 og Felt1 til navnene på dine objekter.
Avatar billede plato Juniormester
06. januar 2011 - 10:12 #7
Jeg får denne besked:

"The Expression you entered contains invalid syntax.

You may have entered an operand without an operator."

Jeg gjorde følgende:

Klikkede på feltet i formen der IKKE må indeholde duplicates. Klikkede på de ... 3 prikker udfor "Before Update" valgte Expression builder og copy pastede dette ind:

Dim VARa As String
VARa = DCount("*", "Items_Tabel", "[Itemnummer]= '" & Me.Itemnummer & "'")
If VARa > 0 Then
MsgBox "Du forsøger at oprette duplicates"
Me.Undo
Exit Sub
End If
End Sub

Tænkte på om SUB ikke skal have en start når der er "Sub exit" og "End Sub" ?
Avatar billede mugs Novice
06. januar 2011 - 10:20 #8
Naturligvis skal der være en start på sub'en. Den skulle gerne komme når du indsætter koden. Så skla der komme det der hedder "procedurekroppen" med en start og slut. Du skal så ikke have End Sub med fra min kode.
Avatar billede mugs Novice
06. januar 2011 - 10:31 #9
Hvis Itemnummer er et numerisk felt, skal du undlade apostrofferne omkring kriteriet således:

"[Itemnummer]= " & Me.Itemnummer & "")
Avatar billede plato Juniormester
06. januar 2011 - 11:24 #10
Itemnummer er et text felt.

Når jeg vælger expressionbuilder kommer der ingen start? Skal jeg i basic?
Avatar billede plato Juniormester
06. januar 2011 - 11:27 #11
Jeg prøvede at vælge codebuilder og så indsætte koden. Men det giver stadig fejl. Må jeg evt. sende databasen til dig? Det er bare en test DB før jeg implementere det i den rigtige, så den fylder intet.
Avatar billede plato Juniormester
06. januar 2011 - 11:29 #12
Fejlen er forøvrigt:

"Compile error:
Expected: type name"
Avatar billede plato Juniormester
06. januar 2011 - 11:32 #13
Hehe...Det virker nu. En linie blev brudt i 2, skulle bare slette et mellemrum så det blev til én linie.

Tusind tak!

Husk svar :)
Avatar billede mugs Novice
06. januar 2011 - 11:42 #14
Fint det fungerer, ellers vender du blot tilbage.
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