【问题标题】:vba sql statement error "missing operator"vba sql语句错误“缺少运算符”
【发布时间】:2016-09-23 20:30:45
【问题描述】:

我无法让它在 VBA 中工作,尽管它可以在 access 中工作。 哪个是错误?

Private Sub Command517_Click()
Dim SQL As String

    SQL = "SELECT Tags.Tag, MacroAttività.[Nome/Descrizione], MacroAttività.ID," & _
    " MacroAttività.Descrizione, MacroAttività.[Data inizio attività], " & _
    " MacroAttività.[Data fine prevista], MacroAttività.[Data fine effettiva], " & _
    " MacroAttività.Note,operatore.Nome, Tipologia.Tipologia " & _
    " FROM Tipologia INNER JOIN (operatore INNER JOIN (MacroAttività INNER JOIN Tags ON MacroAttività.ID = Tags.[ID macro attività]) " & _
    " ON operatore.ID = MacroAttività.Leader) ON Tipologia.ID = MacroAttività.Tipologia WHERE " & _
    "(((Tags.Tag) = [Forms]![MacroAttività]![Text511]) " & _
    " UNION ALL SELECT Tags.Tag, MacroAttività.[Nome/Descrizione], " & _
    " MacroAttività.Descrizione, MacroAttività.ID, " & _
    " MacroAttività.Leader, MacroAttività.[Data inizio attività], " & _
    " MacroAttività.[Data fine prevista], MacroAttività.[Data fine effettiva], " & _
    " MacroAttività.Note, MacroAttività.Tipologia " & _
    " FROM MacroAttività INNER JOIN Tags ON MacroAttività.ID = Tags.[ID macro attività] " & _
    " WHERE (((Tags.Tag)=[Forms]![MacroAttività]![Text513])); "
DoCmd.RunSQL SQL
End Sub

【问题讨论】:

  • 如何创建一个带有参数的过程,例如CREATE PROCEDURE GetStuff ( :tag VARCHAR(20) ) AS SELECT * FROM Stuff WHERE tag = :tag; ...那么在 VBA 代码中只需调用 proc 并为参数值传递一个值?

标签: sql vba ms-access


【解决方案1】:

必须从 SQL 语句外部读取表单变量,因此我的解决方案关闭 SQL 语句添加表单变量,然后重新打开 SQL 引用。我在表单变量周围添加了字符串限定符(单引号);假设它们是使用“文本”的字符串。

varSQL = "SELECT Tags.Tag, MacroAttività.[Nome/Descrizione], MacroAttività.ID," & _
" MacroAttività.Descrizione, MacroAttività.[Data inizio attività], " & _
" MacroAttività.[Data fine prevista], MacroAttività.[Data fine effettiva], " & _
" MacroAttività.Note,operatore.Nome, Tipologia.Tipologia " & _
" FROM Tipologia INNER JOIN (operatore INNER JOIN (MacroAttività INNER JOIN Tags ON MacroAttività.ID = Tags.[ID macro attività]) " & _
" ON operatore.ID = MacroAttività.Leader) ON Tipologia.ID = MacroAttività.Tipologia WHERE " & _
"(((Tags.Tag) ='" & [Forms]![MacroAttività]![Text511] & "')" & _
" UNION ALL SELECT Tags.Tag, MacroAttività.[Nome/Descrizione], " & _
" MacroAttività.Descrizione, MacroAttività.ID, " & _
" MacroAttività.Leader, MacroAttività.[Data inizio attività], " & _
" MacroAttività.[Data fine prevista], MacroAttività.[Data fine effettiva], " & _
" MacroAttività.Note, MacroAttività.Tipologia " & _
" FROM MacroAttività INNER JOIN Tags ON MacroAttività.ID = Tags.[ID macro attività] " & _
" WHERE (((Tags.Tag)='" & [Forms]![MacroAttività]![Text513] & "')); "

SQL 是保留字,因此请将 SQL 变量名称更改为 varSQL 之类的名称。 (更新:不是保留字)

currentdb.executedomcd.runSQL 据我所知仅适用于操作查询。您无法使用这些方法执行选择查询。尝试以下方法:

dim rs as recordset
dim varSQL as string

varSQL = "SELECT..."

set rs=currentdb.openrecordset(varSQL,dbOpenDynaset)

me.[text1] = rs.fieldname
'send recordset values to form

rs.close

【讨论】:

  • 它在第一个表单变量中给了我括号错误,我在这里添加了一个括号 & [Forms]![MacroAttività]![Text511]) & "')" & _ 然后它给出了同样的错误缺少运算符。
  • 我的编辑应该可以工作,我将右括号移回 SQL 语句中。
  • 不,这绝对不是一个动作查询。它只是从文本框中接收标准,并在表单上返回结果。我应该如何打开记录集?
  • 有什么吗?请帮忙
  • 我知道 select 不是一个动作查询。我的意思是你不能使用currentcb.executedocmd.runsql 并在你的声明中使用“SELECT”。我会编辑我的帖子。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-07-21
  • 1970-01-01
  • 1970-01-01
  • 2013-07-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多