无法在与访问中请求的名称或序号对应的集合中找到项目

时间:2016-04-21 10:44:30

标签: vba ms-access access-vba

Private Sub SupplierID_AfterUpdate()
On Error GoTo errHandler

    Dim rs As ADODB.Recordset

    Dim cmd As ADODB.Command

    Set rs = New ADODB.Recordset



    ID = IIf(IsNull(DMax("ID", "PurchaseOrders")) = True, 1, DMax("ID", "PurchaseOrders") + 1)
    OrderDate = Date
    'saveFlag = False

    CurrentDb.Execute "DELETE * FROM tempOrders", dbFailOnError


    rs.Open "SELECT ([Products.PRCODE]), ([ProductsPriceList.SID]), ([Products.PRODUCT]), ([Products.SIZE]), ([Products.PACK]), ([ProductsPriceList.PRICE]) FROM Products INNER JOIN ProductsPriceList ON Products.PRCODE = ProductsPriceList.PRCODE  ", CurrentProject.Connection, adOpenStatic, adLockReadOnly

    While rs.EOF = False

        Set cmd = New ADODB.Command

        With cmd
            .ActiveConnection = CurrentProject.Connection
            .CommandType = adCmdText

                .Parameters.Append .CreateParameter("p1", adVarChar, adParamInput, 100, rs.Fields("PRCODE"))
                .Parameters.Append .CreateParameter("p2", adInteger, adParamInput, 10, rs.Fields("SID"))
                .Parameters.Append .CreateParameter("p3", adVarChar, adParamInput, 100, rs.Fields("PRODUCT"))
                .Parameters.Append .CreateParameter("p4", adVarChar, adParamInput, 100, rs.Fields("SIZE"))
                .Parameters.Append .CreateParameter("p5", adVarChar, adParamInput, 100, rs.Fields("PACK"))
                .Parameters.Append .CreateParameter("p6", adCurrency, adParamInput, 10, rs.Fields("PRICE"))

                strSQL = "INSERT INTO tempOrders(PRCODE, SID, PRODUCT,SIZE,PACK,PRICE) VALUES(p1, p2,P3,P4,P5, p6)"





            .CommandText = strSQL
            .Execute
        End With
        Set cmd = Nothing





        rs.MoveNext
    Wend
    rs.Close

    Set rs = Nothing

    PurchaseOrders_subform.Form.RecordSource = "SELECT * FROM tempOrders ORDER BY PRODUCT"

上面的代码给出了错误"在对应于所请求的名称或序号的集合中找不到项目"

非常感谢你的时间

1 个答案:

答案 0 :(得分:0)

在Select-SQL中,将表名和列名括在方括号中。 - 这是不正确的,我很惊讶查询不会立即返回错误。

这导致从查询创建的字段在记录集中被命名为Tablename.Columnname。因此,您需要通过这些名称引用字段

... rs.Fields("Products.PRCODE") ...

或者您更正了Select-SQL。这就是我的建议!

引用查询中字段的正确方法是将各个标识符括在方括号中。

SELECT [Products].[PRCODE], [ProductsPriceList].[SID], ... FROM Products