- 締切済み
エクセルとアクセスのデータ比較(VB6.0)
エクセルとアクセスのデータ比較ツール(VB6.0) 質問者:SSCSC アクセスからエクセルにコピペされたレコードがあるとします。 そのエクセルのレコードのあるフィールド値を変更します。(このとき、アクセスもエクセルと同様に変更します。) 上記は手作業でします。 そこで、そのエクセルのレコードがアクセスに存在するかどうかをプログラムで作成したいと思っております。 要するにエクセルとアクセスのデータ比較をして、一致していないレコードがエクセルに存在した場合は、ログを出力したいと思っています。 アクセスのデータが比較基準になります。 何か簡単にできる方法はないでしょうか。 今思いついている方法は、 エクセルの1行目はコピペ時にアクセスのフィールド名がコピーされているので、 エクセル、アクセス両方のフィールド値を全て比較対象にしてSQL文で存在するかどうかを確認する方法です。 ご回答よろしくお願い致します。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- nda23
- ベストアンサー率54% (777/1415)
No2です。 >この動作のソースがすぐに思い浮かばないため、調べてみます プログラムではなくて、アクセスのクエリビルダでクエリを作るだけです。 SQL的には次のような感じです。 SELECT A.* FROM AC AS A LEFT JOIN EX AS B ON A.KEY=B.KEY WHERE A.F1<>B.F1 OR A.F2<>B.F2 OR ・・・ ※ACはアクセス側テーブル、EXはエクセル側テーブル、F1,F2…はフィールドです。
- nda23
- ベストアンサー率54% (777/1415)
アクセスにエクセルのシートをリンクさせて、テーブルのように 扱うことができます。 アクセスのテーブルとエクセルのリンクテーブルをLeft Joinし、 フィールドが不一致のものを抽出条件にすれば簡単に実現できると 思います。(主キーとなるようなものがあると仮定しています)
お礼
ありがとうございます。 イメージはできました。確かに簡単です。 この動作のソースがすぐに思い浮かばないため、調べてみます。 もしすぐにお分かりでしたら教えていただきたく思います。
>エクセル、アクセス両方のフィールド値を全て比較対象にしてSQL文で存在するかどうかを確認する方法です。 いまいちよく判りませんがこれ↑は、何回 SQL 発行することになるんでしょうか? アクセスのデータが基準なのであれば、アクセスの全件データを1回取得して、あとはループで比較すれば良いのではないかと思います。 エクセルとアクセスのデータ並び順に制限をかけられるのであれば、処理速度も確保できる筈です。
お礼
ご回答ありがとうございます。 SQL発行は1回で、エクセルのデータ分ループさせることにするつもりでした。 データ並び順は制限がありません。 例えばアクセスのデータが60レコードあったとします。 そのうちの5レコードを適当にエクセル上に貼り付け編集します。 アクセス側も同様にそのレコードを編集します。 なぜ手作業かは頭から離してください。 データ確認はエクセル、アクセスの編集が整合性がとれているかの確認になります。 やはりSQLでフィールド名全てを条件にしてループで回すしかないですかね。
お礼
ありがとうございます。 この方法よさそうですね。 現時点では、アクセスにクエリを作成すること以外の方法でやることにしました。