09. april 2002 - 17:13Der er
30 kommentarer og 1 løsning
Begrænset adgang til controls
Jeg vil gerne i min database forhindre folk i at indtaste oplysninger i diverse controler uden først at tage stilling til om de vil ændre det de er i gang med at ændre. Jeg havde forestillet mig at man når man trykker en tast vil man få en dialogbox der spørger om man vil ændre værdien. Hvis man så vælger ja skal den bestemte control så blive unlocked. Jeg er ikke helt sikker på det men kan man locke en hel form. Jeg kunne forestille mig at når man trykkede en tast og siger ja låser hele formen op og når man exiter den enkelte control låser hele formen, men jeg er ikke klar over hvordan det vil foregå. Man skal også huske at det som der evt er blevet rettet ved nedtastningen ikke skal gemmes men at den gamle værdi genindsættes hvis man siger nej (eller sker der ikke nogen ændring i en celle ved eventet on key down?) Nå men jeg vil blive rigtig glad for nogle råd med et spørgsmål jeg mener må være til at klare.
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
Var det så meningen at for at "låse" formen igen skulle man lave en Me.Alloweditions = false på exit control eventet? Og på et andet punkt...hvordan laver man en messagebox :-? hehe
Følgende procedure låser/låserop kontroller på formularen. Proceduren låser kun de felter, som har egenskaben "Mærke" (Tag) sat til "Lock":
Public Sub LåsKontroller(Lås as boolean) Dim n as integer Dim frm as Form Set frm = Screen.Activeform For n = 0 To frm.Count - 1 If frm(n).Tag = "Lock" Then frm(n).Locked = Lås frm(n).BackColor = QBColor(7)*Lås End If Next n end sub
Dernæst kan du blot skrive: LåsKontroller True
så låses de valgte kontroller. Eller: LåsKontroller False så åbnes de igen.
Jeg plejer at gøre det således at felterne er låst fra starten, men at brugeren så kan klikke på en knap, som kalder ovenstående funktion. Derefter kan brugeren rette.
En lille fejl sneg sig ind: Hvis man ønsker at kontrollen skal skifte farve til grå, når den er låst, skal sætningen se sådan ud: frm(n).BackColor = -QBColor(7)*Lås
men det vil sige at jeg kan lave en knap der låser op for alle med Lock i tagen, og derefter sige LåsKontroller True ved et evt. exitcontrol event, hvis jeg gerne vil have at man kun kan rette en ad gangen? Og hvad er det med BackColor?
weinreich > Der kom lige en haj forbi :o) Jeg trækker mig ydmygt tilbage og lytter. Jeg har dog en lille testdb i Access97 der omhandler MsgBox i.f.m. betingelser. Jeg sender den gerne, hvis du lægger din e-mail
Ok det virker rent faktisk men der er altså et eller andet galt. Når jeg starter er alle dem som jeg har sat til at være låste grå så det er som det skal være, men.... når jeg låser dem op bliver de sorte????? Det fatter jeg slet ikke. Hvordan undgår jeg at de bliver sorte men hvide istedet? Ellers er det helt vildt fedt og der er point hjemme men lige den her mangler jeg
just read the question so havent read all th eother comments and answers. WHY not do it another way! Let the user alter the data and before it gets accepted ask the user if they REALLY DO want to update?
Weinreich-> Det med den sorte var en tanketorsk fra min side (troede at hvid=0, tsk tsk tsk)
I stedet skal den se således ud: Public Sub LåsKontroller(Lås as boolean) Dim n as integer Dim frm as Form Set frm = Screen.Activeform For n = 0 To frm.Count - 1 If frm(n).Tag = "Lock" Then frm(n).Locked = Lås if Lås then frm(n).BackColor = QBColor(7) else frm(n).BackColor = QBColor(15) endif End If Next n end sub
Private Sub Tekst14_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode = 13 Then Me.Tekst14 = InputBox("Vil du ændre værddien", , Me.Tekst14) End If End Sub
Unskyld jeg blander mig her til sidst, men denne kode anvender jeg.
tekst14 er navnet på tekstboxen, der er låst. Når brugeren står i tekstboxen, kan han IKKE ændre værdien på anden måde end taste 'enter' og svare på inputboxen, der dukker op
Ideen er god - jeg har selv bruge samme ide somme tider. ENTER er måske ikke så god, da man ofte bruger den til at drøne gennem alle felter. Endvidere sker der noget uhensigtsmæssigt, hvis brugeren klikker Annullér på inputboksen (guess what)
Private Sub Tekst14_KeyDown(KeyCode As Integer, Shift As Integer) Dim temp If KeyCode = 13 Then temp = InputBox("Vil du ændre værddien", , Me.Tekst14) Me.Tekst14 = IIf(temp = "", Me.Tekst14, temp) End If End Sub
Og du har lært at Cancel = "", når vi snakker om inputboks'e!!
Terry->Sorry, jeg misforstod dit indlæg :o( Men du har helt ret; Det er også en måde at gøre det på. Det hele afhænger af hvad det er man ønsker at beskytte sig mod. Hvis man ønsker at sikre sig at brugeren rent faktisk ønsker at gemme ændringerne (og ikke blot har tabt telefonen ned oven på tastaturet) så er din løsning rigtig god.
Niels' løsning er god, hvis man kun ønsker at låse få felter ad gangen (ellers bør man i hvert fald lave koden som en generel funktion så man ikke har den samme stump kode liggende på 30 tekstbokse)
Mit forslag er godt, hvis folk er mere fortrolige med den gammeldags måde at 'åbne' posten for redigering. Jeg bruger faktisk oftest Terry's løsning, men har adskillige gange brugt min egen, hvis det var det, kunden ville have - i bund og grund er det nok en smagssag.
Endelig har jeg også lavet løsninger hvor man skulle taste et password, hvis man skulle have lov at ændre indholdet af en tekstboks.
As far as I see it ALL persons are allowed to alter data IF they want to. So way all the bother trying to STOP them from doing so? If the user enters data legitimately, OR by throwing the keyboard at the boss, then what is more easier than just asking them if the changes made are to be saved?
Thx for all the answers, I have somethings to think about now. And yes Terry maybe you have the best solution, I just never thought about the problem that way. Takker til alle.
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.