Avatar billede krasmussen Nybegynder
07. februar 2004 - 18:23 Der 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
Avatar billede mugs Novice
07. februar 2004 - 20:03 #1
I det sidste af de 4 felter kan du i BeforeUpdate indsætte flg:

Dim a As Byte
a = Me.Felt2
If DCount("*", "Tabel1", "[Felt2] =" & a) > 0 Then
MsgBox "Der er allerede poster med denne værdi."
End If
Avatar billede krasmussen Nybegynder
07. februar 2004 - 20:11 #2
Det er vel forudsat, at de 4 er primærnøgle ?? (Der ér allerede dubletter)
Avatar billede mugs Novice
07. februar 2004 - 20:21 #3
Det har inget med primære nøgler at gøre. Koden giver dig en MsgBox hvis indholdet af Felt2 i Tabel1 er dubleret.
Avatar billede krasmussen Nybegynder
07. februar 2004 - 20:27 #4
OK, Men jeg ønsker kun msgbox, hvis der er alle fire felter som er dublerede...hvordan kan jeg tilføje dette kriterie
Avatar billede mugs Novice
07. februar 2004 - 20:50 #5
Bemærk at a er en string og b er integer:

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
Avatar billede mugs Novice
07. februar 2004 - 21:05 #6
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
Avatar billede krasmussen Nybegynder
07. februar 2004 - 21:13 #7
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?
Avatar billede mugs Novice
07. februar 2004 - 21:17 #8
Du erklærer Besøgsdato og Fra kl som en string. Det skal være en Date.

Prøv herefter at udelade '' i dit kriterie, idet apostroffer er forbeholdt string:

a = DCount("*", "T_BorgerBesøgscyklus", "Besøgsdato= " & Me.Besøgsdato & "")
Avatar billede krasmussen Nybegynder
07. februar 2004 - 21:28 #9
Det var meget bedre - jeg kører dog lidt rundt i ' og ", ved denne:

b = DCount("*", "T_BorgerBesøgscyklus", "Behandler= " & Me.Behandler & "")

får jeg en syntaxfejl om mgl. operator
Avatar billede mugs Novice
07. februar 2004 - 21:34 #10
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 & "'")
Avatar billede krasmussen Nybegynder
07. februar 2004 - 21:39 #11
Tak for definitionen, hvordan håndteres så date? denne:

c = DCount("*", "T_BorgerBesøgscyklus", "[Fra kl]= " & Me.[Fra kl] & "")

fejler også med en syntaksfejl grundet mgl. operator???
Avatar billede mugs Novice
07. februar 2004 - 22:00 #12
MsgBox DCount("*", "Tabel4", "[frakl]= #" & Me.frakl & "#")
Avatar billede krasmussen Nybegynder
07. februar 2004 - 22:20 #13
Det gik helt galt. MsgBox viser et tal som jeg ikke kan identificere - heller ikke vha. afgrænsninger i tabellen. Hvad gør #
Avatar billede mugs Novice
07. februar 2004 - 22:22 #14
Læg din e-mail, så sender jeg et eksempel.
Avatar billede krasmussen Nybegynder
07. februar 2004 - 22:24 #15
rasmussen_kenneth@hotmail.com

pft.
Avatar billede mugs Novice
07. februar 2004 - 22:27 #16
db15 Sendt.
Avatar billede krasmussen Nybegynder
07. februar 2004 - 22:55 #17
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
Avatar billede mugs Novice
07. februar 2004 - 23:04 #18
Prøv at se på koden i den tilsendte db med teksten

"Opret ny post hvis bestemte kriterier er opfyldt"

Der er en væsentlig forskel i din If.. Then sætning.
Avatar billede krasmussen Nybegynder
07. februar 2004 - 23:10 #19
Ja ok, men denne

a = DCount("*", "T_BorgerBesøgscyklus", "Besøgsdato= " & Me.Besøgsdato & "")

