考えられる問題:
1 同時編集
問題のレコードが、編集中のフォームで開かれている可能性があります。編集セッション中にプログラムでレコードを変更し、フォームを閉じようとすると (したがって、レコードを保存しようとすると)、Access はレコードが他のユーザーによって変更されたと表示します (もちろんそれはあなたですが、Access にはわかりません)。 )。
プログラムでレコードを変更する前に、フォームを保存します。
形式:
'This saves the form's current record
Me.Dirty = False
'Now, make changes to the record programmatically
2 主キーまたはタイムスタンプがありません
SQL-Server テーブルに主キーとタイムスタンプ列があることを確認してください。
タイムスタンプ列は、レコードが最後に選択されてから編集されたかどうかを Access が判断するのに役立ちます。タイムスタンプが利用できない場合、Access はすべてのフィールドを調べてこれを行います。タイムスタンプ列がない場合、null エントリではうまく機能しない可能性があります ( 3 Null ビットの問題を参照)。
タイムスタンプには、実際には時間ではなく、行のバージョン番号が格納されます。
タイムスタンプ列を追加した後、Access でテーブル リンクを更新することを忘れないでください。そうしないと、Access に表示されません。(注: Microsoft のアップサイジング ウィザードは、Access テーブルを SQL-Server テーブルに変換するときにタイムスタンプ列を作成します。)
3 ヌル ビットの問題
@AlbertD.Kallal によると、これはここで説明されているヌル ビットの問題である可能性があります: KB280730 (WayBackMachine の最後のスナップショット、元の記事は削除されました)。ビット フィールドを使用している場合は、デフォルト値を に設定し、0
以前に入力された NULL を に置き換えます0
。ブール値の考え方に最もよく一致するため、通常はBIT DEFAULT 0 NOT NULL
ブール値フィールドに を使用します。
KB 記事には、*.mdb の代わりに *.adp を使用するように記載されています。ただし、Microsoft は Access 2013 での Access Data Projects (ADP) のサポートを中止しました。