Avatar billede tupsy Nybegynder
14. juni 2002 - 00:59 Der er 23 kommentarer og
1 løsning

Godkend næste felt ved udfyldelse af forrige..

Jeg har 4 felter og en checkbox i en Access DB som jeg udfylder via en Form..

Mit problem er et man skal kunne udfylde felt 2 når man har skrevet i felt 1, felt 3 når felt 2 er udfyldt, felt 4 når felt 3 er udfyldt, og checkboxen må kun kunne afkrydses når felt 4 er udfyldt..
Kan man gøre det og hvordan???

Altså, er felt 1 udfyldet er felt 2 skrivbar ellers ikke O.S.V.

Håber I forstår.. ellers spørg...

Tupsy!!

Avatar billede pato Nybegynder
14. juni 2002 - 01:46 #1
du kan starte med at alle felter på nær felt1 er låst og ikke aktive.

efter update på felt1 checker du om felt1 <> ""
er den det så åben felt2 ..........o.s.v.
Avatar billede pato Nybegynder
14. juni 2002 - 01:51 #2
du kan starte med at sætte obligatorisk = ja og tilladNulllængde =nej for de 4 felter i tabellen... så kan man ikke oprette uden alle felterne er udfyldt (på tabel niveau)
Avatar billede pato Nybegynder
14. juni 2002 - 02:44 #3
du kan starte med at alle felter på nær felt1 til ikke aktive.

for hver felt vælger du hændelsesptocedure og her kalder du

changeform (fletnummer)


se koden nedenfor




Public Sub changeform(fieldnr)

Select Case fieldnr
    Case 1
        If Len(Me.felt1) > 0 Then
            Me.felt2.Enabled = True
            Else
                  Me.felt1.SetFocus
                  Me.felt2.Enabled = False
                  Me.felt3.Enabled = False
                  Me.felt4.Enabled = False
                  MsgBox ("Felt1 skal være udfyldt")
                End If
           
           
           
    Case 2
      If Len(Me.felt2) > 0 Then
            Me.felt3.Enabled = True
        Else
        Me.felt2.SetFocus
        Me.felt3.Enabled = False
        Me.felt4.Enabled = False
        MsgBox ("Felt2 skal være udfyldt")
        End If
   
   
   
    Case 3
        If Len(Me.felt3) > 0 Then
            Me.felt4.Enabled = True
        Else
        Me.felt3.SetFocus
        Me.felt4.Enabled = False
        MsgBox ("Felt3 skal være udfyldt")
        End If
   
   
    Case 4
        If Len(Me.felt4) > 0 Then
        Else
        Me.felt4.SetFocus
        MsgBox ("Felt4 skal være udfyldt")
        End If
End Select

End Sub

Private Sub felt1_AfterUpdate()
changeform (1)
End Sub


Private Sub felt2_AfterUpdate()
changeform (2)
End Sub

Private Sub felt3_AfterUpdate()
changeform (3)
End Sub

Private Sub felt4_AfterUpdate()
changeform (4)
End Sub


håber det hjælper dig lidt... der skal nok pudses på det
14. juni 2002 - 08:23 #4
Du sætter egenskaben "Aktiveret" til Nej på felt 2-4 og på checkboksen.

På After_Update-hændelsen på hver felt, ændre du blot denne egenskab på det næste felt:

Private Sub felt1_AfterUpdate()
  Me!Felt2.Enabled = True
End Sub

Private Sub felt2_AfterUpdate()
  Me!Felt3.Enabled = True
End Sub

osv
Avatar billede tma_oksboel Nybegynder
14. juni 2002 - 11:40 #5
Jeg synes:
Start med lås på alle felter i egenskaber fra formen af. Derefter i afterupdate på alle felter:
private sub Felt1_afterupdate()
OpdaterFelter
end

Private sub OpdaterFelter()
felt2.enabled = not null(felt1)
felt3.enabled = felt2.enabled
felt4.enabled = felt3.enabled
chkbox1.enabled = felt4.enabled

end sub

Den vil sætte egenskaben relativt til, om forrige felter er klar.

