Avatar billede plato Juniormester
25. februar 2014 - 11:36 Der er 20 kommentarer og
1 løsning

Vba, DCount 2 værdier problem

Hej Alle

Jeg vil gerne "BeforeUpdate - i form, undersøge om 2 betingelser allerede findes i tabellen
EmpId
JobId

Jeg ved ikke helt hvad Me. gør. Men det er en oprettelsesform hvor jeg havde forstillet mig at Me.EmpId og Me.JobId var = de værdier jeg vælger i en dropdownboks.

Jeg har prøver med følgende kode:
If DCount("*", "tblProces", "EmpId=" & Me.EmpId And "JobId=" & Me.JobId) > 0 Then

Men denne giver fejl.

Hele koden:
Private Sub Form_BeforeUpdate(Cancel As Integer)
If DCount("*", "tblProces", "EmpId=" & Me.EmpId And "JobId=" & Me.JobId) > 0 Then
MsgBox "Du er allerede oprettet i dette træningsforløb.", vbInformation, "Ingen Data"
Cancel = True
End If
End Sub


Nogen der kan hjælpe?
Avatar billede plato Juniormester
25. februar 2014 - 11:42 #1
If DCount("EmpId", "tblProces","[EmpId]=" & EmpId & " AND [JobId]=" & JobId &"") > 0

No luck
Avatar billede plato Juniormester
25. februar 2014 - 11:52 #2
Har også prøver med:
If DCount("[EmpId]", "tblProces", "[EmpId] = " & Me.EmpId & " AND [JobId] = '" & Me.JobId & "'") > 0 Then
Avatar billede plato Juniormester
25. februar 2014 - 13:57 #3
Jeg har nu fået følgende kode til at virke:
Private Sub Opret_forløb_Click()
If DCount("*", "tblProces", "EmpId=" & Me.EmpId.Value) > 0 Then
    Cancel = True
    MsgBox "Du er allerede oprettet i dette træningsforløb!"
    Me.Undo
    DoCmd.Close
    Else
    DoCmd.RunMacro "OpretJobTræning"
End If
End Sub

Nu mangler jeg bare nr. 2 check. Altså at den også checker
JobId=JobId
Men jeg kan ikke hitte ud af at sætte det ind.

Håber snart der er en eller anden der har guldkornet. :)
Avatar billede plato Juniormester
25. februar 2014 - 14:07 #4
Har glemt at tilføje. Det er altså KUN hvis EmpId+Jobid>0 at den ikke må oprette. Er det kun den ene af dem der findes, skal den oprette.
Avatar billede mugs Novice
25. februar 2014 - 16:41 #5
Bind de 2 dcount sammen med AND således:

If DCount("*", "tblProces", "EmpId=" & Me.EmpId.Value) > 0 And og her din anden dcount  Then....
Avatar billede plato Juniormester
25. februar 2014 - 16:47 #6
Er du sød at binde dem sammen for mig? Hver gang jeg gør det, får jeg runtime error.. :(

Eller mener du bare:

If DCount("*", "tblProces", "EmpId=" & Me.EmpId.Value) > 0
If DCount("*", "tblProces", "JobId=" & Me.JobId.Value) > 0

Then

?
Avatar billede plato Juniormester
25. februar 2014 - 16:48 #7
Hov, mente:

If
DCount("*", "tblProces", "EmpId=" & Me.EmpId.Value) > 0 AND
DCount("*", "tblProces", "JobId=" & Me.JobId.Value) > 0

then
Avatar billede plato Juniormester
25. februar 2014 - 16:52 #8
Virker ik... :/

If DCount("*", "tblProces", "EmpId=" & Me.EmpId.Value) > 0 And DCount("*", "tblProces", "JobId=" & Me.JobId.Value) > 0 Then
Cancel = True
Me.Undo
msg.box "Duplicate data"
Else
DoCmd.RunMacro "OpretJobTræning"


Runtime error '424'

Object required
Avatar billede plato Juniormester
25. februar 2014 - 16:56 #9
Sorry.... msgbox skal være MsgBox... Dummyfejl Åbenbart..

Tusind Mugs... Er forbløffet over hvor simpelt Dcount med AND bare skulle sættes. :)
Avatar billede plato Juniormester
25. februar 2014 - 16:58 #10
Var for hurtig....

