有没有办法自动化MS Access的查找和替换功能?
我需要以不可逆的方式隐藏(名称和地址)所需的大量数据。这是一个无法看到信息的外部承包商(没有NDA等会这样做)。但除此之外,我希望数据看起来尽可能真实。
我现在的计划是对每个字符a-z进行一次find-n-replace,并用随机字符替换它。我知道机会是,我可能最终会将两个或更多字符映射到相同的值(这在我的书中并不坏)。
理想情况下,我想要某种类似于以下功能:
autoFindNReplace ("table name", "field name", _
"search char", random_alpha_generator(), _
DO_ALL_RECORDS)
然后我可以在每个表格上的每个字段上运行循环,我已经模糊了。
我的替代方法是:
答案 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语句完成它 - 但是,我有很多表和字段需要处理,这使它看起来更干净。