2014-12-18 2 views
0

У меня есть следующий код. Я использую форму в MS Access 2010 для ввода новых строк в таблицу Nlog. Когда я пытаюсь запустить код, он дает мне ошибку Run-Time «3061»: слишком мало параметров. Ожидаемый 1.Ошибка выполнения 3061 VBA с использованием команды Insert

Не могу найти ошибку!

Private Sub Command128_Click() 
    'add data to table 
    CurrentDb.Execute "INSERT INTO NLog(IDKEY, Company, CoName, State, City, AmtpdTotal, DateRec, Notified, DateNotice, AcctID, TaxType, Period, NoticeReason, Resolution, TaxDue, Intdue, PenDue, Dateres, Amtpdint, amtpdpen, amtpdtax, Assigned, subAssgn, Resolved) " & _ 
     " VALUES(" & Me.TxtIDKEY & ",'" & Me.Company & "','" & Me.CoName & "','" & _ 
     Me.State & "','" & Me.City & "','" & Me.TxtAmtpdTotal & "','" & _ 
     Me.DateRec & "','" & Me.Notified & "','" & _ 
     Me.DateNotice & "','" & Me.AcctID & "','" & Me.TaxType & "','" & Me.Period & "','" & _ 
     Me.NoticeReason & "','" & Me.Resolution & "','" & Me.TaxDue & "','" & Me.IntDue & "','" & Me.PenDue & "','" & _ 
     Me.DateRes & "','" & Me.AmtPdInt & "','" & Me.AmtpdPen & "','" & Me.AmtpdTax & "','" & _ 
     Me.Assigned & "','" & Me.txtsubass & "','" & Me.Resolved & "')", dbFailOnError 
MsgBox ("Entry Added") 

ответ

2

Используйте строковую переменную для хранения инструкции INSERT. Это позволяет вам указать строку, чтобы вы могли проверить фактический оператор, созданный вашим кодом. И вы можете Execute строку.

Dim strInsert As String 
strInsert = "INSERT INTO NLog(IDKEY, Company, CoName, State, City, AmtpdTotal, DateRec, Notified, DateNotice, AcctID, TaxType, Period, NoticeReason, Resolution, TaxDue, Intdue, PenDue, Dateres, Amtpdint, amtpdpen, amtpdtax, Assigned, subAssgn, Resolved) " & _ 
    " VALUES(" & Me.TxtIDKEY & ",'" & Me.Company & "','" & Me.CoName & "','" & _ 
    Me.State & "','" & Me.City & "','" & Me.TxtAmtpdTotal & "','" & _ 
    Me.DateRec & "','" & Me.Notified & "','" & _ 
    Me.DateNotice & "','" & Me.AcctID & "','" & Me.TaxType & "','" & Me.Period & "','" & _ 
    Me.NoticeReason & "','" & Me.Resolution & "','" & Me.TaxDue & "','" & Me.IntDue & "','" & Me.PenDue & "','" & _ 
    Me.DateRes & "','" & Me.AmtPdInt & "','" & Me.AmtpdPen & "','" & Me.AmtpdTax & "','" & _ 
    Me.Assigned & "','" & Me.txtsubass & "','" & Me.Resolved & "')" 
Debug.Print strInsert 
CurrentDb.Execute strInsert, dbFailOnError 

Вы можете просмотреть завершенное заявление (на выходе из Debug.Print) в открывшемся окне. Ctrl + g доставит вас в окно Immediate.

Если ошибка не очевидна, вы можете скопировать текст инструкции, создать новый запрос в конструкторе запросов, переключить его на SQL-представление и вставить скопированный оператор. Когда вы пытаетесь запустить этот запрос у конструктора, Access отобразит диалоговое окно параметров, в котором вам будет предложено указать значение для параметра. Обратите внимание, что диалог также включает «имя» параметра. Часто причиной этой проблемы является имя поля с ошибкой --- поскольку Access не может найти поле под этим именем, предполагается, что это должен быть параметр.

В качестве альтернативы, вы можете использовать VBA код, чтобы показать вам имена каких-либо параметров в запросе:

Dim db As DAO.Database 
Dim qdf As DAO.QueryDef 
Dim prm As DAO.Parameter 
Set db = CurrentDb 
Set qdf = db.CreateQueryDef(vbNullString, strInsert) 
For Each prm In qdf.Parameters 
    Debug.Print prm.Name 
Next 
Смежные вопросы