Avatar billede visto Guru
20. marts 2001 - 18:25 Der er 12 kommentarer og
1 løsning

Fast dato og måned ved indtastning af år

I et datofelt vil jeg gerne kunne nøjes med at indtaste året, fx 93 eller 01, hvorefter de data der registreres fast handler om 1. september pågældende år, altså respektive 01-09-93 og 01-09-01.
Kan det lade sig gøre? Eller skal man indtaste hele datoen hver gang?
Avatar billede proaccess Nybegynder
20. marts 2001 - 18:59 #1
Hej Visto,

hvorfor bruger du så ikke bare en integer (heltal), hvor du lagrer 1993 eller 2001, for så derefter at bruge denne til at danne dato\'en i forespørgsler m.v.

ProAccess
Avatar billede mugs Novice
20. marts 2001 - 22:31 #2
Hej Visto!

Tilsluter mig ProAccess med den tilføjelse, at du i forespørgslen laver et Udtryk, der sammenføjer feltet År med Strengen \"01-09\" f.eks.:

Udtryk1: [år] & \"-01-09\"

Brug evt. forespørgslens Udtryksgenerator.
Dette udtryk kan du jo så trække ind i en formular, hvis du skal bruge det der.

Ps.: Hvordan gik det med dit tidligere spørgsmål. hvor et felt skulle styre indholdet i andre felter?

mvh / mugs

Avatar billede moses Praktikant
21. marts 2001 - 08:39 #3
Hvis et Integer-felt kaldes Text2, så laver du følgende subrutine for dette felt:


