Avatar billede accessbruger1 Nybegynder
08. januar 2005 - 20:29 Der er 44 kommentarer og
2 løsninger

Ønsker at angive antal af datofelter der er udfyldt

Jeg har 12 datofelter der henholdsvis kan være udfyldt eller ikke udfyldt. I en 13. felt ønsker jeg at angive hvor mange af disse 12 datofelter der er udfyldt.

De 12 datofelter kan vi kalde f1, f2 o.s.v.
Feltet der skal angive antallet af datofelter der er udfyldt, kan vi kalde fx

Hvordan skrives det som kode?
Avatar billede mugs Novice
08. januar 2005 - 20:35 #1
Me.fx = DCount("*", "TABELNAVN", "[DATOFELT]> 0")
Avatar billede mugs Novice
08. januar 2005 - 20:45 #2
Hvis du vil have det som postkilde i et ubundet felt, kan det se således ud:

=DCount("*";"Tabel1";"[felt4] > 0")
Avatar billede fdata Forsker
08. januar 2005 - 22:37 #3
Hm, er det mon ikke 12 felter "på tværs", altså samme post.

I så fald kunne du kalde en lille funktion, der tæller:

Function TælDatofelter() As Integer
  Dim F As Form
  Dim i As Integer
  Set F = Forms!FormularensNavn
 
  TælDatofelter = 0
  For i = 1 To 12
    If Not IsNull(F.Controls("f" & i)) Then TælDatofelter = TælDatofelter + 1
  Next i
End Function

fx skal altså have Kontrolelementkilden "=TælDatofelter"
Avatar billede accessbruger1 Nybegynder
08. januar 2005 - 22:39 #4
mugs
Jeg skulle vist have nævnt, at der er selvfølgelig andre felter i tabellen end de 12 datofelter og feltet fx
Avatar billede mugs Novice
08. januar 2005 - 22:40 #5
fdata > God pointe.

accessbruger1 > Det er lige meget, spm du kan læse af funktionen tælles der kun i feltet felt4, hvor dette er større end 0.
Avatar billede mugs Novice
08. januar 2005 - 22:42 #6
accesbruger1 > Hvorfor vil du lagre en information der varierer? Vil du udskrive værdien i fx?
Avatar billede accessbruger1 Nybegynder
08. januar 2005 - 22:58 #7
fdata
Korrekt, det er 12 specifikke datofelter i samme post, hvor jeg vil have antallet af udfyldte felter talt op. Men der skal nok også siges, at der er andre datofelter i samme post ud over de 12, men de skal ikke tælles i den her forbindelse.

mugs
Hver udfyldt datofelt er udtryk for en behandling. Ved at tælle udfyldte datofelter får jeg antal behandlinger.
Avatar billede mugs Novice
08. januar 2005 - 23:15 #8
Denne tæller hvormange poster i tabellen hvor DATOFELT er > 0 OG IDFELT er = formularens IDFELT:

