Avatar billede torejessen Nybegynder
05. september 2003 - 10:11 Der er 37 kommentarer og
1 løsning

Velkommen 'brugerId'

Hej
Terry du har tidligere i spm 184331 svaret en bruger.
Det hjalp ham, men jeg er ikke sikker på jeg forstår det.
Jeg vil også gerne have en velkomst på min "oversigtsstyring/switchboard" der siger "Velkommen Marianne".
Jeg vil også gerne kunne kalde denne variabel i resten af formularerne, så jeg kan indsætte variablen i alle mine tabeller. Dvs. så jeg kan se hvem der har indtastet hvilke kunder, og hvilke ordrer osv.
Hvad er "Sfet" som du skrev om?

Hvordan gør man dette?

Please svar på begynderniveau..

Mvh
Tore

PS Hvis nu computeren hedder dhgfjkwfq765, skal jeg så have en tabel, hvor jeg oversætter computernavne til medarbejdernavne?
Avatar billede jkrons Professor
05. september 2003 - 10:14 #1
På dette link finder du kode, der kan hente brugerens net-login. Det kan du så i en tabel oversætte til brugerens egget navn:

http://www.mvps.org/access/api/api0008.htm
05. september 2003 - 10:19 #2
Alle disse forskellige funktioner til at skaffe brugeren Windows-login er ofte helt overflødige, da der ligger en langt mere velegnet kommando i Access, som kan bruges direkte i formularer, forespørgsler m.m.
Den ser således ud:

Environ("Username")

Hvis du vil have en velkomsthilsen på dit switchboard, så laver du en tekstboks, med denne kontrolelementkilde:
="Velkommen " & Environ("Username")

Hvis brugerens Windows-login ikke er 'brugervenligt' nik, så er du ganske rigtigt nødt til at lave en tabel, som konvertere navnet til det rigtige. Herefer laver du en funktion, som slår op og returnere det fulde navn.
Skal du have hjælpe til det?
Avatar billede terry Ekspert
05. september 2003 - 10:22 #3
="Velkommen " & DlookUp("TheUserName", "TheTable", "UserID = '" Environ("Username") & "'")

or something like that :o)
Avatar billede terry Ekspert
05. september 2003 - 10:23 #4
="Velkommen " & DlookUp("TheUserName", "TheTable", "UserID = '"  & Environ("Username") & "'")
05. september 2003 - 10:26 #5
Jeg vil til hver en tid foretrække at lave en funktion, som returnere brugernavnet i stedet for at skulle bruge Dlookup alle steder. Især da DLookup er utrolig langsom, når den bindes direkte til en tekstboks.

Public Function GetBrugernavn as String
    GetBrugernavn = DlookUp("TheUserName", "TheTable", "UserID = '"  & Environ("Username") & "'")
End Function

Herefter skriver du i din tekstboks:

=Velkommen " & GetBrugernavn()
05. september 2003 - 10:29 #6
PS: Funktionen skal anbringes i et Modul for at virke alle steder
Avatar billede terry Ekspert
05. september 2003 - 10:32 #7
But Thomas you are using Dlookup yourself!

Make a global varibale (in a module)

Public gUserName as String

Then in your startup form

gUserName = DlookUp("TheUserName", "TheTable", "UserID = '"  & Environ("Username") & "'")


Then EVERYWHERE you need to use the user name you have it in gUserName
05. september 2003 - 10:38 #8
Terry-> c'mon...Du ved da, at DLookup er særlig langsom, når man bruger den direkte i en tekstboks. Mens når man bruger den i VBA, så er den hurtig nok.

Mht at bruge en public variabel, så kan de jo ikke bruges direkte i tekstbokse og slet ikke i f.eks. forespørgsler!!!
Avatar billede terry Ekspert
05. september 2003 - 10:44 #9
Your right about Dlookup being slow in some situaitions Thomas. But if you an call GetBrugernavn from a "kontrolelementkilde" then

This must be faster

Public Function GetBrugernavn as String
    GetBrugernavn = gUserName
End Function


