2013-01-10 81 views
1

我有一个用Microsoft Access 2010编写的数据库应用程序。除此之外,它有两个相关表:“订单”(其中包含有关订单的一般信息的条目)和“FrameOrder”(其中包含有关特定订单类型的信息)。它们通过“OrderID”链接,这是“Orders”表的主键。MS Access VBA Addnew返回现有记录?

数据库分为前端和后端,所以这些都是链接表。

下面是这是我们用来变出一个全新的秩序与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

为什么当Access使用窗体和子窗体设置来处理它时,你会遇到所有这些麻烦? – Fionnuala

回答

0

我建议刷新链接表,有时如果数据结构发生变化,更改不会传播到前端,并且可能会出现类似问题。我希望这可以工作。