【发布时间】:2013-01-10 01:12:17
【问题描述】:
我有一个用 Microsoft Access 2010 编写的数据库应用程序。除此之外,它有两个相关的表:“Orders”,其中包含有关订单的一般信息的条目,以及“FrameOrder”,其中包含有关特定类型订单的信息.它们通过“OrderID”链接,这是“Orders”表的主键。
数据库分为前端和后端,所以这些是链接表。
以下是用于创建全新 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 调用生成了一个记录,其键是现有记录的键,位于表中间的某个位置!如果我在后端执行“压缩和修复数据库”,问题就会消失。
由于这个应用还在开发中,我会经常将前端和后端文件复制到开发系统中,做一些工作,然后将它们复制回生产系统。此问题在我完成此类复制后最常出现(是的,我确保在复制之前关闭数据库)。
有什么想法吗?
谢谢!
【问题讨论】:
-
当 Access 会为您处理表单和子表单设置时,您为什么还要麻烦?