VBA代码适用于Access97但不适用于2010

时间:2015-05-15 14:20:06

标签: vba ms-access access-vba ms-access-2010

打开订单表中的第一条记录与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

2 个答案:

答案 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