【500pt以上】Accessのオートナンバーを復活させる方法の質問です。Access2007、Vistaです。


Access で管理していた顧客リストを更新する際、作業の利便性からExcelにエクスポートして更新してしまい、インポートした後、IDの再オートナンバー化ができません。IDには飛びがあり、ふり直すと番号が変わってしまいます。IDを元に他システムと紐付ているため、他システムにも影響が出ます。データは6000件程度です。

1番良いのはオートナンバーの復活方法がわかることです。
それが難しいようでしたら、元のAccessのDBは残っていますので、Excelの更新データをそこにオートナンバーを生かしたまま反映させる方法も考えています。更新で行った作業は、担当者の役職や住所の変更に加え、データの削除、フィールドの削除も含まれます。クエリで見た目だけ整えるより、テーブルを作成したいです。
それも不可能であれば、他システムの書き換えも考えています。他システムもAccessです。そちらは300件程度です。新しく振ったオートナンバーと紐付されている旧IDを、うまく書き換えることができれば解決です。

解決した場合、500pt以上お支払します。(解決しなかった場合は数十ポイント)

回答の条件
  • 1人2回まで
  • 登録:2009/07/01 11:33:16
  • 終了:2009/07/01 22:50:13

ベストアンサー

id:ken3memo No.4

ken3memo回答回数246ベストアンサー獲得回数772009/07/01 14:23:13

ポイント100pt

Accessのオートナンバーを復活 で すが

コメント欄の HALSPECIAL さんの方法そのままですが、

下記の方法でできると思います(が、リレーション関係なのかなぁ妨害してるのは?)

Excelのシートをインポートして、

データの型をオートナンバーにすると怒られ、設定できない。

ので、

新しくワクだけ作成して(※構造をコピー後)、

新しいテーブルの型をオートナンバーに変える。

※データが1件も入っていないので、変更可能です。

その後、追加クエリーでデータを追加するだけでOKだと思いますが。。。


実際の操作の動画:

http://www.youtube.com/watch?v=bZvREu20ejU

<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" width="320" height="205" id="flvplayer" align="middle"> <param name="allowScriptAccess" value="sameDomain" /> <param name="movie" value="http://g.hatena.ne.jp/tools/flvplayer.swf" /> <param name="quality" value="high" /> <param name="bgcolor" value="#ffffff" /> <param name="FlashVars" value="moviePath=http://www.youtube.com/watch?v=bZvREu20ejU" /> <embed src="http://g.hatena.ne.jp/tools/flvplayer.swf" FlashVars="moviePath=http://www.youtube.com/watch?v=bZvREu20ejU" quality="high" bgcolor="#ffffff" width="320" height="205" name="flvplayer" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" /> </object>


※HALSPECIAL さんの方法を試しただけなので、

 もしうまくいってもポイントはいりません。

何か、とんでもない勘違いをしていたら 笑って許してくださいね。

日記にも動画のリンクつけました。

http://d.hatena.ne.jp/ken3memo/20090701/1246425411

みて笑ってください・・・(でもなんか、勘違いしたような気がしてきた・・・)


-------

id:lavieboehme

ありがとうございます。試してみます。(コメント欄参照)

できました! You Tubeとっても参考になりました。

バージョンが違うので途中から操作を間違えたのか上書きされてしまい、わざわざ2003のPCまで行ってやってみました。

ありがとうございます。

2009/07/01 15:24:28

その他の回答(3件)

id:hijk05 No.1

hijk05回答回数1307ベストアンサー獲得回数232009/07/01 11:40:51

ポイント4pt

(1)EXCELのデータにオートナンバーの番号があるのなら

   Accessのオートナンバーの属性を数値型にへんこうして、そのままインポートして

   インポートが終わってから、数値型からオートナンバー型に変更する

id:lavieboehme

前提条件として書き忘れていましたが、インポートデータのデータ型をオートフィルタにしようとすると「テーブルに一度データを入力すると、データを入力していないフィールドの場合でも、フィールドのデータ型をオートナンバー型に変更することはできません」というエラーが出るのです。