Smart ikk´
Avatar billede tma_oksboel Nybegynder
14. juni 2002 - 11:41 #6
Det skulle være et svar:

Jeg synes:
Start med lås på alle felter i egenskaber fra formen af. Derefter i afterupdate på alle felter:
private sub Felt1_afterupdate()
OpdaterFelter
end

Private sub OpdaterFelter()
felt2.enabled = not null(felt1)
felt3.enabled = felt2.enabled
felt4.enabled = felt3.enabled
chkbox1.enabled = felt4.enabled

end sub

Den vil sætte egenskaben relativt til, om forrige felter er klar.

Smart ikk´
Avatar billede tma_oksboel Nybegynder
14. juni 2002 - 11:43 #7
øhh, det første felt skal selvfølgelig ikke låses
Avatar billede tma_oksboel Nybegynder
14. juni 2002 - 12:00 #8
Jeg var ikke helt præcis med syntaksen. Her er den hele kode. Den er afprøvet og virker efter hensigten:

Private Sub Text0_AfterUpdate()
    OpdaterFelter
End Sub
Private Sub Text2_AfterUpdate()
    OpdaterFelter
End Sub
Private Sub Text4_AfterUpdate()
    OpdaterFelter
End Sub
Private Sub Text6_AfterUpdate()
    OpdaterFelter
End Sub

Private Sub OpdaterFelter()
Me.Text2.Locked = IsNull(Text0)
Me.Text4.Locked = IsNull(Text2)
Me.Text6.Locked = IsNull(Text4)
Me.Check8.Locked = IsNull(Text6)

End Sub
Avatar billede pato Nybegynder
14. juni 2002 - 14:49 #9
tma oksboel >  det virker ikke helt godt nok...man skal nok også teste på ""

Me.Text6.Locked = IsNull(Text4) OR Text4=""

Derudover kan man nu ændre det sidste felt selv onm feks. felt 2 er tom, for den sætter ikke gennem træet!
Avatar billede tupsy Nybegynder
14. juni 2002 - 14:55 #10
Den thomasjepsen er kommet med ser rimelig simpel ud.. Virker den mon??
Når jeg tester den kommer den maed en fajl ved :

Private Sub Tiltag_AfterUpdate()

(Tiltag er mit felt 2)
Hvorfor mon???
Avatar billede tupsy Nybegynder
14. juni 2002 - 14:55 #11
Uuups.. Tiltag er mit felt nr 1.
Men stadig.. Den fejler...
Avatar billede tma_oksboel Nybegynder
14. juni 2002 - 15:53 #12
OK, på baggrund af kommentar fra pato kommer her en revideret udgave af OpdaterFelter. Labeltilskrivningerne var blot for at kunne se ændringerne undervejs og kan selvfølgelig udelades:

Private Sub OpdaterFelter()
Me.Text2.Locked = Nz(Text0, "") = ""
Me.Text4.Locked = Nz(Text2, "") = "" Or Text2.Locked
Me.Text6.Locked = Nz(Text4, "") = "" Or Text2.Locked Or Text4.Locked
Me.Check8.Locked = Nz(Text6, "") = "" Or Text2.Locked Or Text4.Locked Or Text6.Locked
Label1.Caption = "Text0: " & Text0.Locked
Label3.Caption = "Text2: " & Text2.Locked
Label5.Caption = "Text4: " & Text4.Locked
Label7.Caption = "Text6: " & Text6.Locked
End Sub

Den er testet på kryds og tværs og virker.

med hensyn til simple og overskuelige løsninger, mener jeg ikke det bliver mere simpelt end dette.

Hilsen Torben
Avatar billede tupsy Nybegynder
14. juni 2002 - 16:11 #13
Kan du give en forklaring til hvad der sker hvor???

Så kan jeg nemlig selv lave det næste gang og derved lære noget af det...

