14. juni 2002 - 00:59Der 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.
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)
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
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.
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.
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
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.
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.
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.
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
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....
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.
Så funkede det... Det var mig der klokkede i det... Havde byttet lidt rundt på felterne....
1000 tak..
Synes godt om
Ny brugerNybegynder
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.