[Access] Username als standwaarde in een tekstveld

Pagina: 1
Acties:
  • 431 views sinds 30-01-2008
  • Reageer

Acties:
  • 0 Henk 'm!

  • Falcon
  • Registratie: Februari 2000
  • Laatst online: 21:13

Falcon

DevOps/Q.A. Engineer

Topicstarter
Ik heb een formulier met een aantal velden en dergelijke.. dit werkt prima. Maar nu wou ik graag bij elk record weergeven welke username (van windows) wie deze heeft ingevuld.

Welke vbcode zou er bij de standwaarde van dat tekstveld moeten staan?

"We never grow up. We just learn how to act in public" - "Dyslexie is a bitch"


Acties:
  • 0 Henk 'm!

  • Remco
  • Registratie: Januari 2001
  • Laatst online: 12-06 14:11
Ik heb even voor je gekeken bij google, maar daar is zat te vinden.
Moet je maar zoeken op vba en username.

Van gewoon vb.net heb ik wel een stukje code, maar ben bang dat dat niet gaat werken.

The best thing about UDP jokes is that I don't care if you get them or not.


Acties:
  • 0 Henk 'm!

Anoniem: 113297

vba.interaction.environ("username") wil ook wel eens werken.

[ Voor 19% gewijzigd door Anoniem: 113297 op 22-09-2005 10:34 ]


  • TXC
  • Registratie: Oktober 2002
  • Laatst online: 20-05 09:48

TXC

Als je dit in een module zet:
Visual Basic:
1
2
Private Declare Function apiGetUserName Lib "advapi32.dll" Alias _
    "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long 't.b.v. UserName
en dan deze functie ook:
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Function UserName() As String
'NB Vereist onderstaande declaratie bovenin bij de declaraties:
'Private Declare Function apiGetUserName Lib "advapi32.dll" Alias _
    "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long

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
        UserName = Left$(strUserName, lngLen - 1)
    Else
        UserName = ""
    End If
End Function


Dan kun je die aanroepen voor de username. Had het bij de hand vandaar ;)


edit:
Dit is dus hetzelfde als wat Vlek poste }:O

[ Voor 9% gewijzigd door TXC op 21-09-2005 14:04 ]


  • Falcon
  • Registratie: Februari 2000
  • Laatst online: 21:13

Falcon

DevOps/Q.A. Engineer

Topicstarter
Ik ben misschien een ongelooflijke koe. Maar ik heb dus nu een module waar die code in oproepbaar is. In het veld heb ik als standaard fOSUserName() staan. Maar helaas komt er niks in te staan.

Hoe krijg ik nu die username in dat veld?

"We never grow up. We just learn how to act in public" - "Dyslexie is a bitch"


  • TXC
  • Registratie: Oktober 2002
  • Laatst online: 20-05 09:48

TXC

= tekentje ervoor denk ik :)

En het moet in een tekstveld, een label werkt niet.

Anoniem: 113297

in de defaultwaarde van de velddefinitie in ontwerpweergave kan je het niet instellen. je zal in een of ander formevent moeten nagaan of het veld leeg is, en zo ja, een van de hierboven vermelde functies aanroepen.

  • TXC
  • Registratie: Oktober 2002
  • Laatst online: 20-05 09:48

TXC

Anoniem: 113297 schreef op woensdag 21 september 2005 @ 16:54:
in de defaultwaarde van de velddefinitie in ontwerpweergave kan je het niet instellen. je zal in een of ander formevent moeten nagaan of het veld leeg is, en zo ja, een van de hierboven vermelde functies aanroepen.
Zekers kan dat wel. Als je je functie op moduleniveau hebt gedeclareerd kun je gewoon met =FunctieNaam() de returnwaarde in je tekstveld zetten. Misschien niet bij de defaultwaarde, maar op deze manier werkt het prima.

edit:
Bij Default Value werkt ook zelfs

[ Voor 13% gewijzigd door TXC op 21-09-2005 16:59 ]


Anoniem: 113297

niet in de defaultwaarde van het veld bij de ontwerpweergave van de tabel. zie Why no user-defined functions as default values? (error 3388)

  • TXC
  • Registratie: Oktober 2002
  • Laatst online: 20-05 09:48

TXC

