2015-05-15 63 views
0

开放订单表中的第1条记录与Bookings表中的记录相匹配,但NO MATCH = True正在发生,因此它通过代码尝试插入新记录。对于文件中的多个记录而言,这是正确的,并且即使存在匹配,它也会尝试添加记录。如果我设置NO MATCH = False,那么它就是其他的。我将这些表从Access 97导入到了2010年正确工作的位置。任何帮助,将不胜感激。VBA代码适用于Access97,但不适用于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 

回答

1

此行抑制的信息,包括多种类型的错误信息......

DoCmd.SetWarnings False 

我不明白你为什么会想它在这个过程的。但是,在解决问题过程中至少,确保SetWarnings是...

'DoCmd.SetWarnings False 
DoCmd.SetWarnings True 

的一点是,你需要的信息,每一个可能的珍闻您可以在故障排除得到。不要压制任何它。

的代码,你期待什么,如果预订表不包括命名的PrimaryKey,或者如果该指数不包括cusnoPrdNo(按顺序)作为其第一个指数不会做2个键。

但这只是猜测。您需要使用SetWarnings进行测试,然后查看Access是否会提供有用的详细信息。

0

必须调暗你的变量或他们只是变种/对象:

Dim rstOpenOrd As DAO.Recordset 
Dim rstBookings As DAO.Recordset 
相关问题