Avatar billede martens Guru
01. november 2001 - 23:45 Der er 10 kommentarer og
2 løsninger

Check om form er åben i flerbrugermiljø

Hvordan checker jeg ved åbning af en form om den er åbnet af en anden bruger ?

Det drejer sig om en form, der for et nyt fortløbende nummer, hver gang den åbnes.
Dette nummer bliver benyttet som fejlmeldingsID i min lille database over en masse hard- & software.
Men hvis to brugere åbner samme form inden den ene får sendt en fejlmelding vil den næste fejlmelding have det samme nummer som den, der netop er afsendt, da begge brugere har fået tildelt samme nummer, da ingen har fået sendt en fejlmelding inden formularen blev åbnet.
Min løsning (idé) går på at forhindre andre brugere at åbne formularen, når den er åbnet én gang af én bruger.
Brugeren skal så have en besked om at formen er åben af anden bruger,- \"Vent venligst\" (måske en løsning a´la den man ser i Excel : Giv besked...)
Alle brugere logger ind i databasen med userID samt Password, så der kan måske \"net send´es\" en message, når formen lukkes... - Nu kan du åbne fejlmelding,- Bruger %navn% har afsluttet sit arbejde...

Men hvordan gøres det på den mest geniale måde...

- lidt at tænke over i den kommende weekend...


mvh martens 
Avatar billede terry Ekspert
02. november 2001 - 08:07 #1
When a form is loaded it gets loaded into memory on each PC, so you cant see who has opened (loaded) what. You would have to program yor way around this. Perhaps have a table containing users and another forms. I think you would you would also need to have a many to mant relationship becuase a form can be opened by many users.
Hope that helps clear things up?
Avatar billede terry Ekspert
02. november 2001 - 08:09 #2
When a user opens a form (On form load event)his name get put into a table along side the form name. When he closes it (on form close) the record is deleted.
02. november 2001 - 08:32 #3
Jeg vil foreslå dig at sætte et \'flag\' på formens OnLoad-hændelse.
Dette \'flag\' sænkes igen på formens OnClose-hændelse.

Dette flag kan laves på mange måder; du kan have en systemtabel med kun én post, hvor du bare har et felt som angiver om formen er låst eller ej (Ja/nej-felt). I denne tabel kan det måske være en fordel også at have en kolonne som angiver hvilken bruger, der har låst og hvornår.

På formens OnOpen-hændelse laver du så bare en stump kode lige dette:
If DLookup(\"FormularLåst\", \"Systemtabel\") then
  msgbox \"Formularen er låst af en anden bruger!\",vbinformation, \"Ingen adgang!\"
  docmd.cancelevent
endif

Du er dog nødsaget til at kunne nulstille flaget manuelt, da der kan opstå situationer hvor det ikke bliver clearet af en bruger - f.eks. ved systemnedbrud/strømsvigt eller lign. Men hvis du har dato med systemtabellen kan du jo nemt se hvor lang tid den har været åben og derved sætte en øvre grænse for hvad der er rimeligt.
Hvis du har brugernavn med i systemtabellen kan du endvidere (i Access 2000 og XP) kontrollere om den aktuelle bruger overhovedet har databasen åben. Hvis ikke; så er det bare at nulstille flaget.
At checke om en given bruger har databasen åben kræver lidt avanceret kode, som benytter ADOX (udvidet ADO).

/Thomas
www.makeiteasy.dk
Avatar billede terry Ekspert
02. november 2001 - 08:55 #4
Another solution is to re-think the procedure you use for sending \"fejlmeldinger\".
At the moment you get a new number when the form gets opended. and when the user accepts(commits) the \"fejlmelding\" the number is actually used (sent). You should concider getting the next number ONLY when the \"fejlmeldinger\" is accepted(commited). This way you would not have the problem your having. And as Thomas says, there is NO guaranty that the form IS opened if an error occurs!
Avatar billede martens Guru
02. november 2001 - 21:49 #5
terry og thomas >> Godt gået ...
I har begge bidraget til en del tankevirksomhed hos mig...

Hver på Jeres egen måde, ganske som det plejer at være..

Jeg vil lige tænke (samt forsøge at checke Jeres forslag/idéer)

I´ll be back..

mvh martens
Avatar billede terry Ekspert
23. november 2001 - 10:12 #6
hi martens>Hows it going with this question?
Avatar billede martens Guru
23. november 2001 - 18:11 #7
terry >> Jeg arbejder på det...
Det med at skrive currentuser() i en tabel sammen med formularnavet er jo næsten genialt..
så on formload = if tbl_form_001.username <> null then form close

besked til bruger... bla bla

---

arbejder på at få dem, der forsøger at åbne formularens usernames ned i en anden tabel, således at de kan gives besked via net send eller e-mail...

Tja... projekter vokser...

mvh martens

I´ll Be back..
Avatar billede terry Ekspert
27. december 2001 - 22:03 #8
Hi martens>Weell its a month since we last heard from you, any chance of ever closing this question?
Avatar billede terry Ekspert
17. januar 2002 - 10:53 #9
Two months +
Avatar billede terry Ekspert
25. januar 2002 - 18:07 #10
Almost three months now!
Avatar billede martens Guru
09. februar 2002 - 01:52 #11
worth waiting for !  - thanX
Avatar billede terry Ekspert
09. februar 2002 - 12:40 #12
Thank you, I thought you had gone on a long vacation :o)
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