Avatar billede meiland Mester
07. november 2008 - 12:39 Der er 5 kommentarer

Beregnede felter gemmes ikke i tabellen

Hej Alle !

I min db www.meiland.dk/spg8516511.mdb laver jeg nogle dato fremskrivninger (i formen Garanti).

Afl_dato indtastes, mens 1_år og 5_år beregnes. Dette fungerer perfekt (bortset fra skudår, men det er OK), og det gemmes i tabellen EntrepriseTabel
I rammen kalender advis laver jeg i princippet det samme. De beregnede datoer er OK, men de gemmes ikke i tabellen. De 4 felter er kommet til senere.
Jeg kan ikke umiddelbart se, at jeg gør noget forkert.

Kan I finde fejlen ??
Avatar billede Slettet bruger
07. november 2008 - 12:47 #1
Felterne gemmes ikke i tabellen de viser bare feltet afl_dato og så en eller anden beregning, som kontrolelementkilde...

Kontrolelementkilden skal være det felt, som du vil gemme tallet i og så på efteropdateringshændelsen for dato felter, skriver du eks.:

me.kal_gennemgang_1_år = me.+365

!~)
Avatar billede mugs Novice
07. november 2008 - 14:15 #2
Hvis det er absolut nødvendigt skal du naturligvis gemme dine beregninger i tabellerne. Nprmalt lægges beregninger i forespørgsler, da de der vil blive genberegnet hvos een eller flere faltorer der indgår i beregningen ændres. For at overføre beregninger til en rapport gentages beregningerne i den forespørgsel, der ligger til grund gor beregningen.

Men principielt mener jeg ikke at beregninger skal gemmes i tabellerne.

spg's svar er korrekt, men ved skudår vil den blive forkert. Jg har ikke downloadet din sidste db, men det må være muligt at benytte funktionen DateAdd, som adderer en periode til en dato og tager højde for skudår. Funktionen kan benyttes i både VBA og i SQL.
Avatar billede meiland Mester
08. november 2008 - 00:48 #3
Jeg skal bruge datoerne senere i en forespøgelse, der viser hvilke garantier, der skal nedskrives i for et givet årstal.

Problemet med skudår kan jeg sagtens leve med, at det altid vil være i min favør.

Hvis vi ser på feltet "1 års gennemgang" lægger jeg 365 dage til afl_dato, og så vidt jeg kan se er der ingen efteropdateringshændelse selvom resultatet gennem i tabellen.

Jeg fandt en løsning med følgende funktion
Private Sub Afl_dato_AfterUpdate()
Me.kal_indkald_1_år = Me.Afl_dato.Value + 365 - 42
Me.kal_gennemgang_1_år = Me.Afl_dato.Value
Me.kal_indkald_5_år = Me.Afl_dato.Value + 5 * 365 - 42 - 56
Me.kal_gennemgang_5_år = Me.Afl_dato.Value + 5 * 365 - 42

End Sub

Point følger
Avatar billede mugs Novice
08. november 2008 - 07:40 #4
Hvis det er dette felt du mener:

Me.kal_indkald_1_år = Me.Afl_dato.Value + 365 - 42

Adderer du først 365 dage og subtraherer derefter 42 dage. Der ER en hændelse alene af denne grund;

Private Sub Afl_dato_AfterUpdate()

Hvor hændelse jo indtræder i AfterUpdate i feltet Afl_dato. Jeg mener ikke det er nødvendigt at bruge Value. Og væn dig til at benytte de sædvanlige matematiske regler med paranteser. Jeg ville gøre sådan:

Me.kal_indkald_1_år = (Me.Afl_dato + 365) - 42
Avatar billede mugs Novice
18. november 2008 - 06:33 #5
Hvordan går det her?
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