-1

データベース内のレコードに問題があるため、約 260,000 レコードのテンプレートがあり、各レコードには、レコードの期間と場所を特定するための 3 つの識別列があります。1 つは年、1 つは月、もう 1 つはレコードです。地域向け。次に、特定のアイテムを識別するための情報が TagName と Description です。私が抱えている問題は、誰かがこのデータベースにデータを入力したときに、同じデバイスに対して異なる説明を入力したことです。タグ名が同じであるため、これを知っています。データベースを調べて同じタグ名のアイテムを見つけ、記述の 1 つを使用して異なるものを置き換え、より均一なデータベースを作成するコードを記述できますか。また、一部のデバイスにはタグ名がないため、"" ケースは避けたいと考えています。

また、将来的には、データベースに列を追加して、より多くの情報を取得できるようにしました。タグ名と説明が同じであることがわかったら、古いレコードにデータを埋め戻す方法はありますか?データベースはクリーンアップされていますか?貴重な情報を事前にありがとうございます。

これは、その説明を持つ最初のレコードを探し、変数を使用してその説明を同じタグ名を持つ他のすべてのアイテムに割り当てることにより、レコードを変更するためにある種の VBA で行う必要があると思いますか? これを行うための正しいVBA構文がわかりません。埋め戻しプロセスにも同様の方法が使用されると思いますか?

4

1 に答える 1

0

あなたの質問はかなり広く多面的であるため、重要な部分に段階的に回答します。

私が抱えている問題は、誰かがこのデータベースにデータを入力したときに、同じデバイスに対して異なる説明を入力したことです。タグ名が同じであるため、これを知っています。

これらの不一致は、SQL コードを少し使用するだけで簡単に修正できますが、そもそもこれらの不一致が発生する可能性を回避することをお勧めします。

  1. TagName フィールドと TagDescription フィールドを持ち、主キーとして TagName を設定して、新しいテーブルを作成します。これを「タグ」と呼びましょう。両方のフィールドの Required 設定が True に設定され、Allow Zero Length が False に設定されていることを確認します。

  2. この新しいテーブルに、考えられるすべてのタグを入力します。これは、Access 用語で 1 回限りの「追加クエリ」(SQL の INSERT INTO ステートメント) で行うことができます。

  3. メイン テーブルからタグの説明列を削除します。

  4. リレーションシップ ビューに移動し、2 つのテーブル間に 1 対多のリレーションを追加して、メイン テーブルの TagName フィールドを Tags テーブルの TagName フィールドにリンクします。

  5. 必要に応じて、2 つのテーブルからデータを集計するクエリを作成します。

また、一部のデバイスにはタグ名がないため、"" ケースは避けたいと考えています。

Access では、空の文字列 ("") の概念は、真の空白または 'null' の概念とは異なります。そのため、すべての空の文字列 (存在する場合) を null に置き換えることをお勧めします -

UPDATE MyTable SET TagName = Null WHERE TagName = '';

次に、TagName フィールドの Allow Zero Length プロパティをテーブル デザイナーで False に設定できます。

また、将来に向けて、より多くの情報を取得できるように、データベースに列を追加しました

より多くのテーブルよりもより多くの列について考えてください。

レコードを変更するには、ある種の VBA でこれを行う必要があると思います

VBA、SQL、または Access クエリ デザイナー (バックグラウンドで SQL コードを作成する) のいずれかです。データを最速で処理できるという点では、SQL が最適ですが、純粋な VBA (特に DAO オブジェクト ライブラリを使用) の方が理解しやすく、従うのも簡単です。

于 2013-10-31T11:42:48.910 に答える