Pleease... :-)
Avatar billede tma_oksboel Nybegynder
14. juni 2002 - 16:50 #14
Det kan jeg da fint. I hver AfterUpdate hændelse på de enkelte tekstfelter (det vil sige hændelsen der køres når feltet er blevet opdateret) kaldes metoden Opdaterfelter som er en jeg har lavet. I den metode sker følgende:
1. linie: Egenskaben locked bliver sat lig med sandhedsværdien af det efterfølgende udsagn. Det udsagn siger at hvis text0 er null (se hjælpen på nz funktionen. Den konverterer fra null til en anden værdi, her strengen "") eller "" så er udtrykket sand, og dermed bliver locked på text2 sat til sand.
Princippet fortsætter, dog er text4 også locked hvis text2 er locked og så videre.
Du finder egenskaben locked på det enkelte felt, de skal startes med at sættes til yes, bortset fra det første felt som man altid skal kunne indtaste i.

Hilsen Torben
Avatar billede tupsy Nybegynder
15. juni 2002 - 11:50 #15
Takker..
Jeg tester det mandag.. Det er nemlig noget jeg skal bruge på mit job...

Håber det er ok at vente med point.... ??

Tupsy!!
Avatar billede tupsy Nybegynder
15. juni 2002 - 16:23 #16
Hmm, hvordan kalder jeg metoden Opdaterfelter????
Avatar billede tma_oksboel Nybegynder
16. juni 2002 - 17:02 #17
Som det er vist i indlægget 14/06 klokkken 12:00. Du vælger egenskaben Afterupdate på de enkelte felter og i den kodeblok der kommer frem, skriver du Opdaterfelter.

Torben
Avatar billede tupsy Nybegynder
16. juni 2002 - 19:52 #18
Hmm, nu ser min kode således ud.. Men det funker stadig ikke... :

Private Sub OpdaterFelter()
Me.Tiltag.Locked = Nz(Tiltag, "") = ""
Me.Rep_udført_af.Locked = Nz(Rep_udført_af, "") = "" Or Rep_udført_af.Locked
Me.Nummer.Locked = Nz(Nummer, "") = "" Or Rep_udført_af.Locked Or Nummer.Locked
Me.Afsluttet.Locked = Nz(Afsluttet, "") = "" Or Rep_udført_af.Locked Or Nummer.Locked Or Afsluttet.Locked
End Sub



Private Sub Nummer_AfterUpdate()
OpdaterFelter
End Sub

Private Sub Rep_udført_af_AfterUpdate()
OpdaterFelter
End Sub

Private Sub Tiltag_AfterUpdate()
OpdaterFelter
End Sub
Avatar billede pato Nybegynder
17. juni 2002 - 12:05 #19
Husk at vælge hændelsesprocedure på Afterupdate under egenskaber på de enkelte felter i form design!...det kan godt være din kode ser sådan ud, men det er ikke sikkert at access ved at den skal kalde dem...når man skriver i kode, bliver hændelserne på felterne ikke automatisk opdateret.... det er nok bare det du mangler....


m.v.h.

Pato
Avatar billede tupsy Nybegynder
17. juni 2002 - 16:21 #20
Tror jeg ikke.. Det er nemlig måden jeg har lavet det på...
Valgt hændelsesforløb, klikket på de 3 ... , skrevet Opdaterfelter.

Så, hmm...
Avatar billede tma_oksboel Nybegynder
17. juni 2002 - 16:32 #21
Send din mail adresse, så skal jeg give dig eksemplet. Det er alt for simpelt at bruge så lang tid på. I mit eksempel kan du følge de forskellige statusændringer og bruge det som guide til at føre det over i din egen database.

Torben
Avatar billede tupsy Nybegynder
17. juni 2002 - 19:43 #22
Her...
Og undskyld at jeg kludre sådan i det...
access@blacksound.dk
Avatar billede tma_oksboel Nybegynder
17. juni 2002 - 20:34 #23
Beklager hvis jeg var uhøflig. Databasen er nu sendt.

Torben
Avatar billede tupsy Nybegynder
19. juni 2002 - 03:03 #24
Så funkede det...
Det var mig der klokkede i det...
Havde byttet lidt rundt på felterne....

1000 tak..
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