2012-05-15 2 views
2

Я новичок в 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 

ответ

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;" 

Выйдет все неправильно.

Try:

"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) И (tblNormalize.product = t1.product) И (tblNormalize.spec = t1.spec) И (tblNormalize.descr = t1.descr) SET Table1.Rate = tblNormalize.Rate; 'Вставить строку в SQL-представление окна дизайна запроса в MS Access и посмотреть, что он вам скажет. – Fionnuala

+0

Привет, Remou, большое спасибо за вашу помощь. Мои коды работают сейчас :) –

Смежные вопросы