Sql

Access / SQLでのレコードの問題の編集(書き込みの競合)



Editing Record Issues Access Sql



解決:

考えられる問題:

1同時編集



問題のレコードが編集中の形式で開かれていることが原因である可能性があります。編集セッション中にプログラムでレコードを変更してからフォームを閉じようとすると(したがって、レコードを保存しようとすると)、アクセスはレコードが他の誰かによって変更されたことを示します。

プログラムでレコードを変更する前に、フォームを保存してください。
フォーム:



'これにより、フォームの現在のレコードが保存されますMe.Dirty = False'次に、プログラムでレコードに変更を加えます。

2主キーまたはタイムスタンプがありません

SQL-Serverテーブルに主キーとタイムスタンプ列があることを確認してください。

タイムスタンプ列は、レコードが最後に選択されてから編集されたかどうかをAccessが判断するのに役立ちます。タイムスタンプが利用できない場合、Accessはすべてのフィールドを検査することによってこれを行います。タイムスタンプ列がない場合、これはnullエントリではうまく機能しない可能性があります(を参照) 3ヌルビットの問題 )。



タイムスタンプには、実際には時間ではなく行のバージョン番号が格納されます。

タイムスタンプ列を追加した後、Accessでテーブルリンクを更新することを忘れないでください。そうしないと、Accessはそれを認識しません。 (注:Microsoftのアップサイジングウィザードは、AccessテーブルをSQL-Serverテーブルに変換するときにタイムスタンプ列を作成します。)


3ヌルビットの問題

@ AlbertD.Kallalによると、これはここで説明されているnullビットの問題である可能性があります:KB280730。ビットフィールドを使用している場合は、デフォルト値を次のように設定します。0で、前に入力したNULLを次のように置き換えます。0.私は通常使用しますブール値の概念に最も近いため、ブール値フィールドのBIT DEFAULT 0 NOTNULL。

KBの記事には、*。mdbの代わりに* .adpを使用するように書かれています。ただし、MicrosoftはAccess2013でAccessData Projects(ADP)のサポートを終了しました。


元のポスターと同じように、この問題がありました。フォームを使用せずに直接編集する場合でも。問題はビットフィールドにあります。フィールドがNullの場合、レコードにアクセスするとNullが0に変換され、今回は2番目の変更である変更が行われます。したがって、2つの変更は競合します。私はオリヴィエの提案に従いました:

'テーブルに主キーと タイムスタンプ列 。 '

そしてそれは問題を解決しました。


MS SQL Sever 2000(およびそれ以前)にリンクした場合、MS Access 2003(およびそれ以前)でも同様の状況が発生しました。私の場合、問題はMS SQLServerデータベーステーブルのビットフィールドであることがわかりました。ビットフィールドではnull値を使用できません。 MS Access 2003を介してリンクされたテーブルにレコードを追加すると、ビットフィールドを特にTrueまたはFalseに設定しない限り、データベースウィンドウにエラーが返されます。修正するには、MS SQL Serverのデータテーブルを変更して、ビットフィールドがデフォルトで0値または1になるようにしました。変更すると、MSAccessを介してリンクテーブルにデータを追加/編集できるようになりました。