Excelからインポートしたデータのデータ型をオートナンバーに変更することは不可能なようです。上記やり方でそれが回避できるということでしょうか?難しい気がしますが……(コメント欄もご活用ください)

2009/07/01 11:48:35
id:HALSPECIAL No.2

HALSPECIAL回答回数407ベストアンサー獲得回数862009/07/01 11:52:07

ポイント100pt

1.オートナンバー型になっているテーブルのデータを全件削除


2.リボンの[外部データ]-[EXCEL]インポート

  により、[レコードのコピーを次のテーブルに追加する]を実行します。


以上で駄目でしょうか?

id:lavieboehme

試し中です(コメント欄参照)

2009/07/01 14:31:37
id:b-wind No.3

b-wind回答回数3344ベストアンサー獲得回数4402009/07/01 12:46:28

ポイント5pt

結構泥臭い作業になりそうだね。


案1)

1.Excel データにオートナンバーの欠番部分のレコードを生成カラムの内容や、別カラム生成などで判別できるようにしておく。

2.Excel データをオートナンバー列順にソートしておく

3.元テーブルにオートナンバー以外のデータをインポート。理屈上はこれでもともとと同じオートナンバーが降られるはず。

4.1で作っておいたダミーデータを削除


案2)

1.オートナンバーであった列を数値型の別カラムとして追加する形でインポート(これでオートナンバーと元オートナンバーの対応表が出来ることになる)

2.他システムの旧IDを1で作った新カラムの情報を元に新オートナンバーに更新する


こんなとこ?

Access のオートナンバー自体には詳しくないから、もっといい手段もありそうだけど。

id:lavieboehme

案1

6000件データがある中でIDは18000番まで来ており、欠落部分生成は現実的ではないというのが事実です。

案2

は質問文にもある方法ですね。

その2の方法がわかれば良いのですが。他部署なので、300件程度とは言え手動でお願いするのは難しいです。

なお相手先Accessも別のオートナンバーをIDとしているらしく、Excelにエクスポートしての作業はできません。

対応表さえあれば、クエリでなんとかなるでしょうか?

2009/07/01 12:59:24
id:ken3memo No.4

ken3memo回答回数246ベストアンサー獲得回数772009/07/01 14:23:13ここでベストアンサー

ポイント100pt

Accessのオートナンバーを復活 で すが

コメント欄の HALSPECIAL さんの方法そのままですが、

下記の方法でできると思います(が、リレーション関係なのかなぁ妨害してるのは?)

Excelのシートをインポートして、

データの型をオートナンバーにすると怒られ、設定できない。

ので、

新しくワクだけ作成して(※構造をコピー後)、

新しいテーブルの型をオートナンバーに変える。

※データが1件も入っていないので、変更可能です。

その後、追加クエリーでデータを追加するだけでOKだと思いますが。。。


実際の操作の動画:

http://www.youtube.com/watch?v=bZvREu20ejU

<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" width="320" height="205" id="flvplayer" align="middle"> <param name="allowScriptAccess" value="sameDomain" /> <param name="movie" value="http://g.hatena.ne.jp/tools/flvplayer.swf" /> <param name="quality" value="high" /> <param name="bgcolor" value="#ffffff" /> <param name="FlashVars" value="moviePath=http://www.youtube.com/watch?v=bZvREu20ejU" /> <embed src="http://g.hatena.ne.jp/tools/flvplayer.swf" FlashVars="moviePath=http://www.youtube.com/watch?v=bZvREu20ejU" quality="high" bgcolor="#ffffff" width="320" height="205" name="flvplayer" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" /> </object>


※HALSPECIAL さんの方法を試しただけなので、

 もしうまくいってもポイントはいりません。

何か、とんでもない勘違いをしていたら 笑って許してくださいね。

日記にも動画のリンクつけました。

http://d.hatena.ne.jp/ken3memo/20090701/1246425411

みて笑ってください・・・(でもなんか、勘違いしたような気がしてきた・・・)


-------

id:lavieboehme

ありがとうございます。試してみます。(コメント欄参照)

できました! You Tubeとっても参考になりました。

バージョンが違うので途中から操作を間違えたのか上書きされてしまい、わざわざ2003のPCまで行ってやってみました。

