Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Environ("Username") mit Text verketten

Begonnen von AOT, August 01, 2017, 15:17:39

⏪ vorheriges - nächstes ⏩

Lachtaube

Dann würde ich mal in Touch() die Fehlerbehandlung auskommentieren, einen Haltepunkt setzen und verfolgen, was während des Ablaufs passiert.
Grüße von der (⌒▽⌒)

AOT

Der Name des Formulars stimmt.

Wenn ich
strUserKlarname = rsKlarname(0) '& " - " & Environ("Username")
auskommentiere gehts. Sonst wieder nicht.

Ich habe auch spaßhalber mal den Text nach hinten gestellt. Auch hier geht nur die auskommentierte Variante
strUserKlarname = rsKlarname(0) & Environ("Username") '& " - "

Ein
strUserKlarname = rsKlarname(0) & " - "
funktioniert auch.

Wenn es bei Dir geht, dann liegt es vielleicht aber nicht am Code, sondern an einem Verweis. Hat jemand eine Idee?

Gruß
Jürgen

el_gomero

ersetz als erstes mal die aufgeblasene Funktion durch


Public Function fncUserName()

    fncUserName = DLookup("nutzer", "Nutzer", "idm='" & Environ("username") & "'") & " - " & Environ("Username")

End Function


der Einzeiler liefert das gewünschte Ergebnis. btw ein Feld gleich der Tabelle zu benennen ist unschön ...

Wenn du das eingebaut und getestet hast, gehts weiter ...
Gruß
Jürgen


Hilfe nach bestem Wissen, ohne Anspruch auf Richtigkeit und Vollständigkeit.
*feedback erwünscht*
Bitte Tipps lesen

Lachtaube

#18
Seltsame. Environ gehört zwar zu den Sandbox-Funktionen, die der Ausdruck-Dienst von Access ablehnt - dass das auch in VBA so ist, wäre mir neu. Mit welcher Access-Version bist Du denn unterwegs?

Ansonsten kannst Du es ja mal mit der API-Version versuchen.Private Declare Function GetEnvironmentVariableW Lib "kernel32" ( _
   ByVal lpName As LongPtr, _
   ByVal lpBuffer As LongPtr, _
   ByVal nSize As Long) As Long

Public Function GetEnvironmentVariable(ByRef EnvVar As String) As String
   Dim rVal As Long, buf As String
   
   rVal = GetEnvironmentVariableW(StrPtr(EnvVar), 0, 0)
   If rVal > 0 Then
      buf = String$(rVal, vbNullChar)
      rVal = GetEnvironmentVariableW(StrPtr(EnvVar), StrPtr(buf), rVal)
      If rVal > 0 Then
         GetEnvironmentVariable = Left$(buf, rVal)
      Else
         MsgBox "DLL call error: " & Err.LastDllError
      End If
   End If
End Function


[edit]Da habe ich wohl nicht richtig mitgelesen. Schau mal, ob die Autokorrektur im Steuerelement aktiv ist.[/edit]
Grüße von der (⌒▽⌒)

DF6GL

Hallo,

und weiter oben (unten) hatte ich das Gleiche    (den Einzeiler) in Grün vorgeschlagen....  ::)

AOT

Die Accessversion ist 2010.

@DFGL und el_gomero: Einzeiler funktioniert. Danke und sorry, dass ich den vorherigen übersehen habe. Das Problem tritt aber weiter auf.

@Lachtaube: danke für den Code, aber ich habe API noch nie benutzt und traue mich so spontan nicht ran.

Ich habe kurzzeitig überlegt, ob vielleicht die " in Environ("Username") stören, aber ein Versuch mit Right(Environ(40), 8) hat nichts gebracht :-(.

Auch 
Environ$("username")
war ohne Ergebnis :-(

Viele Grüße
Jürgen

el_gomero

ok, wenn der Einzeiler bei dir funktioniert, gehen wir zum nächsten Schritt ...


...
void(strForm) = Touch()
...

was ist void? Ein Textfeld auf dem Form, für das der Bezug Me! weggelassen wurde? Wieso soll dem etwas zugewiesen werden? Touch gibt jedenfalls nichts zurück ...

Gruß
Jürgen


Hilfe nach bestem Wissen, ohne Anspruch auf Richtigkeit und Vollständigkeit.
*feedback erwünscht*
Bitte Tipps lesen

AOT

Da erwischt Du mich auf dem falschen Fuß. Ich nutze eine Datenbank, deren Basis vor langer Zeit entwickelt wurde und der Entwickler damals hat in dem allgemeine Modul die void als
Global void         As Variant
ohne Erläuterung definiert. Das void taucht immer mal wieder auf und ich verstehe den Sinn nicht ganz Ich muss aber dazu sagen, dass der als Informatiker richtig Ahnung davon hatte und sehr gut war - im Gegensatz zu mir...

Ich habe das Touch mal umgangen und rufe die fncUserName direkt im Klassenmodul auf.

Private Sub Form_BeforeUpdate(Cancel As Integer)
On Error Resume Next

If IsNull(Nachname) And IsNull(Organisation) Then
    MsgBox "Die Felder 'Nachname' und 'Organisation' dürfen nicht beide leer sein!" & Chr$(13) & Chr$(10) & "(Rückgängig mit Esc)", 16
    Cancel = True
Else
    Me!Aenderung_Nutzer = fncUserName()
    'void = Touch()
End If

End Sub


Das Problem bleibt leider :-(

el_gomero

#23
gibt es im aktiven Formular denn ein Feld namens Aenderung_Nutzer? Wenn ja was passiert, wenn du aus dem Direktfenster

Forms!DeinForm!Aenderung_Nutzer = fncUserName()

oder

Forms!DeinForm!Aenderung_Nutzer = "Hallo Jürgen"

eingibst?

Nachtrag:  wenn man mit 10 Zeilen programmiert, was mit 1 Zeile erledigt werden kann, mag das Gründe haben und sieht auf jeden Fall imposant aus, aber ...
Gruß
Jürgen


Hilfe nach bestem Wissen, ohne Anspruch auf Richtigkeit und Vollständigkeit.
*feedback erwünscht*
Bitte Tipps lesen

DF6GL

Hallo,

es wäre sinnvoll, anstatt im Nebel zu stochern,  die DB (repariert/komprimiert, evtl. datenreduziert und gezippt) hier hochzuladen...

statt datenreduziert:

Neue leere DB erstellen und alle diesbezüglich relevanten Objekte dort importieren. (Tabelle, Formular, evtl. Abfrage und Code) und die hier hochladen.

AOT

 :) :) :) :) :) :)
und
:-X :-X :-X :-X :-X

Das ist jetzt etwas bis zimelich sehr peinlich, dass ich da nicht eher drauf gekommen bin. Die direkte Befüllung im Direktfenster hat jetzt eine Fehlermeldung produziert, die vorher nie gezeigt wurde. Das Feld Aenderung_Nutzer war schlicht zu klein und der Text hat nicht reingepasst. Nach Erhöhung der Feldgröße ging es.

Tausend Dank an alle, die sich so viel Mühe gegeben haben!

Gruß
Jürgen

el_gomero

Zitat
...
Die direkte Befüllung im Direktfenster hat jetzt eine Fehlermeldung produziert, die vorher nie gezeigt wurde.
...

Das hat man von dem OnError Resume Next ... so viel zum Thema "Ahnung und sehr gut" ...

Egal, schön, dass es läuft.
Gruß
Jürgen


Hilfe nach bestem Wissen, ohne Anspruch auf Richtigkeit und Vollständigkeit.
*feedback erwünscht*
Bitte Tipps lesen