Я новичок в VBA. Прямо сейчас я хочу создать редактируемую таблицу кросс-таблицы, используя временную таблицу. У меня проблема, когда я хочу обновить таблицу нормализации на основе отредактированных данных. Когда я запускаю свои коды, я получаю эту ошибку, Ошибка 3061: Слишком мало параметров. Ожидается 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
Спасибо за ответ. Я снова запускаю код, и тот, который дает мне ошибку, является оператором обновления. Я не знаю, что не так с моим кодом. Это из-за внутреннего соединения? –
Наверное, нет. Почему бы не попробовать debug.print, как я предложил? Это даст вам «UPDATE tblNormalize INNER JOIN Table1 t1 ON (tblNormalize.newvalue = t1.newvalue) И (tblNormalize.product = t1.product) И (tblNormalize.spec = t1.spec) И (tblNormalize.descr = t1.descr) SET Table1.Rate = tblNormalize.Rate; 'Вставить строку в SQL-представление окна дизайна запроса в MS Access и посмотреть, что он вам скажет. – Fionnuala
Привет, Remou, большое спасибо за вашу помощь. Мои коды работают сейчас :) –