运行时错误“ 3061”:预期参数太少1

时间:2019-08-12 09:34:20

标签: access-vba append runtime-error

当我尝试使用VBA将记录插入到本地表时出现此错误。

我已经检查了数据类型,并在短文本数据类型中加上了引号,但这是行不通的。

    table_newid = "SELECT Cint(t1." & id_name(i) & "_new), " & Replace(select_column_str, local_table_name, "t2") & " FROM " & vbCrLf & _
                        "(SELECT CInt(DCount(""[" & id_name(i) & "]"", """ & qry_distinct_id_name & """, ""[" & id_name(i) & "]<="" & [" & id_name(i) & "])) as " & id_name(i) & "_new, * FROM " & qry_distinct_id_name & ") AS t1 " & vbCrLf & _
                        "LEFT JOIN " & local_table_name & "_ALL as t2 " & vbCrLf & _
                        "ON t1." & id_name(i) & " = t2." & id_name(i) & " " & vbCrLf & _
                        "WHERE t2.database = '" & database_name & "'"

    strQuery = "INSERT INTO " & local_table_name & "_temp (" & temp_field(i) & ", " & Replace(select_column_str, local_table_name & ".", "") & ") " & vbCrLf & table_newid

    Debug.Print strQuery
    DoCmd.SetWarnings False
    db.Execute strQuery
    DoCmd.SetWarnings True

从debug.print中,我得到了:

INSERT INTO TblLUMachineTypes_temp (MachTypeID_new, MachTypeID, MachTypeCode, MachTypeMod, MachTypeDesc, MachTypeDisc, NewCode, Approved, mttime, CreatedBy, CreatedTS, ModifiedBy, ModifiedTS) 
SELECT t1.MachTypeID_new, t2.MachTypeID, t2.MachTypeCode, t2.MachTypeMod, t2.MachTypeDesc, t2.MachTypeDisc, t2.NewCode, t2.Approved, t2.mttime, t2.CreatedBy, t2.CreatedTS, t2.ModifiedBy, t2.ModifiedTS FROM 
(SELECT CInt(DCount("[MachTypeID]", "qry_TblLUMachineTypes_id_distinct", "[MachTypeID]<=" & [MachTypeID])) as MachTypeID_new, * FROM qry_TblLUMachineTypes_id_distinct) AS t1 
LEFT JOIN TblLUMachineTypes_ALL as t2 
ON t1.MachTypeID = t2.MachTypeID 
WHERE t2.database = 'CPM-252-2'

当我复制此查询并手动执行它时,它可以正常工作,但不适用于VBA。任何想法?

谢谢。

2 个答案:

答案 0 :(得分:0)

从您的代码中删除所有&vbCrLf,它们不是必需的,并且我认为它们破坏了SQL语法。

答案 1 :(得分:0)

我发现了问题。我发现qry_distinct_id_name查询表中有一个Dlookup函数,该函数返回一个字符串值,该函数在执行查询手册时将起作用,但在用VBA运行它时将不起作用。因此,我重新编写了在dlookup()函数之前和之后加引号的代码。

相关问题