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"
上面的代码给出了错误"在对应于所请求的名称或序号的集合中找不到项目"
非常感谢你的时间
答案 0 :(得分:0)
在Select-SQL中,将表名和列名括在方括号中。 - 这是不正确的,我很惊讶查询不会立即返回错误。
这导致从查询创建的字段在记录集中被命名为Tablename.Columnname。因此,您需要通过这些名称引用字段
... rs.Fields("Products.PRCODE") ...
或者您更正了Select-SQL。这就是我的建议!
引用查询中字段的正确方法是将各个标识符括在方括号中。
SELECT [Products].[PRCODE], [ProductsPriceList].[SID], ... FROM Products