Gå til innhold

Trenger litt hjelp til å kode i VB (For MS Access)


Anbefalte innlegg

Hei. :)

 

Vi holder på med Microsoft Access 2003 på skolen, og jeg har da tenkt å sette opp en database for ett medlemsregister. Jeg har stort sett alt jeg trenger, men vil legge til litt ekstra funksjoner. :)

 

Jeg har følgende poster i databasen som jeg trenger hjelp til.

 

- Siste endringsdato

- Prioritering

 

Siste endringsdato = Datoen sist gang en post ble endret. Jeg har satt standardverdien til denne til "Date()". Det fungerer greit, så når jeg lager en ny post så blir dagens dato automatisk plottet inn.

 

Dette fungerer greit, og jeg kan forandre datoen som jeg vil. Det jeg nå har gjort er å lage ett skjema for tabellen. Så har jeg gått inn på egenskaper for skjemaet og lagt inn en hendelse for "Før oppdatering". Det er her dere kommer inn i bildet. Da kommer der opp ett vindu der jeg kan programmere inn en kode i VB (Jeg fannt ut dette ved å lese en liten tutorial for det jeg skal forklare nå).

 

Det jeg da "pjåtet" inn der var "Me![siste endringsdato] = Date()" uten apostrof. Dette fungerer veldig greit. Hver gang jeg endrer en post i databasen min blir "Siste endringsdato" forandret til dagens dato.

 

Jeg har også en prioriteringsliste (ala medlemsgruppe). Den går fra 0 til 10. (10 har mest prioritet, 0 har minst)

Det planen min var, var at jeg kunne skrive inn noe annet i den VB-plassen, slik at jeg får denne funksjonen:

 

Når Dagens dato ( "Date()" ) er 1 måned senere enn "Siste endringsdato" vil jeg at medlemmet skal stige 1 tal i prioriteringslisten. Eventuelt så kan det bli slik at en måned etter "Siste endringsdato" er medlemmet i prioriteringsgruppe 1. To måneder etter "Siste endringsdato" er medlemmet i prioriteringsgruppe 2, men dersom jeg går inn og endrer en post igjen, så blir prioriteringen satt ned til gruppe 0 igjen.

 

Er dette løselig på noen måte? Jeg har ikke særlig lyst til å lære meg hele VB bare for dette lille prosjektet, så hadde vært greit om noen kunne ha hjulpet meg. :)

 

 

Ett lite spørsmål i tillegg: Når er det jo slik at Siste endringsdato blir endret til dagens dato uansett dersom jeg endrer en post. Går det an å justere dette slik at den kun blir forandret dersom enkelte poster blir forandret, eller eventuelt en funksjon for å kunne hoppe over denne oppdateringen ved enkelttilfeller (Som dersom jeg har skrevet ett navn feil, så skal han derimot ikke trenges å bli satt ned på prioriteringslista.)

Endret av XplittR
Lenke til kommentar
Videoannonse
Annonse
Ett lite spørsmål i tillegg: Når er det jo slik at Siste endringsdato blir endret til dagens dato uansett dersom jeg endrer en post. Går det an å justere dette slik at den kun blir forandret dersom enkelte poster blir forandret, (...)
Ja. Bruk hendelsen BeforeUpdate på de relevante inndatakontrollene (og ikke Form_BeforeUpdate) til dette. Eksempelvis følgende for navn-entiteten:
Private Sub Navn_BeforeUpdate(Cancel As Integer)

   Me![siste endringsdato] = Date

End Sub

 

Når Dagens dato ( "Date()" ) er 1 måned senere enn "Siste endringsdato" vil jeg at medlemmet skal stige 1 tal i prioriteringslisten. Eventuelt så kan det bli slik at en måned etter "Siste endringsdato" er medlemmet i prioriteringsgruppe 1.
Da formodentlig prioriteringsverdien må oppdateres likegyldig av hvorvidt en bruker har endret posten, bør en bruke Query/Spørring til dette. Lag en spørring med alle feltene fra tabellen (hopp over punkt 6), og legg inn følgende tekster i de to første tomme kolonnene til høyre:
MonthDelta: DateDiff("m";[siste endringsdato];Date())
Prioritering: IIf([MonthDelta]>0;IIf([MonthDelta]<10;[MonthDelta];10);0)

 

Feltet 'Prioritering' vil nå oppføre seg som du beskrev. 'MonthDelta' kan fjernes i en ny spørring som bruker den første spørringen som kilde.

Endret av aadnk
Lenke til kommentar
Tusen takk for svar! :D Men kan du fortelle meg om hvordan jeg skal forandre den siste insettingen for å kunne endre på hvor lang tid det skal ta for hver gang han skal gå opp i prioritering? :)
Endre "m" i den første kolonnen til et av følgende alternativer:
  • Dag: "y"
  • Uke: "w"
  • Måned: "m"
  • Kvartal: "q"
  • Kalenderuke: "ww"
  • År: "yyyy"

Ved å ta utgangspunkt i disse enhetene kan man via skalering (multipliser DateDiff(...)) tilnære seg de fleste tidsintervaller. Eksempelvis vil følgende øke prioriteringsnivået hver andre uke:

WeekDelta: DateDiff("w";[siste endringsdato];Date())/2

Ønsker man å telle på et langt lavere nivå, eksempelvis med sekunder, må du erstatte Date() med Now() i første kolonne:

SecondDelta: DateDiff("s";[siste endringsdato];Now())

Som i datoenhetstabellen ovenfor, eksisterer det en rekke basisenheter for å måle tidsforløp:

  • Sekund: "y"
  • Minutt: "n"
  • Time: "h"
Endret av aadnk
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...