Иногда мне приходилось строить строку SQL в VBA и выполнять ее с помощью Docmd.RunSql()
. Я всегда построил эти строки, объединив переменные в строку, например:
Dim mysqlstring as String
mysqlstring = "INSERT INTO MyTable (Field1, Field2, Field3 ...) VALUES ("
mysqlstring = mysqlstring + Me.TextMyField1 + ", " 'parameter comments
mysqlstring = mysqlstring + Me.TextMyField2 + ", "
mysqlstring = mysqlstring + Me.TextMyField3 + ", "
...
mysqlstring = mysqlstring + ");"
Docmd.RunSql mysqlstring
У VBA, похоже, нет унарного оператора конкатенации (например, + =), и хотя это не выглядит идеальным, по крайней мере, я могу прокомментировать каждый из моих параметров и изменить их независимо. Это облегчает чтение и изменение, чем одна конкатенированная строка монстра. Но это все еще кажется ужасным способом построения строк SQL. У меня есть около 50 параметров на работе, поэтому 50 строк mysqlstring = mysqlstring +...
. Не мило.
Кстати, это исключает использование линейных продолжений для форматирования строки, так как существует ограничение на количество строк-продолжений, которые вы можете использовать на одной строке (подсказка: менее 50). Кроме того, VBA не позволяет помещать комментарий после продолжения строки, grr!
До недавнего времени я думал, что это единственный способ построить эти строки. Но в последнее время я видел другой шаблон, вводя параметры в строке, такие как этот вопрос (VB.NET), на который я отправил ответ, и задался вопросом, есть ли эквивалент Parameters.AddWithValue()
для VBA, или если это будет даже лучше, чем подход конкатенации строк. Поэтому я подумал, что это заслуживает собственного вопроса. Может быть, там что-то мне не хватает.
Может ли кто-либо из экспертов Access прояснить, каковы наилучшие методы построения строк SQL в Access/VBA.