Juist. Maar de TS wil het doen bij een tekstveld op een formulier volgens mij...
Ik heb een formulier met een aantal velden en dergelijke.... ....welke vbcode zou er bij de standwaarde van dat tekstveld moeten staan?
Dat kan namelijk weer wel, ook volgens het door jouw gequote artikel:
So you're left with putting your function call with each control that has this field as its ControlSource.
TS geeft trouwens niet 100% duidelijk aan of hij het bij de defaultvalue in de tabel of in een formulier wil gaan doen.

[ Voor 11% gewijzigd door TXC op 22-09-2005 08:59 ]


Anoniem: 113297

TXC schreef op donderdag 22 september 2005 @ 08:47:
[...]


Juist. Maar de TS wil het doen bij een tekstveld op een formulier volgens mij...
[...]
Dat kan namelijk weer wel, ook volgens het door jouw gequote artikel:
[...]


TS geeft trouwens niet 100% duidelijk aan of hij het bij de defaultvalue in de tabel of in een formulier wil gaan doen.
in de defaultwaarde van een tekstvak gaat het inderdaad wel zonder problemen, de ts wou het ook daar hebben vermoed ik.

  • Falcon
  • Registratie: Februari 2000
  • Laatst online: 21:13

Falcon

DevOps/Q.A. Engineer

Topicstarter
Opzich hebben jullie volgens mij gelijk met die =. En ja ik vul het in de defaultvalue van een formulier.

Nu krijg ik helaas #Naam? in dat tekstveld. Iemand een idee?

"We never grow up. We just learn how to act in public" - "Dyslexie is a bitch"


  • TXC
  • Registratie: Oktober 2002
  • Laatst online: 20-05 09:48

TXC

Dat betekent dat hij je functie niet kan vinden. Heb je in Access echt een module aangemaakt onder modulen en daar zowel de declaratie als de functie ingeplakt? Heb je de functienaam zeker goed ingevuld?

Acties:
  • 0 Henk 'm!

Anoniem: 103004

Ik heb psies het zelfde krijg ook #Naam?

Ik heb onder module gekozen voor nieuw, en de het volgende erin gezet:

Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
'******************** Begin Code **************************
Private Declare Function apiGetUserName Lib "advapi32.dll" Alias _
    "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long

Function fOSUserName() As String

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
        fOSUserName = Left$(strUserName, lngLen - 1)
    Else
        fOSUserName = vbNullString
    End If
End Function
'******************** Code End **************************


Heb de module de naam fOSUserName gegeven.
In mijn formulier zet ik bij het veld in standaard waarde =fOSUserName()
Maar het resultaat is niet wat het moet zijn, iemand een tip ?

Acties:
  • 0 Henk 'm!

  • Boss
  • Registratie: September 1999
  • Laatst online: 18:21

Boss

+1 Overgewaardeerd

Op deze manier komt de naam alleen bij nieuwe records te staan he?

Werkt het wel als je in het debugscherm een
code:
1
? fOSUserName
doet?

The process of preparing programs for a digital computer is especially attractive, not only because it can be economically and scientifically rewarding, but also because it is an aesthetic experience much like composing poetry or music.


Acties:
  • 0 Henk 'm!

Anoniem: 103004

Dan krijg ik compileer fout, Type komen niet overeen met elkaar.

Acties:
  • 0 Henk 'm!

  • Falcon
  • Registratie: Februari 2000
  • Laatst online: 21:13

Falcon

DevOps/Q.A. Engineer

Topicstarter
Even als toevoeging .. ik krijg ook nog steeds niet de username te zien en ik krijg exact de zelfde foutmelding. Zou iemand ons even kunnen helpen hiermee, zou erg fijn zijn.

"We never grow up. We just learn how to act in public" - "Dyslexie is a bitch"


Acties:
  • 0 Henk 'm!

  • Boss
  • Registratie: September 1999
  • Laatst online: 18:21

Boss

+1 Overgewaardeerd

En met deze code:
Visual Basic:
1
2
3
4
5
6
7
8
9
Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long

Function UserName() As String
Dim lpBuff As String * 25
Dim ret As Long
  
  ret = GetUserName(lpBuff, 25)
  UserName = Left(lpBuff, InStr(lpBuff, Chr(0)) - 1)
End Function

The process of preparing programs for a digital computer is especially attractive, not only because it can be economically and scientifically rewarding, but also because it is an aesthetic experience much like composing poetry or music.


Acties:
  • 0 Henk 'm!

Anoniem: 103004

Met die code krijg ik het ook niet aan de praat.

Heb het nu anders gedaan door de code: =Environ("username") te gebruiken
Dit werkt wel, en krijg ik netjes de gebruikersnaam te zien.

