2016-09-23 209 views
-1

アクセス内で動作しますが、VBAで動作させることはできません。 どちらが間違いですか?vba sql文のエラー "演算子がありません"

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 
+0

'CreateプロシージャGetStuff(:tag VARCHAR(20))AS SELECT * FROM Stuff WHERE tag =:tag;' ... VBAコードでは、単にprocを呼び出してパラメータ値の値を渡しますか? – onedaywhen

答えて

2

フォーム変数は、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予約語そうvarSQLような何かにあなたのSQL変数名を変更しています。 (更新:予約語ではありません)

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 
+0

最初のフォーム変数にブラケットエラーがありました。ここに&[Forms]![MacroAttività!![Text511])& "')"&_同じエラーがありません。 –

+1

私の編集がうまくいかなければなりません。閉じた括弧をSQL文に戻しました。 – LiamH

+0

いいえ、アクションクエリーではありません。それは単にテキストボックスから基準を受け取り、結果をフォームに返すだけです。 レコードセットを開くにはどうすればよいですか? –

関連する問題