05. september 2003 - 10:11Der 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?
Brug af AI afslører de svagheder, virksomheder allerede har opbygget gennem års cloud-transformation, nye SaaS-løsninger og fragmenterede sikkerhedssystemer.
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?
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
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!!!
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.
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
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..
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
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?
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
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)
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.. ?
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?
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
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.. ;-)
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
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.