2013-01-10 160 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

我建議刷新鏈接表,有時如果數據結構發生變化,更改不會傳播到前端,並且可能會出現類似問題。我希望這可以工作。