0

データベースに設計上の問題があるはずなので、これに間違って取り組んでいると確信していますが、今すぐ何かを試してみたいと思っています。

フォームには、さまざまな種類の土地のドロップダウンと 2 つのボタン (前へと次へ) を含むメインのサブフォームがあります。このサブフォームのデータ ソースは、Section22_PMLU というテーブルです。

このサブフォームにネストされているのは、PMLU_Code を使用して親サブフォームにリンクされた別のサブフォームです。このデータは、テーブル Section22_Data に更新されています。

ユーザーが親サブフォームのドロップダウンをクリックして土地を選択し、子サブフォームで詳細 (土地の特性) を選択すると、このデータがデータ テーブルに正しく表示されます。ユーザーがドロップダウンを再度クリックして (新しいレコードを作成せずに)、子レコードを追加しても、これはデータ テーブルに反映されます。

問題は PMLU テーブルにあります。最初に選択を行い、ネストされたサブフォームからデータを追加すると、このレコードは PMLU テーブルに記録/表示されます。ドロップダウン フィールドをクリックして [新しいレコードを追加] をクリックするか、Ctrl+ キーを押してドロップダウンから新しい項目を選択すると、テーブルに正しく記録/表示されます。ただし、最初に新しいレコードを作成せずに選択すると、このアイテムは以前に追加されたものにコピーされます。レコードを表示するために前に戻ろうとすると (前のボタン)、レコードが表示されません。ただし、データ テーブルにはまだあります。

この問題を修正するには、PMLU テーブルに直接アクセスして、データ テーブルで見つかった PMLU コードと一致する不足している PMLU コードを追加する必要があります。

次のクエリを実行すると、欠落している PMLU が取得されます。結果を使用して、欠落しているコードを PMLU テーブルに入力するにはどうすればよいですか?

SELECT Section22_2_Data.PMLU_Code, Section22_2_Data.PMLUType
FROM Section22_2_Data LEFT JOIN Section22_2_PMLU ON Section22_2_Data.[PMLU_Code] = Section22_2_PMLU.[PMLU_Code]
WHERE (((Section22_2_PMLU.PMLU_Code) Is Null))
4

1 に答える 1

0

次のコードを使用してテーブルを更新し、問題を修正しました

Private Sub btnRefresh_Click()

    Dim strSQL As String

    strSQL = "INSERT INTO Section22_2_PMLU ( PMLU_Code )
        SELECT DISTINCT Section22_2_Data.PMLU_Code
        FROM Section22_2_Data LEFT JOIN Section22_2_PMLU ON Section22_2_Data.[PMLU_Code] = Section22_2_PMLU.[PMLU_Code]
        WHERE (((Section22_2_PMLU.PMLU_Code) Is Null));"
    CurrentDb().Execute strSQL, dbFailOnError
    ' Next 3 only to ensure the append is commited to the table '
    ' before requerying '
    DoEvents
    DBEngine.Idle dbRefreshCache
    DoEvents

    Me.Requery

End Sub
于 2012-10-30T00:39:10.850 に答える