Avatar billede Newbee1 Novice
08. oktober 2010 - 12:16 Der er 12 kommentarer og
1 løsning

Låse formular på dagsdato

Hej

(Jeg har prøvet dette spørgsmåt før, men ikke helt fået løst mit problem)


Jeg har en formular, der laver en daglig rapport over fejl og mangler. Formularen åbner på dagsdato felt date(). Dagsdato felt er sat til ikke at tilade dubletter. Derved kan der ikke oprettes 2 rapporter på den samme dag.

Men..  Når jeg åbner formular, prøver access at lave en ny rapport, hvor det ikke er muligt at skrive. (Kommer med fejl meddelse, hvorfter man er nødt til lukke access ned).

Kan det lade sig gøre at første gang formual åbnes, laver den en ny "record", men resten af dagen åbnes formular direkte til redigering.


MVH

Tony
Avatar billede mugs Novice
08. oktober 2010 - 15:30 #1
Du burde kunne anvende funktionen DCount til at tælle, om dags dato findes i tsbellen. Er DCount > 0 udføres en handling, er DCount 0 0 udføres en anden.
Avatar billede Newbee1 Novice
08. oktober 2010 - 19:59 #2
Hej Mugs


Ville du gøre det i en forespørgelse ?
(Basere formularen på en forespørgelse)

Field: Expr: DCount("Date", "Daily_report", "date=0")

Criteria: If Expr then  ???

Når jeg åbner tabel, er datoen aldrig i nul ?

MVH

Tony
Avatar billede Newbee1 Novice
11. oktober 2010 - 21:27 #3
Hej Mugs


Kan du forklare det nærmere ?


MVH

Tony
Avatar billede mugs Novice
14. oktober 2010 - 17:47 #4
Du må undskylde, at jeg først vender tilbage nu. Jeg får først mail's flere dage efter kommentarerne er oprettede. Jeg vil programmere det i VBA og lægge koden i f.eks. formularens ved åbning. noget i stil med dette:

If DCount("*", "din tabel", "[dit datpfelt]= #" & Date & "#") > 0 Then
Gør noget
Else:
Ellers gør noget andet
End If
Avatar billede Newbee1 Novice
14. oktober 2010 - 19:01 #5
Hej Mugs


Du skal ikke undskylde, jeg er kun glad du gider hjælpe.



Jeg har sat dato felt til altid at være : Date(), derved
er dato felt altid større end 0. ??


MVH

Tony
Avatar billede mugs Novice
14. oktober 2010 - 22:36 #6
"Jeg har sat dato felt til altid at være : Date(), derved
er dato felt altid større end 0. "
Forstår jeg som om, at du har sat standardværdien for nye poster til at være = Date
Så har du ret i, at min kode altid vil give resultatet > 0
Du kan prøve at fjerne din standardværdi.


"Kan det lade sig gøre at første gang formual åbnes, laver den en ny "record", men resten af dagen åbnes formular direkte til redigering"

En forudsætning er, at du fjerner standardværdi for nye poster, derefter indsæt denne i formularens VedÅbning:

DoCmd.GoToRecord acForm, "frm1", acNewRec
If DCount("*", "din tabel", "[dit datofelt]= #" & Date & "#") = 0 Then
Udskriv din rapport
Else:
MsgBox "Der er genereret en rapport idag. Databasen lukkes."
docmd.quit
End if
Avatar billede Newbee1 Novice
15. oktober 2010 - 18:23 #7
Hej Mugs

Jeg tror du har ret, min VBA ser sådan ud nu, hvor kan jeg sætte koden for dato ind ? Kan jeg gøre det i samme kode ?


Private Sub Form_Load()

     
     
If DCount("*", "Daily Report", "[date]= #" & Date & "#") = 0 Then
    DoCmd.GoToRecord acForm, "daily report", acNewRec
    DoCmd.GoToControl "planner"
Else:
    DoCmd.GoToRecord , , acLast
    DoCmd.GoToControl "planner"
End If


End Sub


MVH

Tony
Avatar billede mugs Novice
15. oktober 2010 - 18:29 #8
Prøv enten ved Open eller Load. Jeg har en dansk version, så jeg kan ikke lige huske mde engelske betegnelser. Men prøv dig frem.

Du bør undgå mellem rum idine objektnavne (Daily Report), der er en evig kilde til fejl. Ligeledes skal du passe på med objektnavne der kan fortolkes som reserverede ord (date)
Avatar billede Newbee1 Novice
16. oktober 2010 - 11:38 #9
Hej Mugs

Tak for hjælpen


Kan jeg sætte koden for indsættelse af dagsdato, i samme
kode, eller skal den køre seperat.


MVH

Tony
Avatar billede mugs Novice
16. oktober 2010 - 11:47 #10
Den kan du sagtens indsætte i samme kode. Hvis feltet "planner" skal modtage en værdi, kan du gøre således:

If DCount("*", "Daily Report", "[date]= #" & Date & "#") = 0 Then
    DoCmd.GoToRecord acForm, "daily report", acNewRec
    DoCmd.GoToControl "planner"
    Me.planner = Date()
Else:
    DoCmd.GoToRecord , , acLast
    DoCmd.GoToControl "planner"
End if
Avatar billede mugs Novice
16. oktober 2010 - 11:55 #11
Tak for point.

Hvis feltet "planner" skal modtaget en værdi, er det ikke nødvendigt først at sende cursoren til feltet. Prøv at lege lidt med egenskaberne "Locked" og "Activatet". Uanset om feltet er låst og derved ikke kan modtage cursoren, vil det stadig reagere på Me.Planner = date(). Når du har indsat denne kodestump, er det jo ikke nødvendigt at sende cursoren til feltet, det eneste du opnår er jo, at du skal flytte cursoren til et andet felt.
Avatar billede Newbee1 Novice
16. oktober 2010 - 17:19 #12
Hej Mugs

Koden virker ikke efter hensigsten :
(Jeg har prøvet både ved åbning eller indlæsning ?

Private Sub Form_Load()

If DCount("*", "Daily Report", "[date]= #" & Date & "#") = 0 Then
    DoCmd.GoToRecord acForm, "daily report", acNewRec
    DoCmd.GoToControl "planner"
Else:
    DoCmd.GoToRecord , , acLast
    DoCmd.GoToControl "planner"
End If

End Sub


Den åbner en ny rapport, også selvom der står en dato i dato feltet ?

Jeg kan ikke få Me.planner=date()  til at virke
Access fjerner selv ().

Denne kode virker til dato:

Private Sub cmdTest_Click()
    planner.Value = Format(Now(), "mm/dd/yyyy")
End Sub


MVH

Tony
Avatar billede mugs Novice
16. oktober 2010 - 18:57 #13
Kan du sende din db i Access 2003 til;

mugs snabelting mail.dk

som en .zip fil, Så ser jeg på det.
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