作成しているアプリケーションで、VBAコードを使用してフォームのチェックボックスの値を変更すると、書き込みの競合が発生します。フォーム上のオブジェクトの値をVBAが変更するイベントに次のコードを挿入してみました。
If Me.Dirty Then
Me.Dirty = False
End If
しかし、問題は解決しません。手動操作で何かを変更しようとする前に、レコードが保存されていないかのように。
この問題が発生しているフォームの完全なコードの例を次に示します。
空白の価格設定チェックボックスが変更された場合のコード:
Private Sub chkSupAllowBlankPrice_AfterUpdate()
If Me.Dirty Then
Me.Dirty = False
End If
If (chkSupAllowBlankPrice.Value = True) Then
chkSupRequirePrice.Value = False
End If
End Sub
[価格設定が必要]チェックボックスが変更された場合のコード:
Private Sub chkSupRequirePrice_AfterUpdate()
If Me.Dirty Then
Me.Dirty = False
End If
If (chkSupRequirePrice.Value = True) Then
chkSupAllowBlankPrice.Value = False
chkSupAllowBlankPrice.Visible = False
chkSupAllowBlankPrice.Enabled = False
chkSupAllowBlankPrice.Locked = True
lblSupAllowBlankPrice.Visible = False
Else
chkSupAllowBlankPrice.Visible = True
chkSupAllowBlankPrice.Enabled = True
chkSupAllowBlankPrice.Locked = False
lblSupAllowBlankPrice.Visible = True
End If
End Sub
それが役立つかどうかはわかりませんが、テーブルはSQL Server Expressデータベースに格納されているため、タグです。
-2009年5月29日編集@1201時間-
すべてのオブジェクト値の変更をコメントアウトして、表示、ロック、および有効化された変更のみを残してみましたが、書き込みの競合が発生し続けています。イベントプロシージャの最後にMe.Dirty=Falseを入れてみましたが、削除しようとしました。これまでのところ、VBAコードによって他の値が変更されることなく、[RequirePricing]または[AllowBlank Pricing]を変更すると、書き込みの競合が発生します。
-2009年5月29日編集@1318時間-
これらのチェックボックスが操作するフィールドは、レコードが作成されると変更を受け入れず、操作しようとすると常に書き込みの競合が発生します。今、私は完全に混乱していて、すべてを内臓してやり直すことを考えています。
-2009年6月1日編集@1209時間-
調査の結果、関連するテーブルに対してサーバーで定義されているチェック制約がいくつかあるようですが、これらを削除することはできません。何かが原因で、アイテムが変更されていない場合でも、リンクされたテーブルが常にダーティを報告します-そして、AccessとSQLはデフォルト値でそれと戦っていると思います。とにかくテーブルを削除せずにチェック制約を削除できないように見えるので、すべてのテーブルをワイプし、すべての情報を削除して、デザインを最初からやり直します。皆さんの助けに感謝します。この質問を閉じることができますか?問題をこの新しい質問に参照してください(レコードの更新は許可されていません-競合の書き込み)?
-2009年6月3日編集@1307時間-
他の質問からのクロスポスト、興味のあるすべての解決策を以下に説明します。ここまで到達するために私と頭をぶつけてくれたすべての人々に感謝します、私は本当に助けを感謝します。[はい/いいえ]チェックボックスとSQLServerwithAccessを使用すると奇妙な問題が発生することがわかりました。どうやら、AccessはNULLをNoとして解釈します-値を変更しますが、SQL ServerはビットフィールドでNULLをNoとして解釈しないため(変換でYes / Noが変換される)、値がない場合はWriteConflictエラーをスローします必須であり、NULLです。解決策は、値が必要になるようにテーブルを再設計し、以前のすべての[はい/いいえ]チェックボックスにデフォルト値が割り当てられるようにすることでした。これにより、不思議なWrite Conflictメッセージが解決され、作成されたレコードを変更できるようになりました。