Acties:
  • 0 Henk 'm!

  • Boss
  • Registratie: September 1999
  • Laatst online: 18:21

Boss

+1 Overgewaardeerd

Zie daarover ook mijn post in dit topic. Environ is volgens mij niet echt een veilige versie.

Heel vreemd dat deze code niet werkt, heb het al redelijk vaak in verschillende omgevingen gebruikt. Wat voor OS en Office versie werk je mee?

The process of preparing programs for a digital computer is especially attractive, not only because it can be economically and scientifically rewarding, but also because it is an aesthetic experience much like composing poetry or music.


Acties:
  • 0 Henk 'm!

  • TXC
  • Registratie: Oktober 2002
  • Laatst online: 20-05 09:48

TXC

Ik heb net even wat dingen geprobeerd en bij mij is het volgende het geval.

Deze code:
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
'******************** Begin Code **************************
Private Declare Function apiGetUserName Lib "advapi32.dll" Alias _
    "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long

Function fOSUserName() As String

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
        fOSUserName = Left$(strUserName, lngLen - 1)
    Else
        fOSUserName = vbNullString
    End If
End Function
'******************** Code End **************************


...werkt prima, zolang de naam van module waarin de code staat NIET "fOSUserName" is. Ik vind het vreemd, maar in mijn Access 2000 is dit het geval.

[ Voor 196% gewijzigd door TXC op 17-01-2006 11:29 ]


Acties:
  • 0 Henk 'm!

  • Boss
  • Registratie: September 1999
  • Laatst online: 18:21

Boss

+1 Overgewaardeerd

Dat is natuurlijk niet zo heel vreemd, anders heb je dubbele declaraties. Dat zal bij iedere code die je schrijft het geval zijn!

The process of preparing programs for a digital computer is especially attractive, not only because it can be economically and scientifically rewarding, but also because it is an aesthetic experience much like composing poetry or music.


Acties:
  • 0 Henk 'm!

Anoniem: 103004

Office 2003 en win xp sp2

Acties:
  • 0 Henk 'm!

  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

Anoniem: 103004 schreef op maandag 16 januari 2006 @ 12:00:
[...]

Heb de module de naam fOSUserName gegeven.
In mijn formulier zet ik bij het veld in standaard waarde =fOSUserName()
[...]
Als je een module dezelfde naam geeft als een functie moet je hem (vanuit vba) aanroepen inclusief de modulenaam: =blaat.blaat(). In een textbox krijg ik het onder A2000 niet werkend met gelijkluidende module en functienamen.

offtopic:
in Access moet je sowieso oppassen met dubbele namen. De standaardinstelling van een gelijke naam voor control en onderliggend veld kan voor problemen zorgen bij berekeningen. Als er geen goede reden is om dezelfde naam te gebruiken zal ik het ook niet doen

[ Voor 52% gewijzigd door Lustucru op 17-01-2006 12:27 . Reden: tsskkk, zeg nooit nooit ]

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland


Acties:
  • 0 Henk 'm!

  • TXC
  • Registratie: Oktober 2002
  • Laatst online: 20-05 09:48

TXC

Anoniem: 103004 schreef op maandag 16 januari 2006 @ 12:00:
Ik heb psies het zelfde krijg ook #Naam?

Ik heb onder module gekozen voor nieuw, en de het volgende erin gezet:

Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
'******************** Begin Code **************************
Private Declare Function apiGetUserName Lib "advapi32.dll" Alias _
    "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long

Function fOSUserName() As String

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
        fOSUserName = Left$(strUserName, lngLen - 1)
    Else
        fOSUserName = vbNullString
    End If
End Function
'******************** Code End **************************


Heb de module de naam fOSUserName gegeven.
In mijn formulier zet ik bij het veld in standaard waarde =fOSUserName()
Maar het resultaat is niet wat het moet zijn, iemand een tip ?
Dan zal dat zijn probleem inderdaad zijn dan.
Boss schreef op dinsdag 17 januari 2006 @ 11:34:
Dat is natuurlijk niet zo heel vreemd, anders heb je dubbele declaraties. Dat zal bij iedere code die je schrijft het geval zijn!
Als ik mijn functie UserName noem (zoals in de eerste code die ik poste met de username functie) en mijn module ook UserName noem en dan =UserName in mijn textveld zet werkt het prima. :/

[ Voor 19% gewijzigd door TXC op 17-01-2006 12:11 ]

Pagina: 1