Avatar billede bbkdk Seniormester
19. maj 2004 - 13:14 Der er 20 kommentarer og
1 løsning

Samme værdi i felt som i forrige post i formularen

I et tidsregistreringssystem bliver man ved åbning af indberetningsformularen bedt om at angive sit sekretærnumer i en boks.
Derefter åbnes formularen med den pågældende sekretærs indberetninger for de sidste 2 måneder, vist som en fortløbende formular.
Da man jo (næsten)altid indberetter på ens eget sekretærnummer, er det altid samme sekretærnummer som på forrige post i formularen.
Er der mulighed for at gentage sætte feltet "sekrnr" fra forrige post i formularen som standardværdi ved oprettelse af nye poster? denne vil så i sjældne tilfælde skulle rette.
Jeg er opmærksom på funktionen "Last", men denne kan vist kun anvendes på tabelniveau, dvs. at den tager den sidste post i tabellen, hvor det jo ofte vil være ens kollega, der har lagt posten ind
19. maj 2004 - 13:19 #1
Du kan bruge DLAST i stedet for Last:

Du kan skrive således i formularens EfterOpdatering:

Me!sekrnr.defaultvalue = "'" & Me!sekrnr& "'"
Avatar billede mugs Novice
19. maj 2004 - 13:20 #2
Kræver reference til DAO:

Private Sub Form_Current()
Dim rs As DAO.Recordset
If Me.NewRecord Then
Set rs = Me.RecordsetClone
rs.MoveLast
Me!felt1.DefaultValue = "'" & rs!felt1 & "'"
rs.Close
End If
End Sub
Avatar billede terry Ekspert
19. maj 2004 - 13:20 #3
An idea would to have a global variable which you use to save the sekretærnumer which you logged on with. Then in the forms (fortløbende form) before Insert event you set the sekretærnumer to the value in the global variable.
Avatar billede terry Ekspert
19. maj 2004 - 13:20 #4
.
19. maj 2004 - 13:21 #5
Jeg manglede lige et mellemrum:
Me!sekrnr.defaultvalue = "'" & Me!sekrnr & "'"
Avatar billede bbkdk Seniormester
19. maj 2004 - 14:34 #6
Hej thomasJepsen!
Det virker fint når formularen kører, men ved åbning af formularen går det galt, hvis det ikke er mig der har lavet den sidste indberetning til tidsregistreringstabellen - så er det vedkommendes sekretærnummer der står i feltet.
Det er samme problemstilling som når hændelsen sættes som standardværdi på feltet.
Avatar billede bbkdk Seniormester
19. maj 2004 - 14:35 #7
Hej Mugs !
Det virker bare helt perfekt - tak
19. maj 2004 - 14:36 #8
Hvis du lagde min linie på formularens EfterOpdatering, så skulle der INTET ske ved opstart
19. maj 2004 - 14:37 #9
Er du sikker på, at du ikke har glemt at fjerne en standard-værdi på feltet eller lagt koden et forkert sted?
Avatar billede bbkdk Seniormester
19. maj 2004 - 14:41 #10
Hej terry !
Jeg har brugt Mugs løsning, men din virker også spændende, da det faktisk ofte er således, at man har brug for at sætte et felt til en bestemt værdi ved indgang.
Håber jeg på et tidspunkt må oprette et spørgsmål om, hvorledes man opretter en global variabel - eller endnu bedre - hvorledes man anvender en værdi fra en inputboks i et felt i den formular eller rapport, der åbnes.
19. maj 2004 - 14:45 #11
bbkdk->læste du det, som jeg skrev til sidst? Er du sikker på, at du ikke har en standard-værdi defineret på feltet?
Der er ingen tvivl om, at min linie kode virker og er den mindst resource-krævende, da den ikke skal slå noget som helst op.
Avatar billede bbkdk Seniormester
19. maj 2004 - 14:59 #12
Hej ThomasJepsen !!
Du havde ret - ganske som sædvanligt. Der stod en standardværdi på feltniveau.
Men samtidig må jeg sige at den ikke virker helt optimalt. Som du selv skriver, er feltet Sekrnr. tomt ved indlæsning, hvorimod Mugs løsning sætter den til det sekretærnummer, der står i den sidste post i den formular som åbnes. Og da kun poster med det sekretærnummer, som skal anvendes ved indberetning, åbnes, er feltet altid korrekt udfyldt fra start.
19. maj 2004 - 15:01 #13
men hvordan finder du brugerens sekretærnr? Hvis du har det allerede, hvorfor indsætter du så ikke bare det som standardværdi?
Avatar billede bbkdk Seniormester
20. maj 2004 - 08:46 #14
Hej ThomasJepsen !!
Brugerens sekretærnummer indtaster han i en inputboks ved åbning af formularen, således at forespørgslen kun henter netop hans indberettede tidsregistreringsdata for de sidste 2 måneder - derfor kan sekretærnummeret ved åbning af formularen også sættes lig den sidste indberetning.
Men ellers kan jeg godt se, at din løsning er mere overskuelig og sparer på systemets resourcer.
Hvis du har en løsning på de sidste lille problem, nemlig at sekrnr er tom ved åbning af formularen, er der også points til dig.
20. maj 2004 - 09:58 #15
ok, jeg går ud fra, at du har noget kode, som ser nogenlunde således ud:

