Help and Support

文書番号: 280730 - 最終更新日: 2007年12月7日 - リビジョン: 2.1

Access 2000 で、リンクされている SQL Server テーブルのレコードを更新すると、データの競合エラーが発生することがある

難易度 : 高。高度なコーディング能力、相互運用性、およびマルチユーザー環境の経験が必要です。

この資料は Microsoft Access データベース (.mdb) についてのみ記述したものです。

Microsoft Access 97 については、次の資料を参照してください。278696? (http://support.microsoft.com/kb/278696/ )
すべて展開する | すべて折りたたむ

現象

リンクされている SQL Server テーブルのレコードを更新しようとすると、以下のデータの競合エラーが表示されます。
このレコードは他のユーザーによって変更されています。[レコードの保存] を選択すると、他のユーザーによる変更を無視し、自分が行った変更を反映します。

[クリップボードにコピー] を選択すると、変更したデータはクリップボードにコピーされ、他のユーザーによる変更が反映されます。必要に応じて、クリップボードのデータを貼り付け、自分が変更したデータに戻すこともできます。
"レコードの保存"、"クリップボードにコピー"、または "他のユーザーによる変更を反映" のオプションが表示されます。

原因

Access で Null ビット フィールドが作成されています。これにより、型の不一致が発生します。

または

リンク テーブルで、浮動小数点データ型 (Real) として定義されたフィールドが使用されています。このデータ型を使用すると、"浮動小数点" 数値データを格納することができます。編集されたレコードを SQL Server に渡すときに、両方のエンジンで、これらのフィールドにあるデータは同じ値であると認識される場合は問題ありません。しかし、JET および SQL Server では "丸め" アルゴリズムが使用されているため、比較される実際の値が異なる場合があります。JET では、各フィールドの値を確認し、同時実行の問題が発生しているかどうかを確認する必要があります。そのため、JET で "Real" データ型フィールドにある数値と、SQL Server に格納されている値を比較するときに、その値が正確に一致しないと、レコードが変更されたと見なされ、データの競合エラーが発生します。

解決方法

bit データ型に関する問題を解決するには、以下のいずれかを実行します。
  • SQL Server を使用して、デザイン ビューでテーブルを開き、すべてのビット フィールドにデフォルトの値 0 (ゼロ) を割り当てます。

    : このオプションを使用した場合は、この変更を行う前に入力されたレコードを更新する必要があります。詳細については、次の項目を参照してください。

  • SQL Server を使用して、テーブルに対して Transact-SQL の UPDATE ステートメントを実行し、Null 値を持つすべてのビット フィールドの値を新しい値 0 または 1 に設定します。
  • SQL Server を使用して、ビット フィールドを int または tinyint などの別のデータ型に変更します。
  • SQL Server を使用して、テーブルにタイムスタンプ フィールドを追加します。
  • Access データベース (*.mdb) の代わりに、Microsoft Access プロジェクト (*.adp) を使用します。

浮動小数点データ型に関する問題を解決するには、以下のいずれかを実行します。
  • SQL テーブルにタイムスタンプ列を追加します (JET では、このフィールドのみを使用して、レコードが更新されたかどうかを確認します)。
  • SQL Server のデータ型を、浮動小数点データ型以外のデータ型 (Decimal など) に変更します。
  • 更新クエリを実行して、レコードを更新します。レコードセットの更新ではなく、更新クエリを実行する必要があります。
: SQL Server テーブルのデータ型を変更した場合は、Microsoft Access のテーブルのリンクを再設定する必要があります。

詳細

現象の再現手順

以下の手順は、SQL Server でテーブルを作成する方法を理解し、Enterprise Manager など、特定の SQL Server ツールに関する詳しい知識のあるユーザーを対象にしています。

また、ファイル、ユーザー、およびシステムのデータ ソース名 (DSN) を作成する方法、および DSN を使用して Microsoft Access 2000 データベースへのリンクをテーブルに設定する方法を理解していることを前提としています。
  1. Microsoft SQL Server 7.0 以降の場合は、以下のテーブル構造を持つ Pubs サンプル データベースに新しいテーブルを追加します。
    元に戻す全体を表示する
    列名 データ型 長さ NULL を許容
    fldID int 4 <オフ>
    fldBit bit 1 <オン>
    fldDescrip varchar 50 <オン>

  2. 以下の Column プロパティを fldID フィールドに設定します。
       IDENTITY : はい
    
       IDENTITY シード : 1
       IDENTITY インクリメント : 1
    					
  3. fldID フィールドを主キーに設定し、テーブルに Table1 という名前を付けて保存し、閉じます。
  4. 以下のレコードを Table1 テーブルに挿入します。
    元に戻す全体を表示する
    fldID fldBit fldDescrip
    1 1 Record #1
    2 <NULL> Record #2
    3 0 Record #3
    4 1 Record #4

  5. テーブルを閉じ、使用している SQL Server を指定するユーザー DSN を作成します。
  6. いずれかの Access 2000 データベースを開き、Pubs データベースの Table1 テーブルに、使用しているデータベースへのリンクを設定します。
  7. 説明の Record #1 を Record #0 に変更します。変更を保存することができます。
  8. 説明の Record #2 を Record #1 に変更しようとします。変更を保存しようとすると、エラーが発生します。

この資料は以下の製品について記述したものです。
  • Microsoft Access 2000 Standard Edition
キーワード:?
kberrmsg kbdatabase kbprb kbdesign KB280730
"Microsoft Knowledge Baseに含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。"

サポート技術情報の翻訳

 

Related Support Centers