よろしくお願いします。
ACCESSはあまり使ったことがない者です。
下記ようなACCESSのデータ取得の方法を教えてください。
構造の同じテーブルを持つ複数のmdbから、1つのリストを作りたいと考えています。
各mdbの違いは、ファイル名と中身のデータのみで、他は全く同じです(ひとつのテンプレートの複製です)。
A部門.mdb (商品リストテーブル ・・・A部門の商品リスト)
B部門.mdb (商品リストテーブル ・・・B部門の商品リスト)
:
Z部門.mdb (商品リストテーブル ・・・Z部門の商品リスト)
↓
全商品リスト.csv (全社分の商品リストテーブルのデータ)
mdbが数十ファイルあるので、一つずつcsv取得して繋げるのはたいへんです・・・。
何か一発で取得できるような方法はないでしょうか?
ユニオンクエリ?等を使うとできるのでしょうか・・・。
同じフォルダ下にあるmdbを次々に開いて同じクエリを実行する機能とか、マクロとか?
現状こうなってしまっており、一つのmdbに統合するのは、運用上制約があって無理なのです。
何かうまいアイデアがあれば教えていただきたくお願いします。
No.2ベストアンサー
- 回答日時:
VBAによる処理ですが。
データの取り出しで、配列を使ったり、SQL文でレコードを
取り出したりすることもありますが、一応ノーマルにしておきます。
前提として、mdbファイルが一つのフォルダにあるものとします。
新しいmdbファイルを同じフォルダに作り、名前を 「司令塔.mdb」
とします。一応、「商品リストテーブル」の構造は、
商品ID、商品名、価格、サイズ
のようしておきます。違うようでしたら補足してください。
分かりやすいように「司令塔.mdb」にフォームを作り、
それにボタンを設定し、そのクリックイベントに以下を
設定します。ボタンの名前などは適当にしています。
標準モジュールでボタンクリックの中身を実行しても
同じではありますが。
設定が終わったらコード表のツールから参照設定を
選択して、Microsoft DAO xx Object Library に
チェックを入れてOKとしてください。xxは3.6のような
数字です。
Private Sub コマンド1_Click()
If MsgBox("データをCSVへ移します。よろしいですか", vbYesNo) = vbNo Then Exit Sub
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim strFile As String
'mdbファイルの検索用
strFile = Dir(CurrentProject.Path & "\" & "*.mdb", vbNormal)
'CSVファイルのオープン、なければ作成
Open CurrentProject.Path & "\" & "全商品リスト.csv" For Append Access Write As #1
'CSVファイルへの書き込み作業
Do While strFile <> ""
If strFile <> "司令塔.mdb" Then
Set db = DBEngine.Workspaces(0).OpenDatabase(CurrentProject.Path & "\" & strFile)
Set rs = db.OpenRecordset("商品リストテーブル")
'テーブルからデータを取り出しCSVへ
If rs.RecordCount > 0 Then
rs.MoveFirst
Do Until rs.EOF
Print #1, rs!商品ID & "," & rs!商品名 & "," & rs!価格 & "," & rs!サイズ & ","
rs.MoveNext
Loop
End If
rs.Close: Set rs = Nothing
db.Close: Set db = Nothing
End If
strFile = Dir()
Loop
Close #1
MsgBox ("データの移動が終了しました")
End Sub
なお、"全商品リスト.csv"がすでに存在している場合の
処理はしていません。その処理が必要ならば以下に
http://oshiete.goo.ne.jp/qa/7324183.html
しています。参考に。
わからないところがあれば補足してください。
ありがとうございます!
まさに自分がやりたかったことができました!
記載していただいたコードをほとんどそのまま流用させていただき、
フォルダ下の全てのmdbファイルからSQLを使って、一発で全データを引き抜くことができました。
とても助かりました。
本当にありがとうございました。
No.1
- 回答日時:
ユニオンクエリで処理する場合は
適当な(新規)MDBにA~Zmdbの商品リストテーブルをリンクテーブルします。
クエリをSQLビューで開いて
select * from 商品リストテーブルA
union all
select * from 商品リストテーブルB
union all
・・・・中略・・・・・・・
union all
select * from 商品リストテーブルZ
とSQL文を記述します。
これをデータシートビューに切り替えれば確認できます。
後はクエリを保存してからCSVファイルに出力。
別案
もし、そのフォルダにCSVファイルが既に存在したとして。
個々のMDBファイルを開いてCSV出力します。
フィールド名は付けないようにします。
その際に全てのファイル名の先頭に適当な文字を付けます。
例 TTTA商品リスト、TTTB商品リスト・・
全て出力したらコマンドプロンプトで
type C:\○○\△△\TTT*.csv >> C:\○○\△△\All.csv
とすれば結合されたAll.CSVファイルが出来上がります。
別案の方が作業時間は早いと思いますが
毎月行う必要があるならユニオンクエリなら一度設定すれば使い回しが出来ますので
用途に応じて使い分けてください。
VBAで自動化も出来ますが、初心者のようですので割愛します。
回答ありがとうございます!
両案とも、3ファイルで試してみました。
テーブルリンクは、一度は全てのmdb内の必要テーブルに対して手でリンクを設定する必要があるのですね・・・。
最初はたいへんですが二度目以降は、ファイルの置き場所を変更しない限りクエリの実行だけで大丈夫ですね。
(しかし80~100mdbくらいあるので、unionしたSQLが固まったりしないでちゃんと実行されるかACCESSの能力的にやや不安です・・・)
1回だけの作業なら、手でリンク設定するより開いてクエリを実行して最後にくっつける別案の方が、
作業量もミスの可能性も確かに少なそうです。
ただルーチン作業ではないですが、1回集計して完了できるかどうか微妙な作業なので、悩みどころです・・・。
よろしければVBAを使った方法も教えていただけないでしょうか。
ACCESSは初心者ですが、ExcelではVBAをかなり使っていたので、ある程度理解できると思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(データベース) Microsoft Accessについて 1 2022/06/06 16:20
- Visual Basic(VBA) VBAでの共有パスにつきまして 1 2023/03/04 17:24
- その他(データベース) pythonでsqlight勉強中、クエリー結果の利用法教えて下さい 1 2022/04/28 20:38
- Access(アクセス) access フォーム 大分類、小分類 1 2022/08/11 18:03
- その他(データベース) c言語の問題です。これを踏まえてコーディングしたいのでおしえていただきたいです。 3 2023/08/03 09:27
- 経営情報システム accessでの請求管理について 12 2022/06/11 16:20
- PostgreSQL PostgreSQL レコードからアイテム種類数を取得したい 2 2022/11/23 22:31
- その他(データベース) accessについて 2 2022/05/31 16:58
- Visual Basic(VBA) EXCEL関数LOOKUPとFILTERについての質問です 1 2022/12/21 05:53
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
このQ&Aを見た人はこんなQ&Aも見ています
-
「環境が人を育てる」って本当?環境によって人格や生き方は本当に変わるのか
環境が人生に与える影響は実際どれほどのものなのか、専門家の田宮由美さんに伺った。
-
Accessで2種類のデータベースを結合する方法
その他(データベース)
-
Accessで別mdbのテーブルをコピー
その他(プログラミング・Web制作)
-
ACCESS 複数のフォームから同一テーブル参照
Access(アクセス)
-
-
4
ACCESSで別DBにあるクエリを実行する
Visual Basic(VBA)
-
5
「RunSQL」と「Execute」の違い
Access(アクセス)
-
6
SQL文で パラメータが少なすぎます エラー
Access(アクセス)
-
7
ACCESSでデータ読み取り専用を解除する方法
その他(データベース)
-
8
Accessのテーブルデータを一気にVBAで追加したい・・
その他(データベース)
-
9
他ファイルのテーブルの情報を取得したい
Access(アクセス)
-
10
Accessで別テーブルの値をフォームに表示したい
その他(データベース)
-
11
別のaccessファイルからデータの抽出
Visual Basic(VBA)
-
12
Accessでレコードを別テーブルへコピーするには
Access(アクセス)
-
13
C#でaccdbファイルのテーブルの一覧を取得したいです。
C言語・C++・C#
-
14
accessでクエリの結果だけをリンクしたい。
Access(アクセス)
-
15
Access2000 サブフォームのRecordSet取得法
Access(アクセス)
-
16
Accessのマクロでモジュールを実行させたい。
Access(アクセス)
-
17
ACCESSでVBAから選択クエリの抽出条件を指定したい
Access(アクセス)
-
18
ACCESS 複数のmdbでModuleを共有したい
PowerPoint(パワーポイント)
-
19
VBAをつかってクエリの情報を抽出するには??
Visual Basic(VBA)
-
20
ACCESS VBAで別のACCESS(mdb)を起動できますか
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ACCESS テーブルに2行目から取...
-
C#でaccdbファイルのテーブルの...
-
エクセルからアクセスにインポ...
-
テーブルのリンク(ACCESS)
-
Accessの接続先をSQLサーバ...
-
アクセスマクロで、csv データ...
-
アクセス2007 エクセルへエク...
-
Access2019でフォームから入力...
-
データを削除しても表領域の使...
-
Viewにインデックスは張れ...
-
SQLでスキーマ名(所有者名)の...
-
ORA-00959: 表領域'****'は...
-
INDEXの無効化
-
datapumpの実行方法について
-
postgreSQLのint型は桁数指定が...
-
他の処理でselectさせないよう...
-
ACCESS 複数テーブル・複数フィ...
-
検索結果の列数を動的に変更したい
-
異なるスキーマからデータを抽...
-
CLOB型へのINSERT
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルからアクセスにインポ...
-
他ファイルのテーブルの情報を...
-
C#でaccdbファイルのテーブルの...
-
(ACCESS)複数mdbからのデータ...
-
ACCESS テーブルに2行目から取...
-
テーブルのリンク(ACCESS)
-
jspのプログラムについて
-
Accessでボタンを押したらエク...
-
アクセスマクロで、csv データ...
-
画面から入力した値がDBに登録...
-
[PG]AccessVBAでファイルのイン...
-
csvをSQLiteに取り込むと文字化...
-
グループ単位にCSVファイル...
-
アクセス初心者に注意点を教え...
-
Access2019でフォームから入力...
-
VBでCSVデータをMDB
-
ACCESSとエクセルのリン...
-
DataGridViewでの変更保存
-
データ読込時のタイムアウト
-
mdbファイルを試しに開いてみた...
おすすめ情報