MS Access VBA Addnew返回现有记录?

时间:2013-01-10 01:12:17

标签: ms-access access-vba dao

我有一个用Microsoft Access 2010编写的数据库应用程序。除此之外,它还有两个相关的表:“订单”,其中包含有关订单的一般信息的条目,“FrameOrder”,其中包含有关特定订单类型的信息。它们由“OrderID”链接,“OrderID”是“订单”表的主键。

数据库分为前端和后端,因此这些是链接表。

以下代码用于构建一个全新的Order,其中FrameOrder链接回来:

Private Sub FramingQuoteButton_Click()
    ' Create a new Order of type Framing, then create a Framing Order linking back to it
    Dim rs As DAO.Recordset
    Dim frs As DAO.Recordset
    Dim ThisOrderID As Long
    Dim ThisFrameOrderID As Long

    Set rs = CurrentDb.OpenRecordset("Orders")
    rs.AddNew
    rs!OrderType = "FRAME"
    rs!CustomerID = DefaultCustomerID()
    rs.Update
    rs.Bookmark = rs.LastModified
    ThisOrderID = rs!OrderID
    rs.Close

    Set frs = CurrentDb.OpenRecordset("FrameOrder")
    frs.AddNew
    frs!OrderID = ThisOrderID
    frs.Update <<<< This is where the problem shows up
    frs.Bookmark = frs.LastModified
    ThisFrameOrderID = frs!FrameOrderID
    frs.Close

    DoCmd.OpenForm "FrameOrder", , , "OrderID = " & ThisOrderID, , , "NEW"

    Set rs = Nothing
    Set frs = Nothing
End Sub 

首先,我创建一个全新的“订单”条目。然后我创建一个“FrameOrder”条目并将“OrderID”设置为我刚刚制作的“Order”的主键。

问题在于:有时当我这样做时,上面显示的更新行会引发一个关键错误。当我在调试器中查看它时,似乎frs.AddNew调用生成了一个记录,其键是现有记录的记录,位于表格中间的某个位置!如果我在后端执行“压缩和修复数据库”,问题就会消失。

由于这个应用程序仍在开发中,我经常将前端和后端文件复制到开发系统,做一些工作,然后将它们复制回生产系统。在我完成这样的复制之后,这个问题最常出现(是的,我确保在复制之前数据库已关闭)。

任何想法可能会发生什么?

谢谢!

1 个答案:

答案 0 :(得分:0)

我建议刷新链接表,有时如果数据结构发生变化,更改不会传播到前端,可能会发生这样的问题。我希望这有效。