DCount("*", "TABELNAVN, "[DATOFELT]> 0  And [IDFELT] = " & Me.IDFELT & "")
Avatar billede accessbruger1 Nybegynder
08. januar 2005 - 23:25 #9
mugs
Jeg forstår nok ikke helt hvordan jeg skal indplacere f1, f2, f3 ...f12 i denne kodesætning.
Hvorfor skal vi overhovedet bruge et idfelt, når vi er i samme post?
Avatar billede mugs Novice
08. januar 2005 - 23:32 #10
Problemet er jo, at du har mange datofelter og disse skal indplaceres i koden på samme måde som jeg har gjort med det enkelte DATOFELT. Du skal bruge et idfelt fordi du tæller i tabellen, og den skal have en indentifikation af den aktuelle post.

Men du skal nok overveje noget i retning af fdata's forslag, hvis vi kan overtale ham til at komme med et forslag til at implementere flere datofelter i løkken.
Avatar billede accessbruger1 Nybegynder
08. januar 2005 - 23:37 #11
mugs
Så må vi vel vente og se. Ellers kommer jeg ikke længere.
Avatar billede mugs Novice
08. januar 2005 - 23:42 #12
Det største problem er nu nok, at din db grundlæggende er konstrueret forkert. I stedet for een post med en klient med en række tilhørende behandlinger (datoer), burde du have en tabel med mange poster med klientid og tilhørende een dato for een behandling.
Avatar billede accessbruger1 Nybegynder
09. januar 2005 - 00:11 #13
mugs
Det har du sikkert ret i, og det har også indgået i mine tanker. Men det vil ikke være muligt for mig at ændre det i øjeblikket, idet det vil være for omfattende at ændre i nu.
Men det udelukker vel ikke, at at jeg ikke kan tælle antal datoer der er behandlet i de 12 felter?
Avatar billede mugs Novice
09. januar 2005 - 00:15 #14
Nej -  du kan sagtens tælle datoer i dine 12 felter, men det bliver vist lidt omfattende, eller også skal du tilrette fdata's løkke med en betingelse. Og løkker har aldrig været min stærke side!
Avatar billede accessbruger1 Nybegynder
09. januar 2005 - 00:41 #15
fdata
Jeg er nok nødt til at have mere hjælp til din foreslåede funktion.
Avatar billede terry Ekspert
09. januar 2005 - 10:21 #16
what are the actual names of your date fields?
fdata's solution is what I would suggest, all he needs is a way to distinguish between the fields which need to be added and those not.
Avatar billede accessbruger1 Nybegynder
09. januar 2005 - 11:35 #17
terry
Datofelter: f1, f2.....f12
Optællingsfelt: fx
Tabel: tblBehandlingsdatoer
Formular: frmBehandlingsdatoer

Men som jeg tidligere har nævnt, der er andre både datofelter og andre felter i tabellen/formularen.
Avatar billede terry Ekspert
09. januar 2005 - 12:04 #18
have you tries fdata's solution that counts how many fields F1-f12) contain data (NOT NULL)!
It ONLY counts f1 to f12 not any other fields! Isnt this what yoiu want?
Avatar billede accessbruger1 Nybegynder
09. januar 2005 - 12:14 #19
terry
Jo som tidligere nævnt i indledningen, ønsker jeg kun at tælle hvor mange af de 12 felter (f1-f12) der er udfyldt.
Jeg har ikke testet fdata's forslag. Mit problem er nok den, at jeg ikke rigtig forstår hans forslag, og hvor jeg skal sætte koden ind.
Avatar billede terry Ekspert
09. januar 2005 - 12:18 #20
part of your question was "Hvordan skrives det som kode?"!

I would suggest that you put this in the forsm BEFORE uodate event so that the fields gets updated BEFORE wrting th erecord to the dB. But it will need modifying a little
Avatar billede accessbruger1 Nybegynder
09. januar 2005 - 12:27 #21
terry
Er du i stand til at "modify a little"?
Avatar billede terry Ekspert
09. januar 2005 - 12:36 #22
I'll take a look at your dB if you can send it
eksperten@NOSPAMsanthell.dk
remove NOSPAM
Avatar billede terry Ekspert
09. januar 2005 - 12:37 #23
If I use fdata's solution and get it working then please give some of the points to him too
Avatar billede accessbruger1 Nybegynder
09. januar 2005 - 12:40 #24
terry
Det vil nok stride imod mit firma's politik at gøre. Så det er nok ikke muligt.
Avatar billede accessbruger1 Nybegynder
09. januar 2005 - 12:41 #25
terry
Det vil nok stride imod mit firma's politik at sende DB'en. Så det er nok ikke muligt.
Avatar billede accessbruger1 Nybegynder
09. januar 2005 - 12:43 #26
terry
Selvfølgelig kan fdata få point også.
Avatar billede terry Ekspert
09. januar 2005 - 12:49 #27
OK, try placing this in the forms code and make sure that the forms BEFORE UPDATE event is set [Event Procedure] so that the code gets used.

I'm also assuming that f13 is the field you want to see th eresult in


Private Sub Form_BeforeUpdate(Cancel As Integer)

    Me.f13 = TælDatofelter()
   
End Sub



Function TælDatofelter() As Integer
  Dim i As Integer
 
  TælDatofelter = 0

  For i = 1 To 12
    If Not IsNull(Me.Controls("f" & i)) Then TælDatofelter = TælDatofelter + 1
  Next i

End Function
Avatar billede accessbruger1 Nybegynder
09. januar 2005 - 13:15 #28
terry
Når jeg skriver "Function TælDatofelter() As Integer" får jeg fejlmeddelelsen: Compile error. Expected: End of statement.
??

Koden du har foreslået skal skrives efter hinanden, ikke?
Avatar billede mugs Novice
09. januar 2005 - 13:20 #29
Det er 2 koder, du skal kopiere både kodestart og -slut
Avatar billede accessbruger1 Nybegynder
09. januar 2005 - 13:23 #30
Ok terry
Avatar billede terry Ekspert
09. januar 2005 - 13:45 #31
Ìf you are still having problems then make a new dB containing only what is necessary and sent it to me.
Avatar billede accessbruger1 Nybegynder
09. januar 2005 - 15:20 #32
terry
Jeg har sendt en mail (DB)til dig.
Avatar billede terry Ekspert
09. januar 2005 - 15:22 #33
OK
Avatar billede terry Ekspert
09. januar 2005 - 15:34 #34
Code is similar to that given 09/01-2005 12:49:28

I've also placed an unbound field on the form with control source set to =[TælDatofelter] so that the calcualted value is only displayed.



Private Sub Form_BeforeUpdate(Cancel As Integer)

    Me.AntalBehandlinger = TælDatofelter()
   
End Sub

Function TælDatofelter() As Integer
  Dim i As Integer
 
  TælDatofelter = 0

  For i = 1 To 12
    If Not IsNull(Me.Controls("f" & i)) Then TælDatofelter = TælDatofelter + 1
  Next i

End Function
Avatar billede accessbruger1 Nybegynder
09. januar 2005 - 16:21 #35
terry
DB'en kunne åbenbart ikke få lov at gå igennem firewallen da du returnerede den.
Jeg har sendt dig en alternativ emailadresse. Prøv den.
Avatar billede fdata Forsker
09. januar 2005 - 17:24 #36
I'm back. Hold da op, hvor har I hygget jer, mens jeg har været væk.
Holder I da aldrig fri ???  ;o)
>>> Terry. Thanks for following up.
Avatar billede terry Ekspert
09. januar 2005 - 17:36 #37
hi fdata, hope you've had a nice relaxing day? :o)
Avatar billede accessbruger1 Nybegynder
09. januar 2005 - 18:00 #38
terry
Håber jeg får tid til at se på fremsendte DB på arbejde på mandag
Avatar billede terry Ekspert
09. januar 2005 - 18:06 #39
It should be possible to copy the code EXACTLY as it is 09/01-2005 15:34:17