Det er KUN hvis BEGGE Dcount er >0 at den IKKE må oprette. Som koden er nu oprettet den ikke hvis man én af dem er True.

Private Sub Opret_Click()
If DCount("*", "tblProces", "EmpId=" & EmpId) > 0 And DCount("*", "tblProces", "JobId=" & JobId) > 0 Then
Cancel = True
Me.Undo
MsgBox "Duplicate data"
DoCmd.Close
Else
DoCmd.RunMacro "OpretJobTræning"
End If
End Sub
Avatar billede terry Ekspert
25. februar 2014 - 17:48 #11
try putting the WHERE clause into a string, its easier to see exactly what is being used in the dcount.

It should be påossible to have two criteria in the same Dcount

Dim sWhere as string

sWhere = "EmpId = " & me.EmpId  & " And JobId = " & me.JobId


If DCount("*", "tblProces", sWhere) > 0 Then



If it doesn't work, things to ask yourself


Is Empid as string in the table
is JobId a string in the table.

If one of them is then you need to put '' around values

If they are numerical fields then try this.

Press Ctrl+G to open debug window

Place a breakpoint in your code on line starting with
If DCount

run your code

when the breakpoint is reached in the debug window enter

?sWhere


then press enter

you will now see the contents of your where clause

can you see anything wrong with this?

If not, make a query on the table tblProces

in SQL view write

SELECT count(*) from tblProces WHERE


then add the string from the debug window

Run the query
Avatar billede plato Juniormester
25. februar 2014 - 18:19 #12
Ty so much!!

You have helped me many times. :)

Write a response so I can give you pts.
Avatar billede terry Ekspert
25. februar 2014 - 18:21 #13
Did you get it to work?
What was problem?
Avatar billede mugs Novice
25. februar 2014 - 18:39 #14
Mangler der ikke en end if?
Avatar billede terry Ekspert
25. februar 2014 - 19:11 #15
its just part of the code mugs, I'm sure plato is aware of that

Hows things anyway mugs, you taken your "efterløn" yet? I seem to recall you as 'young' as me :-)
Avatar billede mugs Novice
25. februar 2014 - 19:23 #16
Hej Terry - Jeg gik på pension for 3½ år siden. Der er nu ikke fordi det passede mig, men som ansat i forsvaret, er vi tvunget på pension som 60-årig.
Jeg beskæftiger mig heller ikke ret meget med Access mere, så min viden er blevet noget rustent med tiden, men jeg hænger dog stadig fast her på siden, for i det mindste at vedligeholde min viden lidt endnu
Avatar billede terry Ekspert
25. februar 2014 - 19:40 #17
does that mean you have to take "efterløn" at 60, which consequently means you don't get full amount (91%)?

I was actually going to take efterløn 1st March but my work now wants to keep me on 6 months longer. Helps pay the bills :-)
Avatar billede mugs Novice
25. februar 2014 - 20:02 #18
Jeg er ikke på efterløn, det fravalgte jeg for en del år siden. Dengang måtter man kun arbejde 200 timer om året for ikke at blive trukket i efterlønnen. Siden blev reglerne lempet, og det var meningen, at jeg ville fortsætte med et deltidsjob som vægter i G4S. Men der er ingen ledige stillinger.

Men jeg får fuld tjenestemandspension + en pæn opsparing i værdipapirer i banken, så jeg har intet har intet klage over.
Avatar billede terry Ekspert
25. februar 2014 - 20:39 #19
Good to hear your happy with things mugs
Avatar billede plato Juniormester
26. februar 2014 - 05:31 #20
Terry.

I cant say what the problem was, but with this code it works:
Dim sWhere As String
sWhere = "EmpId = " & Me.EmpId & " And JobId = " & Me.JobId
If DCount("*", "tblProces", sWhere) > 0 Then
Cancel = True
Me.Undo
MsgBox "Du har allerede oprettet et træningsforløb for den specifikke opgave."
DoCmd.Close
Else
DoCmd.RunMacro "OpretJobTræning"
End If

So ty you. :)
Avatar billede terry Ekspert
26. februar 2014 - 08:48 #21
Whats important is that its working, and thanks for the points
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