• 締切済み

Access2000 別のレコードをテーブルに追加するには?

既存のAというテーブルに新しく別のところからインポートしてきたBというデータを追加したいのですが、「...46件のレコードで入力規則違反が発生したため、レコードを追加できませんでした。」とエラーメッセージが出ます。無視して実行すると、Bの一部のデータがAに追加されません。 IDが一部重複しているのですが、これが原因?でもAccess95では、Bのデータにすべて新しいIDがついて追加されましたよね?

みんなの回答

  • ARC
  • ベストアンサー率46% (643/1383)
回答No.3

ごめんなさいっ見落としておりましたっ。(またしても、です) えっと、まずは、追加クエリーをデータシートビューで表示してみてください。([表示]-[データシートビュー]) Case1 表示される内容が、追加を試みるデータなんで、この段階でレコード数が足りないのなら、追加クエリーに異常があることになります。 例えば、クエリーのプロパティで[固有の値]が「はい」になっているとか、クエリーがグループ化されているとか、他にもいろんな原因が考えられます。 Case2 データシートビューでは正常な件数で、追加する時にエラーが出てはじかれる時は、テーブルの入力規則に違反していたり、キー違反があったりする場合なので、そのあたりを詳しく調べてみます。 例えば、入力規則が ">=1"となっているフィールドに、NULLのデータを入れようとしても、弾かれてしまいます。 もしくは、[空文字列の許可]が「いいえ」になっているフィールドに、""(空文字列)のデータを入れようとしても弾かれます。(このような場合、更新クエリで、あらかじめ "" を NULL に置換しておきます。)

すると、全ての回答が全文表示されます。
  • selenity
  • ベストアンサー率41% (324/772)
回答No.2

根本的に、重複するIDを持つレコードは追加できません。 ですが、入力規則違反なので必ずしも、ID(キー)が重複しているとは限りません。 つまり、微妙にフィールドの型が異なっていて、そのために今回のようなエラーが 表示されている場合があります。 通常は、以下の手順を取ります。 1.既存のAテーブルをコピーします。(コピーしたテーブルをA'とします) 2.BからA'へコピーしてみます。 3.エラーがあれば、原因を突き止め、正しくA'へ追加できるようにB内の問題のある レコードを修正します。 4. 正常に追加できるようになるまで1~3を繰り返します。 5.AにB内のレコードを追加します。

Msakai
質問者

お礼

ご回答ありがとうございました。 追加クエリー以外のテーブルの追加は知りませんでした。

すると、全ての回答が全文表示されます。
  • ARC
  • ベストアンサー率46% (643/1383)
回答No.1

文字通り、レコードが、入力規則に違反しているため、追加できなかったのです。 ・インデックスが「あり、(重複なし)」に設定されているフィールド(主キーなど)がある。 この「重複無し」の部分が作用して、新しいレコードの追加を妨害した。 ・テーブルやフィールドに入力規則が設定されており、それに違反するレコードを追加しようとした。当然、そのようなレコードの追加は却下された。 のどちらかであると考えられます。 恐らく、IDが重複しているということですので、前者が原因でしょう。 解決策ですが、そのフィールドがどのように扱われているのかによって、難易度が異なります。 1:別に[ID]フィールドを「重複可」にしても問題が無い場合。  インデックスを重複可能に設定してから、追加します。 2:「B」の[ID]を変更しても構わない場合  2-1:「A」の[ID]がオートナンバー型なら   追加クエリーを使ってデータを追加します。このとき、[ID]フィールドは追加しないようにします。(IDは、データ追加時に自動で生成されます。)  2-2:「A」の[ID]がオートナンバー型ではないなら   [1] 追加を行う前に、選択クエリーを使って、IDが重複する部分を表示します。   [2] 必要に応じて、その部分を(重複しないように)書き換えます。   [3] 追加クエリーでデータを追加。 3:「B」の[ID]を変更すると、問題が生じる場合。  3-1:「A」の[ID]がオートナンバー型なら   補足ください。  3-2:「A」の[ID]がオートナンバー型ではないなら   [1] 「B」の[ID]を変更すると影響を受けるテーブルにリレーションシップを設定し、「連鎖更新」にチェックをつける。   [2] 追加を行う前に、選択クエリーを使って、IDが重複する部分を表示します。   [3] 必要に応じて、その部分を(重複しないように)書き換えます。   [4] 追加クエリーでデータを追加。 ちなみに、2-1の機能はAccess95にも存在しますが、それ以外については、95でも2000でも、同じ事をしなくてはなりません。 不明点があれば、どしどし補足してください。(返事が遅くなることは有るかもしれませんが…)

Msakai
質問者

補足

回答ありがとうございました。 お言葉に甘えて更に質問させて頂きます。 2:「B」の[ID]を変更しても構わないので追加クエリーでトライしました。 しかし、Bのデータのフィールドに空白があると(たとえばメールアドレスがわからない、住所が分からないなど)そのデータは追加されません。(Aのデータには空白はたくさんあります) 当てはまると思われるものにすべてデフォルトの文字をいれて解決しましたが、このようにしなくても良い方法はありますか?

すると、全ての回答が全文表示されます。

関連するQ&A