2012-05-15 93 views
2

我是VBA的新手。現在,我想使用臨時表創建可編輯的交叉表。當我想根據編輯的數據更新標準化表時遇到問題。當我運行我的代碼時,出現此錯誤,錯誤3061:太少Parameters.Expected 2可以有人幫我檢查我的代碼?在此先感謝MS.Access VBA - 錯誤3061:太少參數。期望2

Public Sub Normalize() 
Dim rs As DAO.Recordset 
On Error GoTo EH 

'delete existing data from temp table 
CurrentDb.Execute "DELETE * FROM tblNormalize;", dbFailOnError + dbSeeChanges 

'get a recordset of the column headers 
Set rs = CurrentDb.OpenRecordset("SELECT DISTINCT newvalue FROM Table1;") 
Debug.Print 
rs.MoveFirst 
Do While rs.EOF = False 

' "un" crosstab the data from crosstab table into Normalize table 
CurrentDb.Execute "INSERT INTO tblNormalize (product, spec, descr,newvalue, Rate)" & Chr(10) & _ 
"SELECT product,spec,descr, " & rs.Fields("newvalue") & ", [" & rs.Fields("newvalue") & "]" & Chr(10) & _ 
"FROM tblCrosstab;", dbFailOnError + dbSeeChanges 

Debug.Print rs.Fields("newvalue") 
rs.MoveNext 
Loop 
rs.Close 
Set rs = Nothing 

'update the original normalized dataset 

CurrentDb.Execute "UPDATE tblNormalize INNER JOIN Table1 t1 ON (tblNormalize.newvalue = t1.newvalue) " & _ 
" AND (tblNormalize.product = t1.product) AND (tblNormalize.spec = t1.spec) " & _ 
" AND (tblNormalize.descr = t1.descr)" & _ 
" SET Table1.Rate = tblNormalize.Rate;", dbFailOnError + dbSeeChanges 


Exit Sub 

EH: 
MsgBox "Error " & Err.Number & ": " & Err.Description, vbOKOnly, "Error" 

End Sub 

回答

1

您正在爲自己創造一個傷害的世界。除此之外,這:

"INSERT INTO tblNormalize (product, spec, descr,newvalue, Rate)" & Chr(10) & _ 
"SELECT product,spec,descr, " & rs.Fields("newvalue") & ", [" & rs.Fields("newvalue") & "]" & Chr(10) & _ 
"FROM tblCrosstab;" 

會出來一切都錯了。

嘗試:

"INSERT INTO tblNormalize (product, spec, descr,newvalue, Rate)" & _ 
" SELECT product,spec,descr, " & rs.Fields("newvalue") & ", [" _ 
& rs.Fields("newvalue") & "] FROM tblCrosstab;" 

此外,使用Debug.Print寫入字符串到立即窗口(Ctrl + G),並檢查它是否工作在查詢設計窗口。該錯誤通常是由於拼寫錯誤的字段(列)造成的。

+0

感謝您的回覆。我再次運行代碼,給我錯誤的是更新語句。我不知道我的代碼有什麼問題。是因爲內連嗎? –

+0

可能不是。爲什麼不按我的建議嘗試debug.print?它會給你'UPDATE tblNormalize INNER JOIN Table1 t1 ON(tblNormalize.newvalue = t1.newvalue)AND(tblNormalize.product = t1.product)AND(tblNormalize.spec = t1.spec)AND(tblNormalize.descr = t1.descr )SET Table1.Rate = tblNormalize.Rate;'將行粘貼到MS Access中查詢設計窗口的SQL視圖中,並查看它告訴你什麼。 – Fionnuala

+0

嗨,Remou,非常感謝您的幫助。我的代碼現在正在工作:) –