Предполагая уникальный индекс в столбце Column1 , вы можете использовать выражение DCount
, чтобы определить, есть ли у вас нуль или одна строка с Column1 = 'SomeValue' . Затем INSERT
или UPDATE
на основе этого числа.
If DCount("*", "Table1", "Column1 = 'SomeValue'") = 0 Then
Debug.Print "do INSERT"
Else
Debug.Print "do UPDATE"
End If
Я предпочитаю этот подход для первой попытки INSERT
, захвата ошибки нарушения ключа 3022 и выполнения UPDATE
в ответ к ошибке. Однако я не могу претендовать на огромные выгоды от моего подхода. Если ваша таблица содержит поле автонабора, то отказ от неудачного INSERT
остановит вас на ненужном расходовании следующего значения автонабора. Я также могу избежать создания строки INSERT
, когда это не нужно. В Access Cookbook сказано, что строковая конкатенация - это умеренно дорогая операция в VBA, поэтому я ищу возможности избежать создания строк, если они на самом деле не нужны. Этот подход также позволит избежать блокировки для ненужного INSERT
.
Однако ни одна из этих причин не может быть очень привлекательной для вас. И, честно говоря, я думаю, что мое предпочтение в этом случае может быть о том, что «чувствует себя правильно» для меня. Я согласен с этим комментарием @ David-W-Fenton на предыдущий вопрос о переполнении стека : «Лучше писать свой SQL, чтобы вы не пытались добавьте уже существующие значения, т. е. предотвратите ошибку в первую очередь, а не в зависимости от механизма базы данных, чтобы спасти вас от вас. "
Это
if n not in memo:
memo[n] = func(n)
return memo[n]
не то же самое, что
return func(n) if n not in memo else memo[n]
Однострочник не изменяет содержание заметки. Если вы хотите сравнить яблоки с яблоками, попробуйте:
if n not in memo:
return func(n)
return memo[n]
Для оптимизации вашего однострочного и сохранения значения словаря, вы должны изменить однострочное на:
return memo[n] if n in memo else memo.setdefault(n, func(n))
Помимо изучения того, как работает memize, вы должны изучить использование functools lru_cache memoize, которое «написано на C и будет намного быстрее, чем все, что вы можете воспроизвести в Python».
meowgoesthedog, chepner & amp; FHTMitchell.