0

私は自分の Access DB を修正してクリーンアップし、よりユーザーフレンドリーにしています。そのため、フォーム ラベルとコントロールの名前を変更して、Access が割り当てた一般的な名前ではなく、_lbl と _Ctrl を含めました。以前は、フォームを呼び出すボタンを使用してアクセスできる 3 つの個別のフォーム (ListingsForm、ListOffersForm、ListDetailsForm) がありました。フォームはプライマリ フォーム (ListingsForm) に直接関連していたので、2 つのフォームをサブフォームに変更しました。レコードを追加しようとすると、エラーが発生し続けます。

ListingsForm フォームには、プロパティ アドレス (Address_Ctrl) のコントロール フィールドがあります。このコントロールは、プロパティと呼ばれる別のテーブルにリンクされているコンボ ボックスを使用します。プロパティのアドレスがドロップダウン ボックスに表示されていない場合は、PropertyForm フォームを表示して新しいプロパティを入力していました。その後、新しいレコードで新しいリストを取得するために再クエリが実行されました。サブフォームを作成してコントロール名を変更した後、新しいプロパティ アドレスを追加しようとするとエラーが発生します。

実行時エラー '2473':

イベント プロパティの設定として入力した [On Not in List] 式により、次のエラーが発生しました。スタック スペースが不足しています。

'Add Address Form Script
Private Sub Address_Ctrl_NotInList(NewData As String, Response As Integer)
    DoCmd.OpenForm "PropertyForm", , , , acFormAdd
    Call Address_Ctrl_AfterUpdate
End Sub

'Requery Address List Script
Private Sub Address_Ctrl_AfterUpdate()
     Forms!MLSListForm.Dirty = False
     Me!Address_Ctrl.Requery

End Sub

Forms!MLSListForm.Dirty = False 行が強調表示されます。Me.Dirty = False を試しましたが、同じエラーが発生します。この行を完全に削除すると、「実行時エラー '2118': 再クエリ アクションを実行する前に、現在のフィールドを保存する必要があります」というメッセージが表示されます。

フォームをサブフォームとして持つことはユーザー インターフェイスに役立つため、3 つの別個のフォームを持つことには戻りたくありません。どんな助けでも大歓迎です。

4

2 に答える 2

0

通常、あなたのコメント Address_Ctrl_AfterUpdate() イベントハンドラ、

そして、このイベント ハンドラーを試すことができます。

Private Sub Address_Ctrl_NotInList(NewData As String, Response As Integer)
'
' add in Properties tables for NewData:
'   By calling SQL Server via ADO:
'   INSERT INTO Properties (City) (NewData)...
' Or
'
'
' Now NewData Exists, do this:
'....
' and then set new value and status:
'
   Response = acDataErrAdded
'
' here you can then modify new city:
'
  DoCmd.OpenForm "PropertyForm", , , "City='" & NewData & "'", acFormPropertySettings
'
End Sub

Access データベース VBA で、Response = acDataErrAdded を使用して再デバッグしました。

于 2013-10-29T22:55:17.147 に答える