0

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

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

所以基本上,我有 3 个可能的阶段:

  1. 第一次填写信息,空数据。该字段必须显示输入的字符。
  2. 以后,必须以某种方式隐藏代码以仅显示最后 4 个字符。它可以带有 * 或只是最后 4 个字符,但用户不能看到这些字符之前的内容。
  3. 代理编辑代码,然后必须在数据库中正确修改代码。字符必须显示。

我试图只显示最后 4 个字符,但是我的数据库被修改了……所以代码在数据库中被剪切了。

4

2 回答 2

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 的字段一起使用,它就像一个魅力。

于 2014-02-28T19:46:17.620 回答
0

我编写了以下函数来隐藏敏感数据。它的主要用途是阻止肩部冲浪。我不确定它是否能满足您的特定需求,但它简单、直接,并且可以帮助其他偶然发现这个问题的人。

'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
于 2013-09-23T16:34:25.457 回答