VBでCSVファイル(複数行のレコードがあります)を読み込んで、ACCESSに保存し(テーブルAとします)、こちらとテーブルB(作成済みとします)のレコードを比較するときに、テーブルAが複数行あって、全ての行についてテーブルBのレコードと比較をしたいと思っているのですが、これはVBで書けるモノなのでしょうか。それともVB上でSQLを書いて制御しないといけないのですか。当初はテーブルAの内容を配列にいれて繰り返すことも考えたのですが、メモリがあふれる可能性がありまして。
お知恵をいただければ幸いです。
VBでも出来ない事はないと思いますが、
素直にSQLを投げたほうが遥かに楽だと思いますよ。
あこさま
ご回答いただきありがとうございます。
SQLを投げるとすると、CURSORを用いて制御することになるのでしょうか。むしろここの掲示板ではないのでしょうか。
追記ですが、テーブルAのレコードは1件ごとにテーブルBのレコードと比較することになっております。
比較って具体的にどういう比較?差分を取りたいとか???
テーブルA、Bそれぞれのレコードセットを取得して、
1レコードずつ比較する。。。
というのはダメでしょうか?
今やりたいことはあこさまから御指摘いただきましたとおり、テーブルAのあるカラムとテーブルBのあるカラムを比較し、同一であれば抽出するということです。
Recordsetでは1行ずつ取得することは可能なのですか?知識が無いため、御迷惑をお掛けし申し訳ありません。
例えばですよ、
Dim strTmp as String
Set rsTableA = hogehogeA
Set rsTableB = hogehogeB
Do Until(rsTableA.EOF)
'比較処理
If rsTableA("Col01") = rsTableB("Col01") Then
strTmp = rsTableA(ColA)
End If
rs.MoveNext
Loop
といった感じで回してみてはどうでしょうか?
訂正
×strTmp = rsTableA(ColA)
○strTmp = rsTableA(Col"01")
あこさま
御丁寧にご回答いただきありがとうございます。
一点確認なのですが、rs.MoveNextではテーブルBのみ1行ずれるのでしょうか。それともテーブルA、Bともに1行ずつずれるのでしょうか。
大変図々しい質問ではございますが、御教示いただければ幸いです。
あ〜ごめんなさい。
そこまで気が回ってませんでしたorz
テーブルAを1行ずらすなら rsTableA.MoveNext
テーブルBを1行ずらすなら rsTableB.MoveNext
ですね。
ちなみにですが、以下のようなサイトが参考になるかと思います。
http://homepage2.nifty.com/inform/vbdb/
あこさま
了解致しました。
ということは、以下のように組めばテーブルAとテーブルBで比較した上で、見つかればテーブルAを次の行に移すことができるということでしょうか。
Do Until(rsTableA.EOF)
'比較処理
Do Until(rsTableB.EOF)
If rsTableA("Col01") = rsTableB("Col01") Then
strTmp = rsTableA(ColA)
End If
'見つからなければテーブルBの行を1行ずらす
rsTableB.MoveNext
'見つかるまで検索
Loop
'レコードBが終了したので、テーブルAを1行ずらす
rsTableA.MoveNext
Loop
またSet rsTableA = hogehogeAでRecordSetを定義していると考えればよろしいのでしょうか。
重ね重ね恐縮ですが、御確認いただければと存じます。
宜しくお願い申し上げます。
おおむね間違ってはいないと思いますが、
このままではテーブルBが最終レコードのままですので、
比較処理のLoopが終わったときに、
rsTableB.MoveFirst
を行って下さい。
>またSet rsTableA = hogehogeAでRecordSetを定義していると考えればよろしいのでしょうか。
そう解釈していただいて宜しいかと思います。
あこさま
御忙しい中、御丁寧にご回答いただきありがとうございます。こちらを元に処理をまとめていきたいと思います。
上記件について、また不明な点がありました場合はこの掲示板にてお願いするかと存じますが、宜しくお願い申し上げます。
#別に回答してくださいと言っているわけではありませんσ(^_^;)
#お世話になりましたという気持ちです。
特攻隊長まるるうさま
私の文章不足に的確に御指摘いただき、ありがとうございます。
ツイート | ![]() |