Я сначала запускаю инструкцию insert, а затем проверяю, произошла ли ошибка 3022, которая указывает, что строка уже существует. Итак, что-то вроде этого:
On Error Resume Next
CurrentDb.Execute "INSERT INTO Table1 (Fields) VALUES (Data)", dbFailOnError
If Err.Number = 3022 Then
Err.Clear
CurrentDb.Execute "UPDATE Table1 SET (Fields = Values) WHERE Column1 = 'SomeValue'", dbFailOnError
ElseIf Err.Number <> 0 Then
'Handle the error here
Err.Clear
End If
Edit1: Я хочу упомянуть, что то, что я разместил здесь, является очень распространенным решением, но вы должны знать, что планирование ошибок и их использование как часть нормального поток вашей программы обычно считается плохой идеей, особенно если есть другие способы достижения тех же результатов. Спасибо RolandTumble за это.
Ваша проблема в том, как передать print
в Enum.each
. Переменная print
уже связана с функцией. Когда вы делаете print.()
, вы вызываете эту функцию без аргументов и передаете результат в Enum.each
. Вместо этого вам нужно передать саму функцию print
в качестве аргумента Enum.each
. Итак:
Enum.__info__(:functions) |> Enum.each(print)