Dim Seknr as string
Seknr = Inputbox("Angiv sekretærnummer")
Docmd.Openform "Din formular",,,"sekrnr = '" & Seknr & "'"


er det nogenlunde rigtigt?

Hvis du så fjerner "Dim Seknr as string" og i stedet åbner et modul (enten et eksisterende eller laver et nyt - det er ligegyldigt) og øverst skriver:

Public Seknr as string

...så kan seknr nu benyttes i hele applikationen (dog kun fra VBA)

På formularens EfterOpdatering-hændelse lægger du som sagt:
Me!sekrnr.defaultvalue = "'" & Me!sekrnr & "'"

og på formularens VedIndlæsning (Form_Load) lægger du denne linie kode:
Me!sekrnr.defaultvalue = "'" & seknr & "'"

Princippet er, at ved at erklære Seknr som public i et modul, så huskes det og kan ændres fra alle formularer.

Jeg håber, at det giver mening?
Avatar billede bbkdk Seniormester
21. maj 2004 - 09:06 #16
Hej ThomasJepsen !!
Jo - det giver fint mening og det synes også at virke fint - jeg har ikke haft tid til helt at gennemteste eksemplet.
Mit største problem ved anvendelse af VBA er, at jeg altid har arbejdet med forespørgsler som grundlag for formularer og rapporter, og de har en lidt anden syntaks. F.eks. har jeg aldrig før anvendt en inputboks på den måde som du angiver, men hentet [kriteriet] fra forespørgslen.
Jeg vil så snart jeg får tid bruge lidt mere tid på dit eksempel, da det faktisk også forklarer en del andre ting, der ofte giver mig problemer, når jeg forsøger at følge med i eksemplerne på "Eksperten" når der anvendes koder, f.eks hvordan men indsætter et modul i en procedure.
Hvordan kommer jeg nu af med mine points til dig (er 60 ok?)
21. maj 2004 - 09:19 #17
Pointene er ikke så vigtige. Jeg følte bare, at du gik glip af en god løsningsmetode, som du også kan bruge i andre henseender. (og min profesionelle stolhed fik sig et knæk, da min løsning blev overset, haha)
Og da du allerede har brugt 60 point, synes jeg højest at du skal oprette et nyt spm med et symbolsk antal point (10-20 stykker) og skrive:

Point til Thomas Jepsen
Ref: http://www.eksperten.dk/spm/500152
Avatar billede bbkdk Seniormester
21. maj 2004 - 09:55 #18
Hej ThomasJepsen !!
Jeg har lagt denne kode på en kommandoknap:

Private Sub Kommandoknap12_Click()
Dim seknr As String
seknr = InputBox("Angiv sekretærnummer")
DoCmd.OpenForm "Tidsregistreringsbillede", , , "sekrnr = '" & seknr & "'"
End Sub

Jeg har også lavet et modul, hvor jeg erklærer seknr as string. Hvis jeg ikke erklærer varialen i ovennævnte kode, for jeg en fejl "Expected variabel or procedure, not modul" selvom den er erklæret i modulet.

I formularens ved indlæsning og efter opdatering har jeg indsat dine forslag til kodelinier.

Når jeg klikker på knappen får jeg så en inputboks hvor jeg så angiver mit sekretærnummer. Så får jeg følgende fejl "OpenForm handlingen blev annulleret"
og når jeg debugger, er det følgende linie, der er forkert:

DoCmd.OpenForm "Tidsregistreringsbillede", , , "sekrnr = '" & seknr & "'"

Hvis jeg sætter markøren over seknr viser den korrekt, at jeg har skrevet 16 i feltet.

Har du en melding på, hvad der kan være galt.

M.v.h.
bbkdk
21. maj 2004 - 10:24 #19
vender tilbage om 10 min....
21. maj 2004 - 10:40 #20
Jeg tror at fejlen er, at du har erklæret variblen forkert i modulet.

Den skal hedde:
PUBLIC seknr as String

Hvis du bruger Dim i stedet for Public, så 'huskes' den kun af VBA-kode i samme modul.



Noget andet er, at du jo ikke kan bruge seknr som kriterie i f.eks. en forespørgsel, da VBA-variable kun virker i VBA. Det kan man løse ved at lave en funktion i et modul (gerne det samme modul som det andet) hvos du skriver:

Public Function Getseknr as String
  Getseknr = seknr
End function

Derved kan du bruge GetSeknr direkte i forespørgsler og andre steder (og selvfølgelig også i VBA)

/Thomas
21. maj 2004 - 10:41 #21
PS: Husk at fjerne 'Dim seknr As String' fra din kommandoknap12_click-procedure.
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