returnerer 00:00:00 selvom der reelt er en værdi? og så vil der aldrig være et hit
Avatar billede mugs Novice
07. februar 2004 - 23:14 #20
Kl 21:13:00 skriver du at dette felt er en date, og her behandler du det som en mellem ting mellem et numerisk felt:

"Besøgsdato= " & Me.Besøgsdato & "")
Avatar billede krasmussen Nybegynder
07. februar 2004 - 23:24 #21
Jeg skriver, at det er dato & klokkeslet (XP DK)- så date ja.

Men værdierne stemmer slet ikke overens med var f.eks.

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 & "#")
d = DCount("*", "T_BorgerBesøgscyklus", "Besøgsuge= '" & Me.BesøgsUge & "'")
e = DCount("*", "T_BorgerBesøgscyklus", "Ugedag= '" & Me.Ugedag & "'")

Og returneringer

Debug.Print Besøgsdato; a
Debug.Print Behandler; b
Debug.Print Fra_kl; c
Debug.Print BesøgsUge; d
Debug.Print Ugedag; e

Viser:

19-01-2004 00:00:00
Herning Tanja Daugaard Nielsen1845
14:00:00 11-02-1900
4653
Mandag4645
Avatar billede mugs Novice
07. februar 2004 - 23:32 #22
Jeg tror ikke den skriver resultatet af din DCount, men tiden i den variabel du har defineret som a. Prøv med en Msgbox:

MsgBox DCount("*", "T_BorgerBesøgscyklus", "[Besøgsdato]= #" & Me.Besøgsdato & "#")
Avatar billede krasmussen Nybegynder
07. februar 2004 - 23:47 #23
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
Avatar billede mugs Novice
07. februar 2004 - 23:56 #24
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.
Avatar billede krasmussen Nybegynder
08. februar 2004 - 00:25 #25
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 logger af for i dag, tak for nu.
Avatar billede mugs Novice
08. februar 2004 - 00:31 #26
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?
Avatar billede krasmussen Nybegynder
08. februar 2004 - 08:18 #27
Ja - tidsforskellen mellen [Til kl] på den forrige post OG [Fra kl] på den aktuelle
Avatar billede mugs Novice
08. februar 2004 - 08:20 #28
Det var det jeg var bange for :o)
Avatar billede krasmussen Nybegynder
08. februar 2004 - 08:24 #29
Min "VB-Syntaks" til en for-løkke er ikke for god, men havde tænkt noget i stil med:

var1 = [Til kl]
For i = 2 to i = 1 step -1 do
var2 = [Til kl]
next i
diff = var1 - var2

Men det er vist ikke helt korrekt
Avatar billede mugs Novice
08. februar 2004 - 08:29 #30
Nej den er ikke korrekt. Men det kan ikke være meningen, at du skal køre en løkke for at få en simpel DCount til at fungere.

Men kan du ikke lige give en status: Hvad fungerer og hvad fungerer ikke.
Avatar billede krasmussen Nybegynder
08. februar 2004 - 08:35 #31
Kort status er, at koden nu ser sådan ud:

Dim a As Date, Svar, b As String, c As Date

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

Og msgboksen kommer når bare én af dcount er > 0
Avatar billede hnteknik Novice
10. februar 2004 - 11:00 #32
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

Henrik
Avatar billede terry Ekspert
10. februar 2004 - 14:48 #33
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.
Avatar billede mugs Novice
10. februar 2004 - 15:03 #34
Hi terry:
Your are right, I thought on that solution untill I saw this:

"Det skal dog være tilladt at oprette recorden, det er blot in info!"
Avatar billede krasmussen Nybegynder
15. februar 2004 - 17:48 #35
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
Avatar billede mugs Novice
15. februar 2004 - 17:51 #36
:o)
Avatar billede hnteknik Novice
16. februar 2004 - 17:47 #37
takker - nogle gange ligger løsningen lige foran en, så man skal snuble over den.
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