Which can also be used from a query
05. september 2003 - 10:56 #10
Det er selvølgelig rigtigt. Man kan altid optimere.
I dette tilfælde vil jeg så foretrække at lave funktionen således:

Public Function GetBrugernavn as String
    if len(gUserName) = 0 then
        gUserName = DlookUp("TheUserName", "TheTable", "UserID = '"  & Environ("Username") & "'")
    endif
    GetBrugernavn = gUserName
End Function

Derved behøver du ikke at sætte variablen på opstart-formularen (sæt nu, at der er flere forskellige opstartformularer i forskellige situationer). Endvidere kan vi ikke vide om der kan opstå fejl i Tore Jessen's database, således at brugeren skal klikke <End> i debug-dialogboksen. Derved vil gUserName blive nulstillet og funktionen vil blive uduelig.

Generelt er jeg ikke så glad for blobale variable pga ovenstående scenarier.
05. september 2003 - 10:57 #11
blobale = globale :)
Avatar billede terry Ekspert
05. september 2003 - 11:08 #12
Now we are getting there Thomas :o)
Avatar billede torejessen Nybegynder
05. september 2003 - 11:14 #13
Wow tak skal i have for hurtige svar!
Jeg har lige prøvet Thomas´ svar, dvs. en tekstboks på switchboardet med en kontrolelementkilde jeg copy-pastede..
Der kommer kun til at stå "Velkommen".. Ikke mere..
Kan det være koden der mangler noget, eller HAR vi slet ikke noget netværksnavn? (Vi har win98) men logger på et netværk..
Jkrons - også tak for dit svar, men koden må høre under den slags Thomas mener er Overflødigt..
??
Hilsen
Tore
Avatar billede torejessen Nybegynder
05. september 2003 - 11:16 #14
OK - jeg havde ikke set alle de nye indlæg.

Tjekker lige igen..
Avatar billede jkrons Professor
05. september 2003 - 11:16 #15
Sikkert. Jeg tror den stammer fra før Environ blev opfundet.
Avatar billede terry Ekspert
05. september 2003 - 11:20 #16
Hav eyou tried using the code from the question instead of Environ?
Avatar billede torejessen Nybegynder
05. september 2003 - 11:21 #17
OK
Let me get it straight:
Thomas´ første svar er det nemmeste/smarteste (="Velkommen " & Environ("Username")
), men hvis man har brugeruvenlige logons, skal man lave tabeller.
Hvis man har tabeller, så skal man hellere bruge funktioner..

Rigtigt forstået?
Avatar billede terry Ekspert
05. september 2003 - 11:38 #18
Does Environ("Username") give you the current user?

What is a "brugeruvenlige" logon?

If a user has a logon for example "tbs" then this needs to be translated to the user name you wnat to display.

If you can accept "tbs" then NO you do NOT need an extra table. But if you want to display "Terry" or even "Terence" then you will need an extra table.
If you do NOT need an extra table then you do not need a function other than Environ
Avatar billede torejessen Nybegynder
05. september 2003 - 11:43 #19
Hej igen
="Velkommen " & Environ("Username")
Denne kode giver kun et "Velkommen" ikke noget brugernavn.
Ved ikke hvorfor.
Jeg ville helst bruge denne enkle kode, indtil jeg kan se hvad vore log-on navne egentlig er..
Men hvorfor virker ovenstående ikke?
05. september 2003 - 11:44 #20
Prøv at trykke Ctrl+G og skriv:
?Environ("Username")