Private Sub Text2_AfterUpdate()
    Me![Text2] = Format(\"09/01/\" & IIf(Val(Me![Text2]) < 50, \"20\" & Me![Text2], \"19\" & Me![Text2]), \"dd-mm-yyyy\")
End Sub
Avatar billede moses Praktikant
21. marts 2001 - 08:42 #4
UPS. der skal lige byttes om på \"01\" og \"09\":

Private Sub Text2_AfterUpdate()
    Me![Text2] = Format(\"01/09/\" & IIf(Val(Me![Text2]) < 50, \"20\" & Me![Text2], \"19\" & Me![Text2]), \"dd-mm-yyyy\")
End Sub


Det giver dig følgende:

Hvis du taster et tal (00 - 49), så giver det \"01-09-2000\" - \"01-09-2049\"
Hvis du taster et tal (50 - 99), så giver det \"01-09-1950\" - \"01-09-1999\"

Avatar billede visto Guru
22. marts 2001 - 15:55 #5
Tak til alle for bidrag. Jeg beklager at jeg ikke reagerer så hurtigt, men jeg er kommet til at sætte flere spørgsmål i gang lidt tæt på hinanden, men har opdaget at jeg bedst arbejder færdig med en ting ad gangen. Vender tilbage når jeg har fået kigget på jeres forslag.
Til mugs: Ang. spørgsmålet med et felt der styrer andre felter, har jeg netop svaret under det spørgmål: http://www.eksperten.dk/spm/57193
Avatar billede visto Guru
23. marts 2001 - 15:46 #6
Så er jeg klar igen! Jeg starter helt fra toppen:
Ang. snakken om en integer eller eller et integerfelt: Er der en der i første omgang vil forklare mig hvad det er?
Avatar billede mugs Novice
23. marts 2001 - 18:56 #7
Hej Visto
Integer er et udtryk for den datatype / størrelse du vælger at benytte i tabeldesign. Du har f.eks Tekstfelt, Datofelt og et Talfelt. Integer er et udtryk for en talstørrelse VBA skal kunne arbejde med. Det definerer du i databasens Dim-definition som F.eks:

Dim Felt1 As String, Felt2 As Integer, Felt3 As
Byte

Hvis Felt1 behandles som tekst, Felt 2 og Felt behandles som tal, men forskellen ligger i de talstørrelser der kan være indeholdt i felterne:

Integer rummer tal mellem -327668 til 32767
Byte rummer tal mellem o til 255

Det synes at være tillokkende at benytte så stor en værdi som overhovedet mulig, men du skal tage hensyn til at felterne ikke tager samme plads på harddisken:

Et Byte felt = 1 Byte
En Integer = 2 Byte
Long og Single = 4 byte hver

Så hvis du har mange talfelter i din database og mange talfelter til hvar post kan det hurtigt komme til at betyde en del, specielt hvis du har begrænset kaopacitet på din PC.
Avatar billede proaccess Nybegynder
24. marts 2001 - 07:47 #8
Hej Visto,

for at sige det kort, så skal du overveje at oprette et heltal i stedet for en dato i dit tabel-design. I dette heltal lagrer du så årstallet, for derved at kunne beregne den 1.september hver gang, du skal bruge det som en dato.  =DateSerial([Årstal],9,1)

ProAccess
Avatar billede visto Guru
24. marts 2001 - 10:40 #9
Jeg prøver i første omgang at gå videre med ProAccess sidste forslag. Jeg har pt desværre alt for svært ved at forstå hvad mugs og moses skriver.
Til ProAccess: Hvor skal =DateSerial([Årstal],9,1,) stå? Et eller andet sted i tabellen, i en forespørgsel, i en formular, i en makro?
Avatar billede proaccess Nybegynder
24. marts 2001 - 14:12 #10
Det skal stå i en forespørgsel, som så kan ligge til grund for både formularer og rapporter.

Princippet er så at dine brugere kun registrerer selve årstallet, men at du kan bruge det, som en dato ved ovennævnte funktion.
Avatar billede visto Guru
24. marts 2001 - 15:49 #11
Til ProAccess: Jeg havde faktisk også prøvet at indtaste i en forespørgsel, men fik meldingen \"Det indtastede udtryk indeholder ugyldig syntaks.\" Jeg ændrede komma til semikolon, og nu virker det!!
Spørgsmålet er hermed besvaret, så du får dine point. Men før jeg lukker spørgsmålet vil jeg høre om du vil hjælpe mig med en formaterings-ting i forbindelse med datoerne.
Du hjalp mig på et tidspunkt med at løse problemet med at subtrahere to datoer. Det med at indtaste årstallet xx og så få det \"oversat\" til 01-09-xx skal bruges sammen med subtraheringen. Jeg anskueliggør det nok bedst på flg. måde (det handler om en formular, som er lavet på baggrund af forespørgslen med oversættelsen fra år xx til 01-09-xx):

I Felt1 indtastes et årstal som xx, fx 93 eller 01.
I Felt2 \"oversættes\" årstallet i felt 1 til 01-09-xx (v.hj.a. DateSerial([Årstal];9;1)
I Felt3 indtastes en dato (der altid er \"større\" end datoen i felt 2)
I Felt4 subtraheres Felt2 fra Felt3.

Dette kan jeg godt lave ved at indsætte formlen =[Felt3]-[Felt2] i Felt4, MEN resultatet kommer ud i antal dage, hvor jeg gerne vil have det i år og måneder, fx 11.2 for 11 år og 2 måneder - ligesom resultatet i den database, hvor du hjalp mig med at subtrahere.
Avatar billede proaccess Nybegynder
25. marts 2001 - 09:01 #12
Felt1: Indtast et årstal som xx, fx 93 eller 01
Felt2: =DateSerial([Felt1];9;1)
Felt3: Indtast en dato
Felt4: =DateDiff(\"m\";[Felt2];[Felt3])\\12 & \".\" & DateDiff(\"m\";[Felt2];[Felt3]) Mod 12

Du skal stadig holde tungen lige i munden, hvis det drejer sig om felter i forskellige formularer eller sektioner, men ellers er det lige til at skifte felt-navnene ud med nogle, som er lidt mere sigende...

ProAccess
Avatar billede visto Guru
25. marts 2001 - 12:31 #13
Til ProAccess: Smukt, den er helt hjemme nu! - Du ka bare det der, hva´\'? - Nu skal det så blot implementeres i den rigtige database, hvor du har ret i at tungen skal holdes lige i munden!
Der kommer flere Access-spørgsmål, så vi \"mødes\" nok igen! Tak også for denne gang!

Også tak til de andre biddragydere.

Dette spørgsmål lukkes hermed.

Visto
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