2017-01-06 8 views
0

TLDR:質問の最後に長い質問をまとめました。Msアクセス、Excelを使用してテーブルを変更する。 IDのオートナンバーを扱う

私のビジネスは、リレーションシップ、PK、FKを適切に設定したMsアクセスDBを使用しています。私はときどきテーブルに大きな変更を加える必要があります(フィールドの追加、列操作の実行、Excelのみができると信じているもの:文字列操作(LEFT、RIGHTなど)、INDEX/MATCH(VLOOKUPS)、フィールドなど...

私は、Excelにテーブルをエクスポートして適用し、変更を行います。 完了したらテーブルをインポートしたいのですが、問題が発生します。 IDとオートナンバー機能がAccessにあります。テーブルをインポートするときに、以前のID列を使用できず、新しいID番号列を取得できるようにして、動作するオートナンバー型ID列を取得する必要があります。レコードの順序、レコードの数(レコードが削除された場合など)は、新しい自動生成IDは古いものと同じではなく、関係。 FKはもう正しいPKを指し示すことはありません。

この問題を処理する方法を検索しようとしましたが、他に誰もこの問題がないかのように何も見つかりませんでした。私はおそらくそうは思わないでしょう。

ショートバージョン:Access-ExcelのテーブルをエクスポートするとPK/FKの問題が発生する。インポート中、私は自分の最初のPK列をAutoNumberとして再利用することができないため、新しいID autonumber列を作成すると、IDが変更され、FK(関係)に問題が発生するという問題が発生します。同期中

+1

Excelにエクスポートするのではなく、Accessで直接更新を行う方法を見つける傾向があります。アクセスは、多くの文字列操作(LEFT、RIGHT MIDなど)とルックアップ(DLOOKUPをチェックアウトするか、探している列にテーブル結合を使用するだけでも可能です)。 VBA関数を書く必要があるかもしれませんが、Accessで何とか実現できないExcelでできることはたくさんあります。それをすべてAccessに保存すると、PK/FKの問題を取り除くはずです。 – Skippy

+0

あなたの洞察に感謝します。 Accessに留まって問題を解決することは事実です。しかし、今日の問題では、既存のテーブルに多くの列を追加する必要があります。本質的に、ウェブサイトに関連する属性(ユーザー名、ユーザー役割、およびその他のユーザー関連属性)を顧客に追加する必要があります。私は悲しいことにエレガントな解決策ではない私の顧客テーブルと1:1でリンクされた新しいテーブルを作ることができると思う –

答えて

1

新しいフィールドを追加すると、一時的な操作(またはまれな操作)が発生することが想定されます。既存のテーブルを先にすべての新しいデータ(ユーザー名、ロール、その他の属性)を一時テーブルにインポートします。次に、更新クエリを使用して、元のテーブルの新しい列に関連するデータを取得し、Excelでの照合に基づいて2つのテーブルを結合します。インポートする前に、新しいデータのすべての文字列操作をExcelで行うことができます。インポートする場合は、一時的な新しいデータテーブルに既存のテーブルのものと正確に一致する1つまたは2つの列を設定する必要があります。更新を実行します。

0

PK/FKの問題は、通常ではないオートナンバーID列を持つ一時テーブルへのExcelから必要なすべてのデータをインポートすることで解決した後、3つのクエリを実行します。IDは同じ

  • ある

    • 更新レコードを、ソースIDが先に存在しない場合は、宛先IDが元の宛先テーブルへ
    • 挿入行が存在しない場合、宛先テーブルの行を削除

    インポートされたIDデータが一意であると確信できる場合は、INSERT SQLを使用して自動番号フィールドにもIDを挿入できますが、これは良い解決策ではありません。 Excel IDには別のキー列を使用する方がよいでしょう。

    複数の列の問題として、属性値列を持つ1つの表の使用を検討できます。この場合、いくつの属性があるかは関係ありません。

    Excelは、ユーザーやプライマリデータアナライザから情報を収集するのに適していますが、主な計算ではAccessで行う方がよいでしょう。非常に強力なツールがあります。ほとんどの場合、フォームやVBAが実装されている可能性があります。Excelで行うことができます。

  • 関連する問題