2017-09-01 55 views
0

我有下面的代碼,但它不工作。它給了我錯誤:編譯錯誤,一個函數或變量是預期的。VBA上的SQL:編譯錯誤,函數或變量是預期的

我想錯誤是在Database.Execute方法,但我沒有提供解決方案。

Sub ChavesMontante() 

Dim dbschaves As Database 

Dim rschaves As DAO.Recordset 

Dim tipodechave As String 

Dim SQLCMD As String 

Dim chave As String 

Set dbschaves = CurrentDb 

chave = "BED20777" 

SQLCMD = 

"(SELECT us.instalacao, ch.bloco, us.tipounidade " & _ 
"FROM (SELECT useccionadora, bloco " & _ 
"FROM sgdprd.redeprimaria rp " & _ 
"WHERE rp.useccionadora IS NOT NULL " & _ 
"CONNECT BY rp.nox = PRIOR rp.fontex AND rp.noy = PRIOR rp.fontey " & _ 
"START WITH rp.useccionadora = '" & chave & "') ch " & _ 
"INNER JOIN sgdprd.useccionadora us ON ch.useccionadora= us.instalacao) " 

Debug.Print SQLCMD 

Set rschaves = dbschaves.Execute(SQLCMD) 


End Sub 
+0

Excel的VBA模型中沒有名爲'Database'的對象。 – cyboashu

+0

我在訪問。對不起,我應該發佈。 –

+0

您是否嘗試過'SQLCMD =「(SELECT us.instalacao,ch.bloco,us.tipounidade &&'' ...? – yacc

回答

0

執行用於動作SQL語句(UPDATE,DELETE,INSERT),不設置Recordset對象。

請嘗試以下變化:

Dim dbschaves As DAO.Database 
... 
Set rschaves = dbschaves.OpenRecordset(SQLCMD) 

此外,刪除外括號包圍整個SQL語句。我從來沒有見過通過先前開始連接。查詢是否在Access中打開?

+0

我做到了。現在它給了我一個錯誤:語法錯誤,缺少運算符'rp.seccionadora IS NOT NULL CONNECT BY rp.nox = prior rp.fontex and rp.noy = prior rp.fontey START。任何猜測? –

+0

在訪問上不可能像CONNECT BY ... PRIOR一樣執行層次結構,這就是我使用VBA的原因。 –

+0

你很有趣......即使你使用VBA,查詢仍然會通過Access查詢引擎運行。 @CaioCésarSilvaGomes – Andre

相關問題