1

私は、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 呼び出しによって、既存のレコードのキーがテーブルの真ん中にあるレコードが生成されたように見えます。バックエンドで「データベースの圧縮と修復」を実行すると、問題は解決します。

このアプリはまだ開発中であるため、フロントエンドとバックエンドのファイルを開発システムにコピーし、いくつかの作業を行ってから、本番システムにコピーして戻すことがよくあります。この問題は、そのようなコピーを行った後に最も頻繁に発生します (はい、コピーする前にデータベースが閉じていることを確認します)。

何が起こっているのでしょうか?

ありがとう!

4

1 に答える 1

0

リンクされたテーブルを更新することをお勧めします。データ構造が変更された場合、変更がフロントエンドに反映されず、このような問題が発生する可能性があります。これがうまくいくことを願っています。

于 2013-02-22T15:51:11.033 に答える