og tryk ENTER og se om den skriver brugernavnet?
Avatar billede torejessen Nybegynder
05. september 2003 - 12:14 #21
Sukkk jeg synes jeg kommer til at ligne en begynder mere og mere..
I hvilket program? I Access sker intet når jeg trykker Ctrl+G..
Hverken når selve databaseskærmen er oppe, eller når switchboardet er fremme..
Har Win98
05. september 2003 - 12:17 #22
OG Access 2000 eller ?
05. september 2003 - 12:18 #23
Ctrl+G plejer at åbne kodeeditoren og stille markøren i debug-vinduet nederst på siden. Her kan man så taste forskellige udtryk (f.eks. det foreslåede)
Avatar billede overchord Nybegynder
05. september 2003 - 12:23 #24
Kan da lige tilfoeje at Environ("Username") virker ned til Access 97.
05. september 2003 - 12:24 #25
Overchord->ja, det gør det endnu mere utroligt at det altid er den anden kode, som bliver foreslået ;o)
Avatar billede torejessen Nybegynder
05. september 2003 - 12:28 #26
Jeg bruger access2000
Ctrl åbner intet.
Men jeg kan selv åbne Microsoft Visual Basic
Kan jeg køre den " ?Environ("Username") " derfra et sted?
05. september 2003 - 12:30 #27
Hvis du ikke lille vindue (blandt alle de andre) som hedder "Immidiate", så kan du åbne den ved at gå i menuen View->Immidiate window
Avatar billede torejessen Nybegynder
05. september 2003 - 12:38 #28
Jeg har åbnet databasen
Stillet markøren i "Formularer" og markeret "Switchboard" uden at åbne den.
Trykket på "Programkode" (Der åbner M Visual Basic)
Trykket Ctrl+G der åbner "immediate window" OK
Pastet din kode ?Environ("Username") trykket ENTER
og der sker intet.. Måske har vi ikke noget logon-navn.. ?

Hmm
Nåmen tak for hjælpen.. :-(
05. september 2003 - 12:42 #29
spooky!!

Lige for at checke....prøv i stedet at skrive:
?Date

Giver dette noget?
Avatar billede torejessen Nybegynder
05. september 2003 - 12:49 #30
Godt Thomas :_) Du er vist vant til at fange begyndere i at råbe Virker-ikke..
På linjen under din date , skriver den datoen så den kører altså koden..
Hvis det er noget hjælp til, stå stiller cursoren efter Environ-funktionen sig TO linjer nedenunder koden. Måske har den kørt koden og logon er bare tom?
05. september 2003 - 12:52 #31
Ja, det tyder på det. Jeg har bare aldrig oplevet det før...

Prøv at indsætte disse linier i et nyt modul:

Private Declare Function apiGetUserName Lib "advapi32.dll" Alias _
    "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long

Function GetUserName() As String
' Returns the network login name
Dim lngLen As Long, lngX As Long
Dim strUserName As String
    strUserName = String$(254, 0)
    lngLen = 255
    lngX = apiGetUserName(strUserName, lngLen)
    If lngX <> 0 Then
        GetUserName = Left$(strUserName, lngLen - 1)
    Else
        GetUserName = ""
    End If
End Function


Herefter prøver du at skrive:
?GetUserName

og ser hvad der så sker...?
Avatar billede torejessen Nybegynder
05. september 2003 - 12:59 #32
Hmm - ok - nu skriver den "tore"
Avatar billede torejessen Nybegynder
05. september 2003 - 13:01 #33
Hvad så? Skal jeg så bruge den istedet?
Øv den anden så så enkel ud..
Hvis du siger dette er den jeg skal bruge, så skal du nok få pointene..

Tak for din store hjælp!
05. september 2003 - 13:01 #34
okay, så er vi kommet så langt!!
Vi har fundet en fejl i Access, og vi har fundet ud af en workaround ;o)

Herefter skal du bare erstatte Environ(Username") med GetUsername() alle steder. :o)
Avatar billede torejessen Nybegynder
05. september 2003 - 13:07 #35
1000 Tak :-))

Også til jer andre..
05. september 2003 - 13:08 #36
selv tak :o)
Avatar billede torejessen Nybegynder
05. september 2003 - 13:19 #37
Det ser forresten ikke ud til at virke hvis jeg slettede din funktionskode (fra module1) og indsatte den i et af de andre moduler. Så nu har jeg oprettet et nyt module1 og det virker igen..
Tjaeh det er bare en af de ting vi begyndere må finde os i.. ;-)
05. september 2003 - 15:08 #38
Det var jo derfor, at jeg skrev, at det skulle indsættes i et NYT modul :o)

Du kan godt sætte det ind i et af dine andre moduler, men den øverste linie, skal stå i toppen:
Private Declare Function apiGetUserName Lib "advapi32.dll" Alias _
    "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long
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