Проблема: ошибка «3075» Синтаксическая ошибка (отсутствует оператор) доступ 2013 - PullRequest
0 голосов
/ 17 января 2019

Может кто-нибудь из вас подскажет, что не так с моими кодами:

Private Sub Command379_Click

Dim strsearch as String

Dim strText as String

strText = Me.TxtSearch.Value

strsearch = "Select * from qryInfo 
where ((Supplier Name LIKE ""*" & strText & "*"") 
OR (Type LIKE ""*" & strText & "*""))"


Me.RecordSource = strsearch

End Sub

Большое спасибо!

Ответы [ 3 ]

0 голосов
/ 17 января 2019

Следует учитывать следующее:

  • Если у вас есть имена полей с пробелом внутри, например Supplier Name, вам придется заключить их в квадратные скобки: [Supplier Name].
  • Скобки () на самом деле не нужны в вашем случае. Вы можете опустить их.
  • Вместо двух кавычек (""), чтобы добавить буквальную кавычку, вместо этого можно использовать одинарную кавычку ('), что делает ее более понятной для чтения.
  • Type - зарезервированное слово. Если возможно, не используйте его. Минимум можно заключить в квадратные скобки ([Type]).
  • Если ваша строка SQL действительно разделена на несколько строк в VBA, то вам придется явно обрабатывать ее, используя подчеркивания (_) и конкатенацию строк:

    strTest = "This is a string" & _
              " defined in several" & _
              " lines of code in VBA."
    

    В качестве альтернативы вы можете использовать это:

    strTest = "This is a string"
    strTest = strTest & " defined in several"
    strTest = strTest & " lines of code in VBA."
    

Итак, наконец, ваш (однострочный) SQL, содержащий VBA, будет выглядеть так:

strSearch = "Select * From qryInfo Where [Supplier Name] Like '*" & strText & "*' Or [Type] Like '*" & strText & "*'"

Важно тоже:

Имейте в виду, что ваш текущий подход, использующий конкатенацию строк, не избегает внедрения SQL, что является реальной проблемой безопасности!

Посмотрите здесь, как лучше справиться с этим (например, с помощью запросов параметров в VBA): Как использовать параметры в VBA в различных контекстах в Microsoft Access?

0 голосов
/ 18 января 2019

Наличие только подстановочных знаков - это то же самое, что отсутствие критериев ГДЕ Так что вам не нужно утверждение WHERE.

… ... сказав, что - я бы порекомендовал вам создать запрос, используя представление конструктора запросов, а затем, как только он вернет записи, которые вы считаете правильными, - затем использовать эту опцию, чтобы отобразить их в представлении SQL. Это даст вам синтаксис.

0 голосов
/ 17 января 2019

Если вы хотите сопоставить текст, который содержит двойные кавычки, пожалуйста, следуйте здесь:

Текст:

"abc"

текст в VBA:

"""" & "abc" & """" (4 double quotation marks are necessary)

Спасибо.

...