Работа над сценарием в Microsoft VBA для извлечения массивной плоской базы данных и разделения ее примерно на 20 различных таблиц.Сценарий состоит в основном из открытия таблицы, проверки каждой строки в плоской базе данных, чтобы убедиться, что она не является дубликатом, а затем добавления необходимых полей.Повторите для каждой таблицы.
При первом запуске все шло хорошо, пока я не попытался обработать имя O'Malley
.Я думаю, что очевидно, что пошло не так.Быстрый поиск в Google обнаружил этот связанный пост StackOverflow .Я воспользовался их советом и добавил Replace(str, "'", "''")
к каждому полю, прежде чем вводить его в новые таблицы.Теперь я столкнулся с новой проблемой, и Google менее полезен.
Replace(null, "'", "''")
вызывает ошибку во время выполнения, и плоская база данных просто пронизана нулевыми значениями.Я могу добавить дополнительную строку выше каждый Replace()
вызов для проверки IsNull()
и, если это так, поместить null
в базу данных вместо Replace(str, "'", "''")
, хотя я бы предпочел решение, которое может вписаться водна строка, если это возможно.Есть ли какой-нибудь более элегантный способ решить эту дилемму, или мне понадобятся 216 If
операторов в моем коде?
EDIT -
Еще одна причина, по которой я ищу более элегантное решениемой дублирующий контрольный код.На данный момент у меня есть что-то вроде следующего:
'Check for duplicates
'Assume student is duplicate if it shares:
' (StudentName and School) or SSN
Set rstDuplicate = CurrentDb.OpenRecordset("select * from Student where (StudentName = '" & Replace(rstFrom("Student").Value, "'", "''") & "' AND School = '" & Replace(rstFrom("School").Value, "'", "''") & "') OR SSN = '" & Replace(rstFrom("Social").Value, "'", "''") & "'")
If rstDuplicate.RecordCount = 0 Then
'Duplicate was not found
rstTo.AddNew
' Add fields to the new table
rstTo.Update
End If
Поскольку вызовы Replace()
встроены в проверку дублирования, если бы вместо этого я использовал операторы If
для проверки null
, тогда япришлось бы либо сохранить результат в строку или обновить в плоской базе данных.Функция, которая возвращает Replace(str, "'", "''")
ИЛИ null
без необходимости в дополнительных переменных, была бы идеальной.