Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


141 / 2272 ツリー ←次へ | 前へ→

【12718】値に変化があったフィールド名を取得するには? weather 15/3/6(金) 11:58 質問[未読]
【12719】Re:値に変化があったフィールド名を取得す... かるびの 15/3/7(土) 2:58 回答[未読]
【12872】Re:値に変化があったフィールド名を取得す... weather 15/7/5(日) 14:50 お礼[未読]

【12718】値に変化があったフィールド名を取得する...
質問  weather  - 15/3/6(金) 11:58 -

引用なし
パスワード
   構造もデータ内容も全く同じ新旧テーブルがあります。

■旧テーブル
顧客ID|会社名|担当者名|電話番号

■新テーブル
顧客ID|会社名|担当者名|電話番号

業務終了後、新テーブルのいくつかのレコードで、
担当者や電話番号が変わりました。

両テーブルを比較し、以下のようなリスト(テーブル)を得たいです。
-------------------
変更があったのは下記フィールドです
-------------------
顧客ID|変更フィールド1|変更フィールド2|変更フィールド3
001|会社名
004|担当者名
007|担当者名|電話番号
010|会社名|担当者名|電話番号

どのような関数を使い、どのような構造にすべきか
まったく見当がつきません。

なにとぞ、ご教示くださいませ。

【12719】Re:値に変化があったフィールド名を取得...
回答  かるびの  - 15/3/7(土) 2:58 -

引用なし
パスワード
    まず、第一印象なんですが、全然アクセス的な発想方法ではないなという印象です。

>両テーブルを比較し、以下のようなリスト(テーブル)を得たいです。
 アクセスでの発想方法として、両テーブルを比較した結果を
テーブルに残すようなことは通常は行いません。
 両テーブルを比較しさえすれば得られるものを、
一々テーブルに格納していたのでは、
テーブル容量が無駄に増えるばかりだからです。
 その都度、両テーブルを比較するクエリを作れば、十分であるというのが
アクセスの発想です。

 
>どのような関数を使い、どのような構造にすべきか
>まったく見当がつきません。
 エクセルでは関数を使って結果を表示することが多いようですが、
関数を使うというのは、アクセス的な発想方法ではないです。
 アクセスでは、関数の種類がエクセルに比べてずっと少ないと思います。
 アクセスでは、どのようなクエリを組もうかという発想をします。


>顧客ID|変更フィールド1|変更フィールド2|変更フィールド3
>   001|会社名             
>   004|担当者名            
>   007|担当者名    |電話番号    
>   010|会社名     |担当者名    |電話番号
 ××1、××2、××3というフィールド名にした場合、
それは、大抵、テーブルの作り方を間違えています。
 このような場合は、変更のあったフィールド名を横に伸ばしていくのではなく、
ひたすら縦に伸ばしていくのが通常です。例えば、次のようにします。
顧客ID|変更フィールド
   001|会社名             
   004|担当者名            
   007|担当者名
   007|電話番号    
   010|会社名
   010|担当者名
   010|電話番号
 テーブルは、コンピュータにとって使いやすいことというのが何より優先すべきことであり、
コンピュータにとって使いやすいテーブルというのは、えてして人間にとっては見づらいもの
となります。


 以上がアクセスでの基本的な発想方法です。


 次に、
>顧客ID|変更フィールド1|変更フィールド2|変更フィールド3
>   001|会社名             
>   004|担当者名            
>   007|担当者名    |電話番号    
>   010|会社名     |担当者名    |電話番号
というクエリないしテーブルですが、
こういうクエリやテーブルを作れないことはないですが、かなりややこしいことになるので、
やめた方がいいと思います。

 これに対し、新旧両テーブルにおける各フィールドの値が異なる場合には「×」が、
同じである場合は「○」が入る
というクエリであれば、それほど苦労なく、クエリを作れると思います。
顧客ID 会社名 担当者名 電話番号
   001  ×    ○    ○
   004  ○    ×    ○
   007  ○    ×     ×
   010  ○    ○    ○

 このクエリをSQLで示せば、

SELECT 旧テーブル.顧客ID
   ,IIF(旧テーブル.会社名 = 新テーブル.会社名,"○","×") AS 会社名 
   ,IIF(旧テーブル.担当者名 = 新テーブル.担当者名,"○","×") AS 担当者名
   ,IIF(旧テーブル.電話番号 = 新テーブル.電話番号,"○","×") AS 電話番号
FROM 旧テーブル
  INNER JOIN 新テーブル
  ON 旧テーブル.顧客ID = 新テーブル.顧客ID
WHERE Not (旧テーブル.会社名 = 新テーブル.会社名
      AND 旧テーブル.担当者名 = 新テーブル.担当者名
      AND 旧テーブル.電話番号 = 新テーブル.電話番号
      )

です。

【12872】Re:値に変化があったフィールド名を取得...
お礼  weather  - 15/7/5(日) 14:50 -

引用なし
パスワード
   多忙にまぎれ、御礼遅くなり、申し訳ございません!
下記、たいへん分かりやすいご教示、
ほんとうに、ありがとうございました。
今後とも、どうぞ、よろしk お願いいたします。

141 / 2272 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
1078188
(SS)C-BOARD v3.8 is Free