打开订单表中的第一条记录与Bookings表中的记录匹配,但是NO MATCH = True正在发生,因此它会通过代码下降并尝试插入新记录。对于文件中的多个记录都是如此,即使存在匹配,它也会尝试添加记录。如果我设置NO MATCH = False,那么它会执行其他操作。我将这些表从Access 97导入到2010,它正常工作。任何帮助将不胜感激。
附加说明:在Debug中,如果我将鼠标悬停在.Seek“=”,TempCust,TempPart字段上,它会显示表中的第一条记录,并且该数据位于Bookings表中。不明白为什么它不匹配?
Sub Get_Current_Info()
DoCmd.SetWarnings False
Dim rstOpenOrd, rstBookings As Recordset
Dim TempCust, TempPart, TempQty, TempDollars As Variant
Set rstOpenOrd = CurrentDb.OpenRecordset("Open Orders", dbOpenTable)
Set rstBookings = CurrentDb.OpenRecordset("Bookings", dbOpenTable)
'Get the open orders
Do While Not rstOpenOrd.EOF
With rstOpenOrd
TempCust = !ODCSNO
TempPart = !ODITNO
TempQty = !ODQTOR
TempDollars = !OrdDollars
End With
With rstBookings
.Index = "PrimaryKey"
.Seek "=", TempCust, TempPart
If rstBookings.NoMatch = True Then
With rstBookings
.AddNew
!cusno = TempCust
!PrdNo = TempPart
!Qty_booked = TempQty
!Dol_booked = TempDollars
!Yest_qty_booked = 0
!Yest_dol_booked = 0
!Shipped_qty = 0
!Shipped_dol = 0
.Update
End With
Else
With rstBookings
.Edit
!Qty_booked = !Qty_booked + TempQty
!Dol_booked = !Dol_booked + TempDollars
.Update
End With
End If
End With
rstOpenOrd.MoveNext
Loop
End Sub
答案 0 :(得分:1)
此行会抑制信息,包括许多类型的错误信息......
DoCmd.SetWarnings False
我不明白为什么你会在这个过程中完全想要它。但是,至少在故障排除期间,请确保SetWarnings
已启用...
'DoCmd.SetWarnings False
DoCmd.SetWarnings True
关键是您需要在排除故障时获得所有可能的信息。不要压制任何一个。
如果预订表不包含名为 PrimaryKey 的索引,或者该索引不包含 cusno 和 PrdNo (按此顺序)作为前2个键。
但这只是猜测。您需要使用SetWarnings
进行测试,并查看Access是否为您提供了有用的详细信息。
答案 1 :(得分:0)
您必须调暗变量,或者它们只是Variant / Object:
Dim rstOpenOrd As DAO.Recordset
Dim rstBookings As DAO.Recordset