07. februar 2004 - 18:23Der er
36 kommentarer og 1 løsning
Advarsel ved oprettelse af dubletter
Hvordan gøres det smartest. det er intet problem, at finde dem, men jeg vil efter indtastning i det sidste af fire felter som gør recorden til en dublet, vise en msgbox der indeholder de fundne værdier FeltA,FeltB,FeltC.......
Det skal dog være tilladt at oprette recorden, det er blot in info! Måske lidt i stil med:
Var = Select first(tbl.felt1),first(tbl.felt2), count(tbl.felt1),count(tbl.felt2) from tbl group by tbl.felt1, tbl.felt2 having ((count(tbl.felt1) >1) AND (count(tbl.felt2) >1))
Den virker ikke - der mangler lidt funktionalitet og msgbox, hvordan gør jeg det korrekt? where
Dim a As String, Svar, b As Integer a = DCount("*", "Tabel1", "[Felt1]= '" & Me.Felt1 & "'") b = DCount("*", "Tabel1", "[Felt2]= " & Me.Felt2 & "") If a > 0 And b > 0 Then Svar = MsgBox(Prompt:="Posten eksisterer, ønsker du at oprette den?", Title:="Dubletter", Buttons:=vbYesNo) Else: Exit Sub End If End Sub
Dim a As String, Svar, b As Integer a = DCount("*", "Tabel1", "[Felt1]= '" & Me.Felt1 & "'") b = DCount("*", "Tabel1", "[Felt2]= " & Me.Felt2 & "") If a > 0 And b > 0 Then If MsgBox("Vil du oprette posten?", vbYesNo) = vbYes Then DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70 Else: Me.Undo DoCmd.GoToRecord acForm, "Form1", acPrevious, 1 Exit Sub End If End If
Måske du kan huske tabelnavnene nedenfor, anyway jeg har dette i beforeupdate
Private Sub Behandler_BeforeUpdate(Cancel As Integer) Dim a As String, Svar, b As String, c As String a = DCount("*", "T_BorgerBesøgscyklus", "Besøgsdato= '" & Me.Besøgsdato & "'") b = DCount("*", "T_BorgerBesøgscyklus", "Behandler= " & Me.Behandler & "") c = DCount("*", "T_BorgerBesøgscyklus", "[Fra kl]= " & Me.[Fra kl] & "") If a > 0 And b > 0 Then Svar = MsgBox(Prompt:="Posten eksisterer, ønsker du at oprette den?", Title:="Dubletter", Buttons:=vbYesNo) Else: Exit Sub End If End Sub
Feltet Behandler er tekst, Besøgsdato og Fra kl er 'Dato klokkeslet'
Jeg får fejl om, at datatyperne ikke stemmer overens?? Kan jeg lade være med at angive type på var?
Kriterier ved tekstfelter skal omsluttes af apostroffer (') a = DCount("*", "Tabel1", "[Felt1]= '" & Me.Felt1 & "'")
Kriterier ved numeriske felter skal ikke have apostroffer: b = DCount("*", "Tabel1", "[Felt2]= " & Me.Felt2 & "")
Pas på du ikke tager fejl af apostroftegnet ' og anførselstegnet ", og da feltet behandler er en string skal den have apostroffer: b = DCount("*", "T_BorgerBesøgscyklus", "Behandler= '" & Me.Behandler & "'")
Tak for fremsendte, men jeg kan dog stadig ikke få identificeret om en post med samme: dato, fra kl, behandler eksisterer. Det ser sådan her ud p.t.
Private Sub Behandler_BeforeUpdate(Cancel As Integer) Dim a As Date, Svar, b As String, c As Date, d As String, e As String, f As Integer a = DCount("*", "T_BorgerBesøgscyklus", "Besøgsdato= " & Me.Besøgsdato & "") 'viser antal besøg i året b = DCount("*", "T_BorgerBesøgscyklus", "Behandler= '" & Me.Behandler & "'") c = DCount("*", "T_BorgerBesøgscyklus", "[Fra kl]= #" & Me.Fra_kl & "#") 'd = DCount("*", "T_BorgerBesøgscyklus", "[Fra kl]= " & Me.[Fra kl] & "") 'MsgBox DCount("*", "T_BorgerBesøgscyklus", "[Fra kl]= #" & Me.[Fra_kl] & "#") d = DCount("*", "T_BorgerBesøgscyklus", "Besøgsuge= '" & Me.BesøgsUge & "'") 'viser antal besøg i ugen e = DCount("*", "T_BorgerBesøgscyklus", "Ugedag= '" & Me.Ugedag & "'") 'viser antal besøg på denne ugedag 'f = DCount("*", "T_BorgerBesøgscyklus", "Besøgsår= " & Me.Besøgsår & "") ' viser antal besøg i året If (a > 0) And (b > 0) And (c > 0) Then Svar = MsgBox(Prompt:="Besøget eksisterer allerede, ønsker du at oprette et tilsvarende?", Title:="Dubletter", Buttons:=vbYesNo) Else: Exit Sub End If End Sub
MsgBox viser så antallet af besøg på datoen og a= DCount("*", "T_BorgerBesøgscyklus", "[Besøgsdato]= #" & Me.Besøgsdato & "#") fanger det den skal. Men jeg gør noget forkert omkring tidspunket [Fra kl] fordi den sidste msgbox kommer frem, hvis bare timeangivelsen er den samme - angives som tt:mm
Kan du forklare hvad # gør, måske kan den hjælpe igen
Ligesom apostroffer (') skal omkranse tekstfelter, skal havelåger (#) omkranse datofelter for at markere, at Access skal opfatte værdien som en dato. Datotidsfelter er noget bøvlet at have med at gøre. Prøv evt. at erstatte:
[Fra kl]
med
[Fra_kl]
Selv om det er et vildt gæt.
Jeg er mere tilbøjelig til at mene, at fejlen liger i dine If.. Then sætninger.
Du har måske nok ret, men den returnerer noget .......Jeg kan jo lave en sql som finder evt. poster, men hvordan får jeg værdien over i en var
docmd.runsql ("select count(felt) from tabel where bla bla group.......having....")
Den viser fejl allerede ved docmd.runsql
Måske har du en idé til denne. Ellers tak for inspiration jeg kæmper lidt videre og skriver hér når den er løst. Måske har du lidt input til http://www.eksperten.dk/spm/462210
Jeg er ved at være lidt firkantet i øjnene, så jeg slutter også for iaften. Ser på det igen imorgen tidlig. Jeg har set lidt på dit andet spørgsmål, men gik lidt i stå da vi startede denne dialog. Så vidt jeg kan se ønsker du at arbejde med den forrige post. Er dette korrekt?
a = DCount("*", "T_BorgerBesøgscyklus", "[Besøgsdato]= #" & Me.Besøgsdato & "#") b = DCount("*", "T_BorgerBesøgscyklus", "Behandler= '" & Me.Behandler & "'") c = DCount("*", "T_BorgerBesøgscyklus", "[Fra_kl]= #" & Me.[Fra_kl] & "#")
Debug.Print Besøgsdato; a Debug.Print Behandler; b Debug.Print Fra_kl; c Debug.Print d
If a > 0 And b > 0 And c > 0 Then Svar = MsgBox(Prompt:="Besøget eksisterer allerede, ønsker du at oprette et tilsvarende?", Title:="Dubletter", Buttons:=vbYesNo) Else: Exit Sub End If
Hi nu ved jeg godt, at I har en god snak kørende, men er løsningen ikke blot, at man laver en funktion function dublet ( dato,beh,kl) as boolean dan og åbn en sqlforespørgelse med de givne parametre if .eof then dublet = false else dublet = true end if end function
if dublet(besøgsdato, behandler,fra_kl) then ... enf if
First I havent read all comments and asnwers so I may be repeating something!
IF the four fields MUST be unique then why not create a unique index, this is what they are for! A unique index deosnt have to be the primary key.
In table design view choose View Indexes from the menu. THen in the dialog, choose a name for the index then the four fields, the last 3 field will have no name for index (empty) an dthen set Unique to Yes.
Lettere forsinket..., jeg fik aldrig dcount til at virke, men har løst den men vha. en funktion, som den Henrik (hnteknik) foreslog. Mugs - tak for inspiration - OG tålmodighed
takker - nogle gange ligger løsningen lige foran en, så man skal snuble over den.
Synes godt om
Ny brugerNybegynder
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.