2016-09-23 6 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 PROCEDURE 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

첫 번째 양식 변수에 대괄호 오류가 발생했습니다. 여기에 대괄호 [& [양식]! [MacroAttività]! [Text511]) & '') & _를 입력하면 동일한 오류 누락자가 나타납니다. –

+1

제 편집이 효과가 있습니다. 닫기 괄호를 다시 SQL 문으로 옮겼습니다. – LiamH

+0

아니요, 확실히 액션 쿼리가 아닙니다. 그냥 텍스트 상자에서 기준을 받아서 양식에 결과를 돌려줍니다. 레코드 세트를 어떻게 열어야합니까? –

관련 문제