2016-10-27 5 views
-1

Windows 7 Professionalを実行しています。私はMS AccessフロントエンドをMS Accessバックエンドに持っています。フロントエンドの開始時に開くフォームは、アプリケーションをクラッシュさせます。ここでMS Access 2010でGetCurrentUserName()がクラッシュする

は、コードは次のとおりです。

Private Sub Form_Open(Cancel As Integer) 
Dim strMyDir As String 
Dim intPos As Integer 
Dim rst As dao.Recordset 
Dim strSQL As String 
Dim rstWhatsNew As dao.Recordset 

DoCmd.ShowToolbar "Database", acToolbarNo 
DoCmd.ShowToolbar "Toolbox", acToolbarNo 
DoCmd.ShowToolbar "Form View", acToolbarNo 

If Application.GetOption("ShowWindowsInTaskbar") = -1 Then 
    Application.SetOption "ShowWindowsInTaskbar", 0 
End If 


If DLookup("Locked", "luLockOut") <> 0 Then 
    MsgBox "Database is being worked on. Please try back in a couple minutes.", vbInformation, " " 
    DoCmd.Quit 
Else 
    strSQL = "Select * From tblLastLogins Where UserName = '" & GetCurrentUserName() & "'" 

私はエラーをトレースしている場所です:GetCurrentUserName()

Set rst = CurrentDb.OpenRecordset(strSQL) 
     With rst 
      If Not .EOF Then 
       .Edit 
       strSQL = "Select WhatsNewID From tblWhatsNew Where DateAdded >= #" & !LastLoginDate & "#" 
       Set rstWhatsNew = CurrentDb.OpenRecordset(strSQL) 
        While Not rstWhatsNew.EOF 
         DoCmd.OpenForm "frmWhatsNew", , , , , acDialog, rstWhatsNew!WhatsNewID 
         rstWhatsNew.MoveNext 
        Wend 
        rstWhatsNew.Close 
       Set rstWhatsNew = Nothing 
      Else 
       .AddNew 
       !UserName = GetCurrentUserName() 
      End If 
      !LastLoginDate = Now() 
      !IsLoggedIn = -1 
      Me.txtLastLoginID = !LastLoginID 
      .Update 
      .Close 
     End With 
    Set rst = Nothing 
    DoCmd.OpenForm "frmPrivacyNote" 
    Debug.Print Me.txtLastLoginID 
End If 

GetCurrentUserName()が古くなっているので、もし私は、ユーザー名を追跡する必要があります、現在の構文は何ですか?

さらにフォローアップしてください。正当な理由で、GetCurrentUserName()のBingに関するデータが見つかりませんでした。それはMOD内の関数なので、なぜMODが呼び出されないのか、または機能が正しくないのかを理解する必要があります。

さらに調査したところ、このエラーの原因であるユーザーの1人が作成した別の機能を持つ参照済みMDBが見つかりました。

これは現在、MS Accessが正しく動作していない問題です。これはユーザーが作成したコードの問題です。

+0

ゲームは改造、多分あなたはアドオンを意味がありますか? – Andre

+0

いいえ、MODはMS AccessのMODULEの略です。これらは、フォームのVBAコードに直接関連付けられていないコードホルダです。 –

+0

ああ、これはあまり一般的ではない(私は思う)。それを分析したい場合は、質問にコードを追加してください(コメントには読みにくい)。それと一緒にAPI関数 'GetUserName()'の宣言がなければなりません。しかし、実際にはそれらをすべて削除し、答えに投稿された関数を使用することができます。API関数を使用する必要はなくなりました。 – Andre

答えて

0

下記のリンクは

あるCurrentUser()

は、あなたが見(および掲載)している必要がありますので、機能

CurrentUser()

+0

奇妙なことに、CurrentUser()は値 "Admin"を返しました。それは私の役割かもしれませんが、私のユーザー名ではありません。 –

+1

あなたは常にCurrentUser()によって返されるAccessのユーザ名を持っています。 '/ User xyz'でコマンドラインに指定されていなければ、常に' Admin'です。これは、Accessのユーザーレベルのセキュリティに使用されています。 – Andre

2

GetCurrentUserName()は、Accessで定義されていないであることを示唆していますそのコード。

あなたがWindowsユーザー名を探している場合は、この機能を使用します。

Public Function GetUserName() As String 
    ' GetUserName = Environ("USERNAME") 
    ' Environ("USERNAME") is easily spoofed, see comment by HansUp 
    GetUserName = CreateObject("WScript.Network").UserName 
End Function 

Source

+0

機能GetCurrentUserName()文字列として 薄暗いSTRNAME文字列として 薄暗いlngCharacters限り 薄暗いlngReturn限り 「STRNAME =スペース(255) lngCharacters = 255 lngReturn = GetUserName(STRNAME、lngCharacters - 1) lngReturn = 0の場合 GetCurrentUserName = "名前を取得できません。" エルス GetCurrentUserName = OnlyLetters(STRNAME) END IF エンド機能 –

0

アンドレは、洞察力のためにどうもありがとうございました!私は、このリンクを見つけた: http://www.codeproject.com/Articles/1422/Getting-User-Information-Using-WSH-and-VBScript

Dim objNet 
On Error Resume Next 

'In case we fail to create object then display our custom error 

Set objNet = CreateObject("WScript.NetWork") 
If Err.Number <> 0 Then     'If error occured then display notice 
    MsgBox "Don't be Shy." & vbCRLF &_ 
       "Do not press ""No"" If your browser warns you." 
    Document.Location = "UserInfo.html" 
             'Place the Name of the document. 
            'It will display again 
End If 

Dim strInfo 
strInfo = "User Name is  " & objNet.UserName & vbCrLf & _ 
      "Computer Name is " & objNet.ComputerName & vbCrLf & _ 
      "Domain Name is " & objNet.UserDomain 
MsgBox strInfo 

Set objNet = Nothing     'Destroy the Object to free the Memory 
関連する問題