• 締切済み

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

  • アクセス2000でのレコード新規追加

    アクセス2000です。 社員名簿を毎年更新してIDを作成しています。 データはCSVでもらうので、エクセルで「固有ID」「フリガナ」「漢字氏名」「性別」「生年月日」フィールドを作成し、アクセスのテーブルにインポートします。 貰うデータは既存の社員、新入社員が混ざっています。 なので、新入社員だけを追加して、固有IDを割り付けたいと思います。 そこで、生年月日、性別、さらにフリガナの後ろ3文字をマッチング(結婚などによる改正に対応する)して、同じならば同一人物と判断し、追加しない、マッチングしなければ新規としてレコード追加、更にIDを自動的に入力したいのですが、どうすればよいでしょうか? 新規IDは半角でアルファベット1文字+9桁の数字にしたいです。 最大値+1でよいです。(例えば、現在使っているIDが[y900000001]ならば[y9000000002]を割り付ける。 名簿テーブルを作って、クエリを作成し、そのクエリに計算式フィールド「フリガナ2: Right([フリガナ],3)」を作成しフリガナの後ろ3文字を表示させる事はできましたが、今度はそのクエリから重複クエリで「フリガナ2」フィールドを重複項目に指定するとエラーが発生してしまいました。 「集計関数の一部として指定された式'Count(*)>And[性別]=[クエリ1].[性別]And[フリガナ2]=[クエリ].[フリガナ2]And[生年月日]='を含んでいないクエリを実行しようとしました。」 上記エラーです。 欲を言えば、生年月日、性別、フリガナ後ろ3文字がマッチしたデータは同一人物として判断し、名前に書き換えたいです。IDは変更しないです。 解決方法、宜しくお願いします。

  • insertを用いてテーブルにレコードを追加することができるのにもかか

    insertを用いてテーブルにレコードを追加することができるのにもかかわらず、load data infile を用いるとerror1366と表示されてしまいます。解決方法を教えてください。 Windows7 mysqlは最新版を使っています。 インストールしたそのままの状態だと、insertを用いて日本語を挿入しようとするとerror 1366と出てしまってましたが、my.iniを書き換えることによってinsert table1 values (1,'ああ');といった操作でエラーが出ることはなくなりました。 しかしcsvファイルをload data infileを用いてインポートしようとすると、またerror 1366が出てしまいました。 インポートしようとしたファイルには日本語が書かれています。 英字だけのファイルを同様にインポートすると、エラーは出ませんでした。 <table1> id int(15) name varchar(255) 1,a 2,b 3,asdf … はインポート可能 。また insert table1 values (1,'あ'); も正常に動作。 1,あ 2,い … をインポートするとエラー。 これができないと先に進めません・・・ ご教授お願いします。

  • Accessのテーブルのレコード追加について

    お世話になります。 テーブルのレコードをコピーして、別のテーブルに 「編集」の中の「追加貼り付け」でテーブルのレコードを 追加しました。 しかし、データ型をオートナンバーにしているフィールド があったのですが、追加したレコードの部分のナンバーが 連番になりません。 どの様にしたら、追加した分も連番になりますでしょうか。 お教え下さいます様、宜しくお願い致します。

  • アクセスでフォームでレコード編集、追加不可能

    エクセル2010でデータをテーブル作成をしました。アクセス2010でインポートして、インポートしたテーブルでフォームを作成。作成したフォーム使用して、データ変更できない。初心者用のテキストでは、フォーム・クエリから、レコード追加、既存レコードの編集が可能とありました。初心者なので、教科書通りでないと、何処が、どの様になり、フォームで追加、編集が不可能か分かりませんので教えて下さい。 ※OKWAVEより補足:「ひかりTVのサービスやISPぷらら」についての質問です。

  • ACCESS2002、レコードのインポートができません!

    初心者です、よろしくお願いします。 ■ 仕様環境 WinXP Access2002 アクセス2002で顧客管理システムを作ってます。 アクセスAのテーブルにアクセスBのテーブルをインポートする時、 レコードだけインポートできないのでしょうか? どうしても違うテーブルが作られてしまいます。 例えば・・ アクセスAに「住所」という項目があり、そこには既にレコードが 何件か入っているのですが、そこにアクセスBの「住所」のレコードを追加したいのですが、 うまくいきません。そういう機能はついていないのでしょうか? また、アクセスBの情報をエクセルファイルに変えて「次のテーブルに保存する」で インポートしたのですが、最後の「完了」ボタンを押すと「エラーが発生し、 インポートできませんでした」という表示がでてインポートできません。 同じように電話番号や名前、メールアドレス等もアクセスAに追加したいのですが、 一つ解決しないと先に進まない気がするのでとりあえず住所だけにしぼってみました。 データを”追加”するような感じでしたいのです! 誰かお知恵を貸してください!

  • 別のACCESSデータベースのテーブルのレコードを追加したいのです

    別のACCESSデータベースのテーブルのレコードを追加したいのです 同じ内容のデータベースが二つあります データベース1とデータベース2を其々別の人がデータを入力しています データベース1にデータベース2のテーブルで T_データT_データ明細の二つのレコードを追加したいのですがどの様にすればよいでしょうか ご指導をお願いいたします。

  • ACCESSの既存テーブルに、EXCELデータをレコードとして追加する事は可能ですか?

    ACCESSの既存テーブルに、EXCELのデータをレコードとして追加する方法はありますか? 又は方法を説明しているサイト等ありましたら教えて下さい。 EXCELのデータは、シートの1行目に各項目名、2行目以降に各データが順次入力されている状態です。 尚、EXCELの項目名と、ACCESSのフィールド名は一致していない状態です。 例えば、 EXCELの項目名:「予約ID」、「予約名」、「予約日」 ACCESSのフィールド名:「rsv_id」、「rsv_name」、「rsv_date」 のような感じです。 ACCESSのフィールド「rsv_id」には、EXCELの「予約ID」項目のデータを入れなければいけません。 こういうことは出来るのでしょうか? ※マクロは使わないようにしたいです。 いったんACCESS上で、EXCELのデータを元に新規テーブルを作成してから、 その新規テーブルからデータを抽出して、既存テーブルにレコード追加するような、SQLを書けばできるでしょうか?

  • MySQLで別テーブルを参照し、レコードを消したい

    お世話になります。MySQL4のデータベース上に2つのテーブルがあるのですが、 片方のテーブル(a)にあるフィールド(b_id)の値を参照し、もう片方のテーブル(b)のレコードを消していきたいのです。 具体的には以下のようなテーブル(a)とテーブル(b)があります。 TBL: a =========================== id    b_id    category =========================== 0     1       3 --------------------------- 1     2       1 --------------------------- 2     3       2 --------------------------- 3     4       2 --------------------------- TBL: b =========================== id    name    price =========================== 0    goodsA   1,000 --------------------------- 1    goodsB   500 --------------------------- 2    goodsC   250 --------------------------- 3    goodsD   2,500 --------------------------- 4    goodsE    1,800 --------------------------- やりたいことは、テーブル(a)の「category」フィールドが「2」以外であれば、 そのレコードの「b_id」にある数値を「id」にもつ、テーブル(b)のレコードを消していきたいのです。 上記の例だと、テーブル(a)のid「0」と「1」がcategoryに「2」以外を持っています。 この2つのレコードのb_idは「1」と「2」ですので、テーブル(b)のid「1」と「2」を消したいと思っています。 SQLについて知識がなく、困っています。どなたかご存知の方がいらっしゃいましたら、お知恵をお貸しください。 よろしくお願いします。

  • ACCESS テーブルを見比べて、一致しないレコードを追加したいです

    ACCESSで、以下のようにデータを追加をしたいです。 別々のテーブルで、データの一致しないものだけ追加したいです。 どのようにすればよいのでしょうか? Aテーブル、Bテーブル共に入力項目は全て同じです。 よろしくお願いします。  Aテーブル      Bテーブル    名前 個人データ  名前 個人データ   ・鈴木 ***     ・近藤 ***    ・近藤 ***     ・伊藤 ***   ・渡辺 ***     ・鈴木 *** 求める答え   ・鈴木 ***     ・近藤 ***    ・渡辺 ***   ・伊藤 *** たぶん、不一致クエリでBテーブルの伊藤さんだけ取り出して、Aテーブルに追加するという方法がやりやすいのでしょうか? よろしくお願いします。

  • Microsoft Accessでどうしても上手くいきません。

    (1)テーブル作成クエリ クエリA で テーブルB を作ります。 (2)テーブルB にフィールドを一つ追加して、変更を保存 (3)テーブルB のレコードを削除 (4)クエリA を 追加クエリ に変更 で追加クエリAを実行すると、入力規則違反でレコードの追加ができません。 追加するフィールドは、オートナンバー型です。 以前は同様の作業で成功したんですけど・・・ すみません助けてください

専門家に質問してみよう