Access VBA質問箱 IV

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

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


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

【12091】2つのテーブルの照合 sora 11/9/30(金) 0:24 質問[未読]
【12096】Re:2つのテーブルの照合 11/10/12(水) 16:51 回答[未読]
【12098】Re:2つのテーブルの照合 kou 11/10/13(木) 9:20 回答[未読]

【12091】2つのテーブルの照合
質問  sora  - 11/9/30(金) 0:24 -

引用なし
パスワード
   いつも、参考にさせていただいてます。
さっそくですが、ご指導いただきたく、投稿しました。

2つのテーブル
T_BBB
T_CCC

この2つのテーブルのフィールド名は、全く同じですが
フィールドの数が、110程あります。

2つのテーブルの中身データの照合をし

一致したデータと、T_BBBのみしかないデータ、T_CCCしかないデータの
各テーブルを作成したく

下記の様なのを作ってはみたものの、、、

Dim TB_BBB As DAO.Recordset 'レコードセットの変数
Dim TB_CCC As DAO.Recordset

Set TB_BBB = DB.OpenRecordset("Select * from BBB;") 'テーブルBBB全て

While TB_BBB.EOF = False

strSQL = "SELECT CCC.* FROM CCC "
strSQL = strSQL & "WHERE (((CCC.品番)='" & TB_BBB![品番] & "') "
strSQL = strSQL & " AND ((CCC.ロット)='" & TB_BBB![ロット] & "') "




strSQL = strSQL & " AND ((CCC.数量)='" & TB_BBB![数量] & "'));"

こんな感じで、110件ほど書きましたが条件が多すぎるのか、【クエリが複雑】と、なってしまいできません


件数が大量の場合の処理の仕方教えてください
宜しくお願い致します

【12096】Re:2つのテーブルの照合
回答    - 11/10/12(水) 16:51 -

引用なし
パスワード
   雅です。

VBAで全部書いちまったほうがよさそうですね。

手抜きしたければ
For FLD In TB_BBB.Fields
  If TB_CCC.Fields(FLD.Name).Value <> FLD.Value Then
    '一致しませんの処理
  End If
Next FLD
とか駆使してください

【12098】Re:2つのテーブルの照合
回答  kou  - 11/10/13(木) 9:20 -

引用なし
パスワード
   横から失礼します。

>件数が大量の場合の処理の仕方教えてください

ちょっと聞きたいのですが、「件数」とは、データ数のことでしょうか?それともフィールド数?
データ数ならVBAでやると結構な時間がかかりますね。トランザクション必須です。
ちなみに、

1.全110フィールドが同一のデータ
2.全110フィールドの内1つでも違うフィールドがT_BBBにあるデータ
3.全110フィールドの内1つでも違うフィールドがT_CCCにあるデータ

の3つのテーブルを作りたいということですよね。

私が考えた方法としては

Dim rs_BBB As DAO.Recordset
Dim rs_CCC As DAO.Recordset
Dim same_flag As Boolean
〜レコードセットにデータをセット〜

'T_BBBを元に比較、同一データとT_BBBにだけあるデータを拾う
Do Until rs_BBB.EOF 
Do Until rs_CCC.EOF
 If 全フィールド比較して同一 Then
  同じデータとして新テーブルに挿入
  same_flag = True
  Exit Do
 End If
Loop
If same_flag = False Then 'T_CCCに同じデータが無かった場合
 T_BBBにだけあるデータとして新テーブルに挿入
End If
same_flag = False 'フラグのリセット
Loop

'T_CCCを元に比較、T_CCCにだけあるデータを拾う
Do Until rs_CCC.EOF 
Do Until rs_BBB.EOF
 If 全フィールド比較して同一 Then
  same_flag = True
  Exit Do
 End If
Loop
If same_flag = False Then 'T_BBBに同じデータが無かった場合
 T_CCCにだけあるデータとして新テーブルに挿入
End If
same_flag = False 'フラグのリセット
Loop

という感じで、物凄いループになりました。
「応答なし」になりそうで怖い…

SQLでできないか考えたんですが、Exists使ってできないでしょうか?

1.SELECT * INTO 新テーブル1 FROM T_BBB WHERE EXISTS(SELECT * FROM T_CCC)
2.SELECT * INTO 新テーブル2 FROM T_BBB WHERE NOT EXISTS(SELECT * FROM T_CCC)
3.SELECT * INTO 新テーブル3 FROM T_CCC WHERE NOT EXISTS(SELECT * FROM T_BBB)

これで新テーブルに保存される…と思います。
(もしかしたらとんでもない間違いをしてるかもしれません)

他の方へ:
間違っていたら指摘をお願いします。orz

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