MS Access Tips/Sample and VBA and Blog customize etc...

複数ユーザーで共有している場合のフロントエンドファイルのバージョンアップ

Accessで複数ユーザーで共有する場合、フロントエンドデータベースとバックエンドデータベースに分割して、フロントエンドファイルを各ユーザーに配布して運用するというのはもう常識ですよね。

で、このように運用しているとき、フロントエンドデータベースのバージョンアップあった場合、更新ファイルを各クライアントにコピーする必要があります。ネットワーク経由で上書きコピーするにしても、ユーザーがファイルを開いているとコピーできませんので、いちいち声をかけて閉じてもらう必要があります。

この不満を解決する方法を紹介します。

VBSで自動バージョンアップ

難易度:

自動バージョンアップの概要

データベースの分割って何?という方はまずは下記を参照してください。

データベースを分割する - Access

さて、最近のソフトだと更新情報を取得して、自動でバージョンアップするというのが多くなっています。この仕様と同じようことができればいいですよね。

データベースファイルを開いている時に、自分自身を上書きコピーするというのはできませんので、別に起動用のプログラムを作成する必要があります。起動用プログラムはAccessで作ってもいいし、お使いの開発言語があるならそれを使用してもいいですね。

今回は、Windowsに標準でインストールされているWSH(Windows Script Host)を使用する例を紹介します。これなら、エディターでだれでも作成することができます。また、手直しする時もエディターだけ簡単にできます。

自動バージョンアップの概要としては、下記のようになります。

各クライアントには、
起動用プログラムとフロントエンドデータベースファイルを配布します。ユーザーには、起動用プログラムを起動してもらいます。(デスクトップにショートカットを作成するとか、スタートメニュー、タスクバーなどに表示しておくといいでしょう。)

フロントエンドデータベースには、バージョンを格納しておくテーブルを入れておきます。

サーバーには最新のフロントエンドデータベースを置いておきます。

起動用プログラムでは、サーバーのファイルのバージョンとカレントのファイルのバージョンを比較して、サーバーのバージョンが上がっていれば、カレントへ上書きコピーしてからフロントエンドファイルを開くようにします。バージョンが変わってなければそのまま開きます。

自動バージョンアップVBSコード

フロントエンドデータベースにはバージョン情報を格納するために下記のテーブルを作成して、バージョン番号を入力しておいてください。

テーブル名 _VerInfo
フィールド ver (数値型)

WSH(VBS)のコードは下記のようになります。エディターに下記のコードをコピーして、3~5行目のパス名、ファイル名は実際のものに書き換えてください。拡張子をvbsにして保存してください。(文字コードはShift-JISにしてください。)

このVBSを二重起動されると危険なので二重起動できないコードを追加してあります。

開発者は、フロントエンドファイルを更新したら、バージョンテーブルのバージョンを更新して、サーバーへ上書きコピーするだけです。

あとはユーザーがこのVBSを実行すると、バージョンアップされたファイルが有る場合は、「アップデイトしますか」と聞いてきて、「はい」を選択すると自動的に最新ファイルに置き換えられて開きます。

VBSの弱点は、ソースコードが簡単に見ることができるという点ですね。それでは、セキュリティ上問題が有るという場合は、下記の方法で暗号化するといいかも知れません。

@IT:Windows TIPS -- Tips:WSHスクリプト・コードを暗号化する

また、OS と Office のビット数が異なったり環境によってはエラーになる場合がありますので、その場合は下記を参照したください。

64bitOS、32bitOffice環境でのWSH(VBS)でAccessデータベースに接続する - hatena chips

拍手する

7 Comments

こまったちゃん says..."教えてください"

はじめまして。
ゼロからAccessを勉強し、苦労している者です。
未熟者の上、他の人からの要求もあり、バージョンアップが度々必要になります。
その度にメールでユーザにフロントエンドを配布し、置き換えをしてもらっていますが、このページにたどり着き、とても良い方法だと思い、すぐに実行したくなりました。
私を含め数人は、Access2010本体を入れているので、accdbファイルが使用できるため、ここに書いて下さっているコードで自動バージョンアップが可能なのですが、Runtimeしか入れてない人は、accdrファイルから実行しています。この場合、Driverの部分は、どうなるのでしょう?
私のPC(Access2010本体のみ)でも、.accdrの拡張子に変えたファイルで実行すると、エラー([ODBC Microsoft Access Driver]ファイル'(不明)')となります。
いろいろ調べたのですが分からないので、教えていただければ幸いです。

2014.08.20 11:52 | URL | #Xysd5fB2 [edit]
hatena says..."re:教えてください"

> 私を含め数人は、Access2010本体を入れているので、accdbファイルが使用できるため、ここに書いて下さっているコードで自動バージョンアップが可能なのですが、Runtimeしか入れてない人は、accdrファイルから実行しています。この場合、Driverの部分は、どうなるのでしょう?
> 私のPC(Access2010本体のみ)でも、.accdrの拡張子に変えたファイルで実行すると、エラー([ODBC Microsoft Access Driver]ファイル'(不明)')となります。
> いろいろ調べたのですが分からないので、教えていただければ幸いです。

当方の環境(Windows7 64bit, Access2010)で、拡張子を .accdr に変えて実験してみましたが、問題なく接続できました。
エラー内容からいっても、.accdr か .accdb かの違いが影響するとは思えません。

とりあえずは、下記の内容を確認してみてください。

64bitOS、32bitOffice環境でのWSH(VBS)でAccessデータベースに接続する - hatena chips
http://hatenachips.blog34.fc2.com/blog-entry-421.html

2014.08.20 23:55 | URL | #5uE6dEgY [edit]
こまったちゃん says..."ありがとうございます"

回答、ありがとうございました。
お返事遅くなり、申し訳ありません。

こちらの環境は、WindowsXP SP3(32bit)、Office2003と2010の両方入っています。
また、ユーザーの環境も、ほとんどの人が同じですが、中にはWindows7が入っていたりと、まちまちです。

環境による問題かと、教えて頂いたHPからいろいろやってみましたが、よく分からなかったので、accdrで配布することを諦め、accdbのままで使ってもらうことにしました。
accdbなら、このvbsでランタイムを使えるようです。

ありがとうございました。
Hatenaさんの書かれているブログは、いろいろ便利なものがありそうなので、これからもお世話になるかもしれません。
またよろしくお願いします。

2014.08.25 11:51 | URL | #0mk/PYHQ [edit]
やすはら says..."スクリプトの件"

はじめまして。このサイトにて上記スクリプトの利用で大変助かっており感謝いたしております。有益なテクニックありがとうございます。
1点だけお聞きしたいのですが、このスクリプトは全ファイルをコピーすることになりますが、Accessファイルの特定のテーブルだけをコピーしないようにする方法はございますでしょうか? クライアント側でのAccessで1つだけ更新したくないテーブルがありまして。何卒よろしくお願い致します。

2014.09.20 18:31 | URL | #64TjWBNY [edit]
hatena says..."re:スクリプトの件"

> 1点だけお聞きしたいのですが、このスクリプトは全ファイルをコピーすることになりますが、Accessファイルの特定のテーブルだけをコピーしないようにする方法はございますでしょうか? クライアント側でのAccessで1つだけ更新したくないテーブルがありまして。

ファイルコピーコマンドを使ってますのて、ファイルごと上書きになりますね。

先に旧ファイルを別名にしてから、サーバーから更新ファイルをコピーしてきて、特定のテーブルを旧ファイルからADOでインポートするというようにすれば、いいですね。

おそらく、更新したくないテーブルというのは、ユーザー毎の設計などを保存しておくためのものだと思いますが、
私の場合は、別に設定格納用のデータベースファイルを用意して、それを各クライアントにおいて、フロントエンドファイルからリンクテーブルとして接続するようにしています。
そうすれば、このページのスクリプトがそのまま使えます。

設計ファイルは別にしておいたほうが管理上も便利だと思います。

2014.09.20 22:06 | URL | #5uE6dEgY [edit]
やすはら says..."re:re:スクリプトの件"

ご回答ありがとうございます。本当にすばらしいスクリプトと感心するばかりです。ご指摘の通りです!各クライアントごとに発行する伝票にはクライアントごとの特異な番号をオートナンバーにして付番しておりまして・・・。
お教えいただいた方法をもう少し教えて頂けるとありがたいのですが。当方、初心者ゆえ、ある程度の想像はできるのですが、実際に作成するとなると。お手間おかけして申し訳ありません。

2014.09.22 13:03 | URL | #64TjWBNY [edit]
says..."承認待ちコメント"

このコメントは管理者の承認待ちです

2016.02.22 11:37 | | # [edit]

Leave a reply






Trackbacks

trackback URL
http://hatenachips.blog34.fc2.com/tb.php/422-6aefea47
該当の記事は見つかりませんでした。