1

Access のサブフォームに問題があり、理解できないことがあります。コントロール(コンボ)を含むフォーム(frm)があり、フォームにはサブフォーム(subfrm)が含まれています。デバッグモードでは、combo_AfterUpdate と frm_AfterUpdate に 1 つずつ、2 つのブレークポイントを作成します。コンボのデータを変更すると、すべて問題ないようです。

ombo_AfterUpdate で停止 > (フォームを保存) > frm_AfterUpdate で停止

ここで、subfrm.Form.Recordset を変更するコードを自分のombo_AfterUpdate イベント ハンドラに追加します。

ombo_AfterUpdate で停止 > (フォームを保存) > ...

frm_AfterUpdate で止まらない!? 誰かが理由を知っていますか?

編集: ここで、combo_AfterUpdate で実行されるコード:

If Not IsNull(Me!childID) Then
    Dim childSubSource As QueryDef
    Set childSubSource = CurrentDb.QueryDefs("qry_parent_Detail_child_WithParam")
    childSubSource.Parameters("childID").Value = Me!childID
    Set frmChildSub.Form.Recordset = _
        childSubSource.OpenRecordset(dbOpenDynaset, dbSeeChanges)
End If

編集:興味深い..私が変更した場合

Set frmChildSub.Form.Recordset = _
    childSubSource.OpenRecordset(dbOpenDynaset, dbSeeChanges)

frmChildSub.Form.Recordsource= childSubSource.SQL

イベントは意図したとおりに機能しています。親フォームのダーティ プロパティを確認しましたが、ここに問題があるようです。.recordset を介してサブフォームに新しいオブジェクトを割り当てると、親フォームの変更が保存されるか失われます。とにかく、コンボボックスを変更しても、dirty は再び false になります。

ご挨拶

4

1 に答える 1

0

実際、それは私にとっては理にかなっています...

最初の例では:

Set frmChildSub.Form.Recordset = _
    childSubSource.OpenRecordset(dbOpenDynaset, dbSeeChanges)

これはまったく新しいレコードセットをフォームにロードしています。もちろんダーティ レコードは含まれないため、ダーティ プロパティは false を返すはずです。

2 番目の例では:

frmChildSub.Form.Recordsource= childSubSource.SQL

次回フォーム/データをロードするときに、データを取得する場所をフォームに伝えています。次の操作を行った場合:

frmChildSub.Form.Recordsource= childSubSource.SQL
frmChildSub.Form.Requery

次に、最初のインスタンスと同じ動作が予想されます.MS Accessに新しいレコードセットを再び強制的に取り込むためです.これも汚れません.

于 2012-05-15T21:12:51.227 に答える