05. januar 2011 - 10:27Der 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.
Teknologi, AI og forretning er i centrum på Computerworlds Cloud og AI Festival i København d. 18. og 19. september. Se hele programmet for den store konference om strategisk brug af Cloud og AI på: www.cloud-festival.dk
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
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
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.
"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" ?
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.
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.
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.