into your form, and then make sure that the event (property) for the BEFORE UPDATE is set to [Event Procedure] then it will work.
Avatar billede accessbruger1 Nybegynder
10. januar 2005 - 11:08 #40
fdata/terry
Alt virker efter hensigten. Det var lige det jeg havde brug for.
Håber I er tilfredse med pointfordelingen. Der var jo terry der gjorde det færdigt.
Læg mærke til jeg har hævet fra 60 til 200 for ulejligheden ;-)
Avatar billede terry Ekspert
10. januar 2005 - 20:00 #41
great to here you got it working, and thanks for the extra points, now I need to think about what I'm going to buy with them :o)

I think you need to accept first though!
Avatar billede terry Ekspert
10. januar 2005 - 20:01 #42
Its still 60, perhaps your doing something wrong?
Avatar billede fdata Forsker
10. januar 2005 - 20:33 #43
Husk at acceptere spm.
Bare nysgerrig. Hvorfor virkede det ikke i 1. omgang?
Avatar billede accessbruger1 Nybegynder
11. januar 2005 - 16:58 #44
Jeg syntes ikke det virkede efter hensigten, når jeg skal fordele point. MÅske jeg gjorde fejl?
Avatar billede terry Ekspert
11. januar 2005 - 19:21 #45
thanks
Avatar billede fdata Forsker
11. januar 2005 - 22:41 #46
Takker for point
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