Avatar billede rth71 Nybegynder
18. januar 2006 - 02:17 Der er 4 kommentarer

kopiere felt beregning til felt i date base

Hejsa
jeg har en formular hvor jeg har et felt som beregner tid ved hjælp
af =DateDiff("n";[Start_Tid];[Slut_Tid]) . Dette gøres i Control Source. jeg har så et felt i min tabel hvor jeg vil have overført resultatet af beregningen. Nogen foreslag?
Avatar billede jesperfjoelner Nybegynder
18. januar 2006 - 02:26 #1
Det er en god tommelfingerregel at du ikke skal gemme noget i din tabel, som kan beregnes via andre felter. Da du formentlig allerede gemmer Start_tid og Slut_tid kan du til hver en tid i en forespørgsel få vist forskellen. Det behøver du ikke gemme det i tabellen for. Hvad så hvis du har beregnet forskellen og Start_tid ændres? Så passer beregningen ikke længere og der er ingen måde at opdage det på (let).

Hvis du alligevel vil gøre skal du have rettet din recordsource/kildedata til dit felt, så det svarer til feltet i tabellen.
Så kan du f.eks. på en hændelse indsætte følgende:

Private sub Start_tid_afterupdate()
  If not isnull(me!start_tid) AND not isnull(Me!slut_tid) Then
    Me!mitfelt=DateDiff("n";[Start_Tid];[Slut_Tid])
  End if
End sub

Så beregner den dog forskellen hver gang markøren forlader feltet Start_tid.
Avatar billede rth71 Nybegynder
19. januar 2006 - 01:32 #2
Hej Jesper
Tak for dit fyldst gørende svar. Kan godt se nu at jeg ikke behøver at gemme det direkte i databasen. Jeg prøvede som du sagde men visuelt basic ville ikke godtage
DateDiff("n";[Start_Tid];[Slut_Tid]) hvis jeg ændrede ; med , godtog den det men returneret en dato, istedet for minuter som DateDiff("n";[Start_Tid];[Slut_Tid])gør.

Me hvad står det for i visuelt basic, har det den variabel når jeg har surftet lidt rundt i svarene her.
Avatar billede jesperfjoelner Nybegynder
19. januar 2006 - 02:26 #3
hej igen,

Først og fremmest er der den forskel at hvis du bruger et udtryk som:
Datediff... og andre indbyggede funktioner skal der bruges ; som argument-seperator hvis du indtaster f.eks. direkte som recordsource/kildedata bag et element på din formular (det er det du har været ved).
Hvis du bruger det samme udtryk i VBA (visual basic i Access) skal du bruge komma i stedet som seperator. Jeg ved ikke hvorfor det er sådan, men det er det :-)

Me!start_tid    er måden du kan referere til feltet "start_tid", NÅR koden kører fra samme formular. Me! betyder altså at feltnavnet skal være at finde på samme formular.

Andre måder at referere til et kontrolelement er:
Me!start_tid
Me.start_tid
Me("start_tid")

Brug den første hvis du kan. Nr. 2 har den fordel af du får hjælp af "intellisense" mens du programmerer. Dvs. du får vist en liste, som hjælper dig, hvis du ikke selv kan huske navnene på alle kontrolelementerne på din formular.
Nr. 3 er smart hvis du skal referere dine kontrolelementer i et loop således:

Do while..
  Me("boks" & i)
  i=i+1
Loop

da man så kan f.eks. indsætte noget i felterne boks1, boks2, boks3 osv.
Avatar billede jesperfjoelner Nybegynder
19. januar 2006 - 02:27 #4
og så var der lige spørgsmålet - hvilket format er Start_tid og slut_tid ?
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