Как автоматизировать встроенную функцию «найти и заменить» в MS-Access? - PullRequest
0 голосов
/ 31 августа 2011

Есть ли способ автоматизировать функцию поиска и замены для MS Access?

У меня много данных, которые мне нужно скрыть (имена и адреса) необратимым способом. Это идет к внешнему подрядчику, который не может видеть информацию (никакой NDA, и т. Д. Не сделают). Но в остальном я хочу, чтобы данные выглядели как можно более реальными.

Сейчас я планирую сделать find-n-replace для каждого символа a-z и заменить его случайным символом. Я понимаю, что, скорее всего, в конечном итоге я сопоставлю два или более символов одному и тому же значению (что неплохо в моих книгах).

В идеале я хотел бы иметь какую-то функцию, которая выглядит примерно так:

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

И тогда я могу запустить цикл для каждого поля каждой таблицы, которую я не знаю.

Мои альтернативные методы:

  • обходите каждый стол и затемняйте каждое поле по отдельности.
  • попробуйте придумать какой-нибудь SQL-оператор, который будет делать то же самое, что и мифический autoFindNReplace, который я описал выше.

Ответы [ 2 ]

1 голос
/ 01 сентября 2011

Вы можете просто написать быструю хэш-функцию в модуле VBA и вызвать ее из запроса SQL Update. Вот пример с таблицей «Таблица1» и полем «адрес». Код hashField был взят из здесь .

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
0 голосов
/ 02 сентября 2011

Вот мое решение:

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 с моим генератором случайных символов, один раз для альф и один раз для чисел.

Да, я мог бы сделать это с помощью нескольких операторов Update - однако у меня было много таблиц и полей для работы, и это сделало его более чистым.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...