На мой взгляд, это зависит от вашей цели:
1. Наименьшие строки кода / код, который легче всего читать
2. Максимальная эффективность
На самом деле, Option2 имеет значение, только если строка становитсяочень долго или вы перестраиваете строку много-много раз.
Для краткого кода я бы выстроил строку, как вы делаете, а затем удалил биты, которые вы не делаетеneed ...
Dim person(10) as String
Dim strSQL, strWhereClause as String
person(0) = "John"
person(1) = "Steve"
i = -1
For i = 0 To UBound(menuNames)
strWhereClause &= " OR [name] = '" & person(i) & "'"
Next
IF (i >= 0) THEN
strWhereClause = RIGHT(strWhereClause, LEN(strWhereClause) - 3)
strSQL= "SELECT * FROM [customers] WHERE " & strWhereClause
END IF
Здесь есть две точки неэффективности ...
1. Конкатенация строк каждый раз, чтобы создать новую строку, требует много перераспределения памяти и копирования строки.
2. Обрезка последних трех символов подсчитывает всю длину строки, а затем копирует почти всю длину строки в новое выделенное место в памяти
ЕслиВы хотите немного большей эффективности, можно избежать неэффективности 2 сверху ...
Dim person(10) as String
Dim strSQL, strWhereClause as String
person(0) = "John"
person(1) = "Steve"
If (UBound(menuItems) >= 0) THEN
strWhereClause &= " [name] = '" & person(0) & "'"
If (UBound(menuItems) >= 1) THEN
For i = 1 To UBound(menuNames)
strWhereClause &= " OR [name] = '" & person(i) & "'"
Next
END IF
strSQL= "SELECT * FROM [customers] WHERE" & strWhereClause
END IF
(Это ставит проверку вне цикла, вы действительно не хотите проверять это каждое изменение).