ありがとうございます。

2009/07/01 15:24:28
  • id:HALSPECIAL
    HALSPECIAL 2009/07/01 11:55:45
    リレーションシップが設定されている場合は、
    リレーションシップを削除してから作業してください。
    作業後にまた設定しなおせばよいかと思います。
  • id:HALSPECIAL
    HALSPECIAL 2009/07/01 12:08:40
    (オートナンバー型には変えられないので)
    「オートナンバー型になっているテーブル」にインポートします。
  • id:lavieboehme
    リレーションシップありで試していましたが、できませんでした。
    ご指摘の通り削除して試してみます。
  • id:lavieboehme
    すべてのデータをテーブルに追加できませんでした。
    キー違反のため、0件のレコードのデータが失われ、
    1件のレコードが削除されました。
    *データが失われたときは、貼り付けまたはインポートしたデータが、
    対象となるテーブルのフィールドのデータ型または"FieldSize/
    フィールドサイズ"プロパティと一致していません。
    *レコードが削除されたときは、対象となるテーブルにすでに存在する
    主キー値が貼り付けたレコードに含まれているか、テーブル間に
    設定されているリレーションシップの参照整合性に違反しています。
    継続しますか?

    というエラーがでますが、その要因が複数考えられるため、現在それを修正しつつトライ中です。
  • id:HALSPECIAL
    HALSPECIAL 2009/07/01 13:06:59
    >「設定されているリレーションシップの参照整合性に違反しています。」
    との事から、まずはリレーションシップで、当該テーブルに紐づいている設定を消します。

    >「参照整合性に違反」
    との事から、エクセルのシートに重複しているレコードが存在します。
    エクセルのリボンの「重複の削除」により重複行を削除するか、
    エクセルのリボンの「フィルタ」(詳細設定)で「重複するレコードは無視する」をチェックして、
    一意なデータを表示させ、表示中のデータをコピペして、あたらしいブックやシートに保存して、
    それをアクセルにインポートさせるようにします。

    >「"FieldSize/フィールドサイズ"プロパティと一致していません。」
    との事から、テーブルの該当フィールドの長さを拡張します。
  • id:lavieboehme
    了解です。
    他にも、別シートでExcelの書式設定等をする必要があるようです。
    (文字→数字 等)
    しばらく試してみます。アドバイス感謝しております。ありがとうございます。
  • id:b-wind
    >6000件データがある中でIDは18000番まで来ており、欠落部分生成は現実的ではないというのが事実です。
    ちょっとしたVBSでも使える人がいたらさしたる苦労でもないけどね。

    >その2の方法がわかれば良いのですが。他部署なので、300件程度とは言え手動でお願いするのは難しいです。
    方法はその対応票を使用したクエリを1回実行するだけ。

    どちらにせよまともに Access 使える人を探さないとしんどいか。
  • id:lavieboehme
    対応法を使用したクエリの実行方法がわかれば、この質問に適した回答となります。

    HALSPECIAL様、結論から言うと、同様のメッセージに阻まれできませんでした。
    関係のないフィールドは削除し、レコードも削除、元データの形式も整えましたが…
    今は両方「0件」となっているため、参照整合性にも違反していないし、プロパティとも一致しているのだと思います。

    現在考え方を変えて不一致クエリ→追加クエリのコンボでそれをできないかなぁと考えております。

    http://www.kotaete-net.net/Default.aspx?pgid=14&qid=400627686420

    色々試してみます。
  • id:lavieboehme
    ↑すみません。。。勘違いでした。
    なんとエラーテーブルが作成されていました。
    エラー部分を削除して入れてみます。
    もうしばらくお待ちを…
  • id:lavieboehme
    で、で、できました!
    社内が興奮で包まれております。というのは大げさですが、大変助かりました。
    ポイントは自宅にて配分します。夜までお待ちください。
    HALSPECIALさん、Ken3memoさんありがとうございました!
  • id:lavieboehme
    ありがとうございました。
    ポイントが100ptまでしかつけられなかったので、別途送ります。
    よろしくお願いします。

この質問への反応(ブックマークコメント)

トラックバック

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません