Microsoft Accessで開いている15個程度のMySQLデータテーブルに、対応するエクセルファイルのデータを自動で書き込むエクセルVBAマクロを作って下さい。 要件はコメント欄に記載します。よろしくお願い致します。
ログインして回答する
回答はまだありません
これ以上回答リクエストを送信することはできません。制限について
コメント(9件)
マクロ実行ファイルのSheet1
A列・・・ID(処理の範囲:空のセルで終了)
B列・・・EXCEL ファイルのフルパス(例:D:\Data\sample.xls)
C列・・・Access ファイルのフルパス(例:D:\DB\sample.mdb)
D列・・・格納先のテーブル名(例:sampleTable1)
E列・・・書き込み結果、エラー情報の出力
読み込みファイル(sample.xls) の例(上記のB列で指定)
1行目・・・・・カラム名(例:userName, price, address 等)
2行目以降・・・データ(例:山田, 25000, 東京都千代田区千代田1番)
この場合、sample.db 内に sampleTanble1 があり、そのテーブルに userName, price・・・ などの列がある。
そこへ、sample.xls のデータ 山田,25000・・・ などを書き込むという感じです(下記「以前の質問」より引用)。
2:動作環境2
①:データテーブルのフィールドの制限で書き込めなかった行があれば、その行数を記録。sample1.xlsで4行目と7行目がエラーで書き込めなければ、先ほどのシートの対応する行に
1,sample1.xls,c:\excel\,sample1,c:\DB\,4+7
などのように、エラーログを記録。
②:①のエラーログにエラーの種類を記載。
1,sample1.xls,c:\excel\,sample1,c:\DB\,4:not integer!+7:not varchar(10)!
などのように、エラーログを詳細化(エラーメッセージはアドリブまたはコンピュータのメッセージをそのまま利用)。
3:以前に「アクセスを経由しない」という動作環境にて作られたプログラム
本質問は以前の質問
http://q.hatena.ne.jp/1231901164
にて、一度動作要件を満たす回答を得られたこと、自動終了前となったことから一度終了し、新しく質問しています。
質問に不明な点がある場合や、改変前の要件を満たすプログラムを参照したい場合は、恐れ入りますが前の質問をざっとで構いませんので読んでからご回答お願い致します。
また、上記の動作環境は、以前の質問で頂いたコメントや回答から引用・改変しています。
まずはっきりしておきたいのですが、EXCEL や Access から何の設定せずにMySQL へ
アクセスすることはできません。
現在、そのAccessが MySQL へアクセスできているのも、ソフトが 何らかの Database
接続の設定をしているためだと考えられます。
最終的に複数ユーザで使用したいということですが、DB はどこで稼働させるのでしょうか。
部内のサーバでしょうか。またその某ソフトはユーザ全員がインストールするのでしょうか。
先に紹介した、ODBC はWindows でデータベースに接続する際に使用する標準的な手法です。
いくつかの接続は標準で用意されていますが、MySQL や PostgreSQL などオープンソース
のものは、個別にそれ用のものをインストールする必要があります。
(接続には DLL や ODBC など いろいろありますが、何らかの形で必要です。)
そうでなければ、Windows が標準で備えている、http や ftp などのポートを使ってサーバ
へデータを送信し、サーバ側がDBとやり取りする、いわゆるサーバサイド処理ような形態で
にする必要があります。
このあたりを整理すれば、運用にあたってどのような環境を構築するのが望ましいか
方向性が決まるのではないでしょうか。
さて、それぞれのご質問に回答します。
>差支えなければ、その某ソフト(もしフリーウェア等)を明示していただけませんか。
ソフトウェアは開発会社に開発してもらい、運用しているものなので、これということはできないのですが、データの移動に関して言いますと以下のとおりです。詳しくないので、語句がおかしいかもしれません。
■某アプリケーションをユーザが使用時
0:某アプリケーションはクライアント側にインストールされます。
1:クライアント側はSQLiteで動いています。
2:サーバー側はMySQLで動いています。
3:アプリケーション立ち上げ時、MySQLからデータを読み込み、SQLiteに一時データを作成・保存、MySQLにSQLiteから転送しています。
※ユーザは1グループあたり10名~100名がありえます。
※複数グループが存在する予定です。アプリはグループごとに違うサーバーのデータテーブルを参照してきます。
■管理者の環境(現状ではこの状態)
0:開発者クライアントコンピュータにも、某アプリケーションがインストールされています。ただデータ転記以前にはこのアプリケーションは使用しないので、関係ありません。また、MySQLもインストールされています。
1:MySQLのDBはlocalhostに仮想web(?)として構築、運用されています。
2:SQLiteのDBもlocalhostの別のフォルダにあります。
3:AccessはlocalhostのMySQL(マスタデータ)に連携されています。これは各グループの管理者のみが必要とする機能です。
※1現状では、EXCELデータは手作業で開かれ、Accessを通じてMySQLテーブルに転記されています。
※2某アプリケーションをグループに所属するユーザ全員が使い始める前には、AccessがMySQLテーブルへの接続を担保すると思いますが、これはグループの管理者のみが行えれば良いです。
※1の作業を自動化したいのですが、複数の管理人がマスタデータを変更し得、また管理人は今後増える可能性があり、かつのプログラムのインストールは敬遠する傾向があるので、なるべく簡便に(できればEXCELデータと.mdbファイルからだけで-ODBC5.1のインストールはできれば無しに)マスタデータの変更を行いたいと考えています。
>先に紹介した、ODBC はWindows でデータベースに接続する際に使用する標準的な手法です。いくつかの接続は標準で用意されていますが、MySQL や PostgreSQL などオープンソースのものは、個別にそれ用のものをインストールする必要があります。(接続には DLL や ODBC など いろいろありますが、何らかの形で必要です。)
これは、Accessの.mdbファイルが生成されている時点で、「個別にそれ用のものをインストールする必要」が無いと考えてはいけないでしょうか?
以上、ややこしいですがよろしくご検討お願い致します。
*.mdb というのは単なるファイルであって、これにデータを読み込んだり、このデータをアップデート
しているのは、その某ソフトによるものだと推測します。
そのソフトをクライアントにインストールする際に、何らかの接続設定がされたと思うのですが、
「コントロールパネル」から「プログラムの追加と削除」を開いた部分に
MySQL Connector/ODBC x.x
というのがありませんか?
あれば、先に回答したなかの 5.1 を x.x に置き換えれば、その状態で使用できるかと思います。
なければ開発元に Access がどのように MySQL に接続しているか接続方法を確認できないでしょうか。
それがわかれば同じ方法を使用して、インストールや設定なしで先の処理ができるかと思います。
今までおっしゃられてきたことの意味がようやく分かったように思います。
インストールされているソフトウェアを同定してみることで、私が望んでいる自動化が可能であるように思います。
自分でやってみようと思います。
対応可能なようであれば、それが何よりでしょう。
ただ、開発側の視点に立って考えてみたとき、今回の目的を今一度
確認したほうが良いように感じました。
ソフト開発者は、データ登録のインタフェースとして、Access を
用意したのだと思いますが、それをスキップしてEXCEL のデータを
直接DBに登録することは、そこで用意されている(はずである)
データハンドリングの対策を無効にするものです。
例えば、先に懸念した数値や文字のデータ型に関してもDBからDBへ
のやり取りであれば、あらかじめテーブルのデータ型をそろえて
おくことで回避することができます。
それらを使用せずに、別に用意したツールを使用することで発生する
問題は、当然のことながら開発側の責任対象外となります。
仕事での運用であれば、これらのことを考慮し、必要であれば費用
をかけてでも開発側に変更を依頼した方が結果として、効率のよい
ことも往々にしてあります。
そのあたりを、今一度一考されてはどうかと思います。
データを処理するためのソフトなのでしょうか。
データがそれほど重要でない場合は、多少の利便性を優先するのは
「有り」だと思いますが、大勢の運用するのであれば、他への影響は
考慮しておいた方がよいかと思います。
>実際に ODBC が使われていたかが気になるところですが、ご自身で対応可能なようであれば、それが何よりでしょう。
ODBCで調べていたので見逃していたのですが、指示して頂いたとおりインストールしたMySQL Connector ODBC5.1の他に、MySQL Connector ODBC3.51がインストールされていました。
どうやらこれを通じてMySQLと接続していたようですね。
ありがとうございます。覚えておきます。
>データを処理するためのソフトなのでしょうか。
MySQLのあるテーブルからマスタデータを引き出し、項目を選んで日付・付属情報・備考などと共に違うテーブルへ格納するソフトです(これはデータ蓄積型でしょうか)。先の注意点について覚えておきたいと思います。
現状では、クイックにマスタデータを書き込み、テストするために、先ほどのプログラムを使用し、運用開始前に信頼性について使用者と検討しようと思います。
ありがとうございます。