如何自动化MS-Access中内置的“查找和替换”功能?

时间:2011-08-31 19:37:38

标签: sql ms-access

有没有办法自动化MS Access的查找和替换功能?

我需要以不可逆的方式隐藏(名称和地址)所需的大量数据。这是一个无法看到信息的外部承包商(没有NDA等会这样做)。但除此之外,我希望数据看起来尽可能真实。

我现在的计划是对每个字符a-z进行一次find-n-replace,并用随机字符替换它。我知道机会是,我可能最终会将两个或更多字符映射到相同的值(这在我的书中并不坏)。

理想情况下,我想要某种类似于以下功能:

autoFindNReplace ("table name", "field name", _
                    "search char", random_alpha_generator(), _
                    DO_ALL_RECORDS)

然后我可以在每个表格上的每个字段上运行循环,我已经模糊了。

我的替代方法是:

  • 走遍每张桌子并单独模糊每个场地。
  • 尝试提出一些sql语句,它与我上面描述的神秘的autoFindNReplace相同。

2 个答案:

答案 0 :(得分:1)

您可以在VBA模块中编写快速哈希函数,并从SQL Update查询中调用它。这是表“Table1”和字段“地址”的示例。 hashField代码取自here

Sub MaskAddress()
    'Change 1234 to whatever key you'd like.
    DoCmd.RunSQL "UPDATE Table1 SET address = hashField(address, 1234)"
End Sub

Public Function hashField(strIn As String, lngKey As Long) as String
    Dim i As Integer
    Dim strchr As String

    For i = 1 To Len(strIn)
        strchr = strchr & CStr(Asc(Mid(strIn, i, 1)) Xor lngKey)
    Next i
    hashField = strchr
End Function

答案 1 :(得分:0)

这是我的解决方案:

Sub autoFindAndReplace(TableName As String, _
                    FieldName As String, _
                    Search As String, _
                    Replace As String)

Dim UpdateString As String

    UpdateString = ("update " & TableName & _
                        " set " & FieldName & _
                            " = replace (" & FieldName & ", " & _
                            """" & Search & """, """ & Replace & """)")

    CurrentDb.Execute (UpdateString)

End Sub

然后我用随机字符生成器循环使用autoFindAndReplace,一次用于alphas,一次用于数字。

是的,我可以使用多个Update语句完成它 - 但是,我有很多表和字段需要处理,这使它看起来更干净。