仅显示文本框中的最后一个字符

时间:2013-09-23 14:30:06

标签: ms-access access-vba ms-access-2002

我有一个Access 2002数据库/应用程序,我的客户可以在其中输入有关其客户端的多个信息,包括遵循某些规则的代码。

但是,当他们在输入后查看这些信息时,我需要隐藏此代码中的每个字符,除了最后4个字符。但是,如果需要修改代理,代理需要能够编辑此代码。

基本上,我有三个阶段可能:

  1. 第一次填写信息,空数据。该字段必须显示输入的字符。
  2. 稍后,必须以某种方式隐藏代码以仅显示最后4个字符。它可以是*或只是最后4个字符,但用户必须无法看到之前的内容。
  3. 代理编辑代码,然后必须在数据库中正确修改代码。必须显示字符。
  4. 我试图只显示最后4个字符,但是我的数据库被修改了...所以代码会在数据库中被删除。

2 个答案:

答案 0 :(得分:0)

我编写了以下函数来隐藏敏感数据。它的主要用途是阻止shoulder surfing。我不确定它是否能满足您的特殊需求,但它简单明了,可以帮助那些偶然发现这个问题的人。

'Use to hide data in sensitive fields (e.g., BirthDate, PhoneNum, SSN)
'Usage: Ctl OnEnter property: =ObscureInfo(False, Form.ActiveControl)
'       Ctl OnExit  property: =ObscureInfo(True, Form.ActiveControl)
'       Form Open   property: =ObscureInfo(True, [BirthDate], [HomePhone], [SSN])
Function ObscureInfo(HideIt As Boolean, ParamArray Ctls() As Variant)
Dim Ctl As Variant
    For Each Ctl In Ctls
        If HideIt Then
            If IsNull(Ctl.Value) Then
                Ctl.BackColor = vbWhite
            Else
                Ctl.BackColor = Ctl.ForeColor
            End If
        Else
            Ctl.BackColor = vbWhite
        End If
    Next Ctl
End Function

答案 1 :(得分:0)

哇 - 我很震惊,这个问题没有得到足够的回答。最好的答案是在表单中使用未绑定的文本框而不是绑定的文本框。首先,您需要使未绑定的文本框填充实际字段。您将在AfterUpdate事件中执行此操作。

Private Sub UnboundTextBox_AfterUpdate()
    [MyField] = Me.UnboundTextBox 
End Sub

然后,只要代理查看记录,您就需要设置OnCurrent事件以使用受保护的视图填充未绑定的文本框:

Private Sub Form_Current()
    Me.UnboundTextBox = String(Len([MyField])-4, "*") & Right([MyField], 4)
End Sub

但是,如果需要,您还希望让代理稍后编辑或查看完整代码。执行此操作的最佳方法是为未绑定的文本框设置OnEnter事件以提取整个字段值,以便代理可以查看和编辑它 - 实际上与OnUpdate事件相反。

Private Sub UnboundTextBox_Enter()
    Me.UnboundTextBox = Nz([Field1]) 'The Nz deals with Null errors
End Sub

我已经将它用于显示SSN的字段,它就像一个魅力。