我有一個用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調用會生成一個記錄,其關鍵字是現有記錄的關鍵字,位於表格中間的某個位置!如果我在後端執行「緊湊和修復數據庫」,問題就會消失。
由於此應用程序仍在開發中,我經常會將前端和後端文件複製到開發系統,做一些工作,然後將其複製回生產系統。這個問題在我做完這樣的拷貝後出現得最頻繁(是的,我確定數據庫在拷貝之前是關閉的)。
任何想法可能會發生什麼?
謝謝!
爲什麼當Access使用窗體和子窗體設置來處理它時,你會遇到所有這些麻煩? – Fionnuala