私は、Microsoft Access 2010 で作成されたデータベース アプリを持っています。特に、2 つの関連テーブルがあります。注文に関する一般的な情報のエントリを含む "Orders" と、特定の種類の注文に関する情報を含む "FrameOrder" です。それらは、「Orders」テーブルの主キーである「OrderID」によってリンクされています。
データベースはフロント エンドとバック エンドに分割されているため、これらはリンク テーブルです。
これは、FrameOrder にリンクする新しい Order を作成するために使用されるコードです。
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
まず最初に、まったく新しい "Orders" エントリを作成します。次に、「FrameOrder」エントリを作成し、「OrderID」を先ほど作成した「Order」の主キーに設定します。
ここに問題があります。これを行うと、上記の Update 行でキー エラーがスローされることがあります。デバッガーでこれを見ると、frs.AddNew 呼び出しによって、既存のレコードのキーがテーブルの真ん中にあるレコードが生成されたように見えます。バックエンドで「データベースの圧縮と修復」を実行すると、問題は解決します。
このアプリはまだ開発中であるため、フロントエンドとバックエンドのファイルを開発システムにコピーし、いくつかの作業を行ってから、本番システムにコピーして戻すことがよくあります。この問題は、そのようなコピーを行った後に最も頻繁に発生します (はい、コピーする前にデータベースが閉じていることを確認します)。
何が起こっているのでしょうか?
ありがとう!