combo_beforeupdateでキャンセルした後の「現在の記録なし」
-
29-09-2019 - |
質問
私は自分のデータに循環(またはカスケードの)参照を防止しようとしていますが、それは時間の一部しか機能していないようです。
Access 2007では、次の表があります。
create table mfr (
mfr_id Autonumber,
mfr_nm Text(255),
mfr_is_alias_for_id Long Integer
)
Excelから多数のデータをインポートしています。MFR_NMはワークシートの列の1つです。データがExcelに入力される方法を制御できないので、代替のスペルを「本当に」同じものとしてキャプチャする方法が欲しいです。これまでのところ、とても良いことだと思います...)。
今、私はこのテーブルからフォームを構築しました。私はエイリアス用のコンボボックスを持っています - これまでのところ、とても良いです。ただし、このコードをBeforeUpDateイベントに追加すると、事態は「興味深い」(エラー処理が省略されている)になります。
If Not IsNull(cboMfrAlias) Then
If Not IsNull(DLookup("mfr_is_alias_for_id", "mfr", "mfr_id=" & cboMfrAlias)) Then
MsgBox """Alias for"" must not also be an alias.", vbExclamation
Cancel = True
End If
End If
これは、フォームがフォームビューの場合に期待されているとおりに機能しますが、データシートビューの場合、MSGBOXの後にアクセスに生成された「現在のレコードなし」エラーがすぐに続きます。 いいえ BeforeUpdate Sub内でのエラー処理に巻き込まれます。
このエラーをキャッチできますか?どこ?
解決
ドロップダウンリストは、エイリアスであるエントリをフィルタリングする必要があります。つまり、ユーザーが作成できない選択肢を表示しないでください。
MFR_IS_ALIAS_FOR_IDがnullではない選択をドロップダウンから排除するだけでこれを行うことになります。
これをさまざまな装いで実装しましたが、正常に機能しています。
他のヒント
私はあなたの質問の「現在の記録なし」エラーの部分に、ずっと前から取り組んでいます。 Googleをチェックして回答をチェックした後、私はこれを見つけました リンク これは役に立ちました。ただし、NZ()を使用して厄介なバイナリフィールドを集計クエリで変換する代わりに、使用しました troublesomefield: IIF([troublesomefield] IS NULL,NULL,[troublesomefield])
そして、これはエラーを追放するために働きました。だから私の解決策は、私が見つけた元の答えのわずかなバリエーションにすぎませんが、それはエラーを回避し、あなたが望むならnullを維持することができます...