LoadDB13.LZH データベース多重化システム (データベースシステムローダー) Copyright (c) 1999-2002 by Ogo mailto:ogou@icity.or.jp ●はじめに 相も変わらず御機嫌よろしくないようで…… > MS-Windows まぁ、それはともかく、データベースシステムを使って仕事をする上 では、「バックアップ」は重要課題の最右翼。 しかも、MS-Windows 上でデータベースを動かそうなんていうんだから、 「クラッシュやハングアップは日常茶飯」という状況を想定せざるを 得ないでしょう。 ハードウェアの耐用年数もヒドイものだ。価格が安くなった見返りは ちゃんと支払うことになっている。 さぁ、大事な大事なデータのバックアップをどうしますか? 最悪、MS-Windows や桐8は(別機械にでさえ)再インストールできる のですが、「データ」はバックアップがなければどこからも復元でき ませんよ。 - - - ところで、このドキュメント内では「データベースシステム」という 用語が随所に出て来ます。 これは例えば「MS-Access」や「桐」などのデータベースソフトでは なく、それらデータベースソフトを使って構築したアプリケーション を意味します。 端的に言えば、「MS-Access」ならば(通常)「*.Mdb ファイル1つ」 ですし、「桐」ならば「 *.Tbl をベースにした *.Wfm や *.Rpt など のファイル群」になります。 運用上の前提条件として、「1データベースシステム=1フォルダ」 という構成を想定しています。 もちろん、データベースソフトから呼び出す別ソフトのオブジェクト もあるだろうし、このデータベースに関する関連資料がサブフォルダ に収められている場合もあるでしょう。 それらを含めて(サブフォルダも包含して)、1業務単位を1データ ベースシステムと認定し、これは1フォルダに収めてあるという想定 です。 言わずもがなですが、クライアント=サーバー方式で構築されている データベースシステムを想定していません。 あくまでもスタンドアローンで自マシンで「閉じている」システムが 前提です。 Ver. 1.1 で以下の点が変更になりました。 ・MS-Access の Mdb ファイルの場合、最初の1回目以降は破棄 終了の仕組みが有効に働いていなかったバグを修正。 ・システム終了時の画面で、どうすれば普通に終了できるかが 判りにくかったので、画面構成を変更。 設定の変更とシステムの終了を明確に分離した。 ・システムの初期設定(設定変更)後、直ちに当該データベース システムを起動できるように変更した。 これにより、MS-Access 以外をベースとするデータベースシス テムでも再起動ができるようになった。 Ver. 1.2 では細部のバグフィックスと説明書の変更のみです。 Ver. 1.3 で以下の点が変更になりました。 ・起動したアプリのアプリケーションタイトルバーに存在する 「閉じる」ボタン(×ボタン)を無効化できるよう機能追加。 ・システムバックアップ先の設定を汎用化した。 ・このローダー自身のアプリケーションアイコンを任意に変更 できるようにした。 ・カレントパスどこであっても(ショートカットを作成する時、 「作業フォルダ」が空白の場合があり、動作が怪しい場合が あった)このソフト自体が存在するフォルダをカレントパス にしてから、目的のファイルを開くように仕様を変更した。 ・重複起動禁止の条件を見直した。 Ver. 1.0 以降、全ての *.Ini ファイルとは互換性がありますので、 バージョンアップに際しては *.Exe ファイルのみを上書きコピーす れば OK です。 ●利用形態 その1 自分自身が作成・運用しているデータベースシステムを起動する ために利用する。 この場合、任意のデータベースシステムに「バックアップ機能」 が付加されることになります。 また「MS-Access」の *.Mdb ファイル単独のデータベースシステム の場合、「破棄終了ができる」「修復ができる」「最適化ができる」 機能も追加されます。 その2 自分自身が作成したデータベースシステムを任意に配布するために 利用する。 機能的には上記と同じなのですが、フリーのインストーラー(もち ろん市販物でも可)を使って、ユーザーに任意のフォルダにインス トールさせることが容易になります。 「*.Exe」ファイルの実行を指示するショートカットを作成すれば 貴作のデータベースシステムを起動できますので、細かい手順など を指示しなくても「市販のソフト同様に SetUp.Exe を実行して」と いうだけで、目的が達成できるようになります。 もちろん、アンインストールもコントロールパネルの「アプリケー ションの追加と削除」で簡単にできるわけです。 ●動作環境と開発環境 【動作環境】 MS-Windows 95 以降 (と思います (^^; 動作確認報告募集中) 32bit Windows 用のデータベースソフトで構築したデータベース システムを運用する環境( MS-DOS や Win3.1 のデータベース ソフトがメインで使われるシステムなら、問題があります) データベースソフトが正常にインストールがされていて、 レジストリによる関連付けで「Open(開く)」が目的ファイルを 目的通りの動作で開くことが前提です。 %Windows%\Command フォルダに Xcopy.exe と Xcopy32.exe が存在する環境 (人為的に特殊な事を行ってない限り、存在する筈です) 【製作環境】 Epson Endeavor Pro-800L & Win NT 4 Sp6a & Borland Delphi 6 Personal ( Free Soft by Borland ) ●インストールとアンインストール 圧縮ファイルを解凍すると、 このテキストを含めて3つのファイルが 入っています。 このプログラムは単独で動かすことを想定されていません。 あくまでもメインとなるシステムは別物(貴方自身が作成)で、これ に付随させるべきものです。 従って「インストールプログラム」は存在し得ません。 もちろん、アンインストールも同様。 なお、レジストリの読み出しを行なうことはあっても、書き込みをする ことはありません。 アンインストール後にレジストリにゴミが残るようなことはありません のでご安心を。 ●準備作業 その1 目的のデータベースシステムが存在するフォルダに LoadDB.Exe を ファイルコピーします。 この Exe ファイル名は任意に変更してもらって結構です。 そのまま Exe ファイルをダブルクリック(叉は Open )して起動 します(ショートカットを任意の場所にお作り下さい)。 メインメニュー部分で、「設定変更」ボタンを押して、目的とする データベースシステムの「最初に開くファイル名」を入力して下さ い(もちろん、お好みに応じて「イメージファイル名」や「システ ムタイトル」や「アイコンファイル名」も入力して下さい)。 そのまま「設定保存」を押せば設定完了です。 画面表示上は「*.Exe, *.Wfm, *.Cmd, *.Mdb」となっていますが、 どんな拡張子のファイルでも大丈夫です。 Paradox でも 五郎でも 大丈夫でしょうし、「システム」と呼ぶに は少し抵抗がある、桐の「 *.Tbl」1つのみでも大丈夫です。 更には、ただのテキストファイルでも一太郎の文書ファイルでも、 とにかく関連付けの「Open(開く)」で開けるものなら何でもOK なんです。 (^^) (「標準の関連づけ」ではなく「Open」である事 に注意――っても、普通の人には同じ意味だが) この手のファイルを目的とするなら、「参照」のダイアローグでは、 「ファイルの種類」を「全てのファイル」にして下さいね。 なお、MS-Access の *.Mdb ファイルを指定した場合は、動作説明の ところで述べるバックアップファイル/テンポラリファイルの関係で、 環境設定を変更した場合は、一旦終了します。改めて起動して下さい。 その2 「利用形態その2」の場合、先方ユーザーに上記作業を求めるのは 顰蹙モノです。 従って、上記設定をファイルにして一緒に配布します。サンプルは 同梱の「LoadDB.INI」です。これは極めて簡単なテキストファイル ですので、メモ帳か何かで任意に書き換えて下さい。 書き換えるのは [Execute] セクションの 「DBPath=」の値と [System]セクションの「Title=」「ImagePath=」「IconPath=」の値 です。 [BackUp]セクションは空白にしておいて下さい。 重要なのは、「DBPath=」「ImagePath=」「IconPath=」の設定に、 ファイル名だけ書いて、パス名を入れないことです。 それで自動的にカレントパス(この exe ファイルがインストール されたフォルダ)と看做されます。 ※ なお、「Customize=Disable」と入れておけば、このソフトで 対話的に設定を変更することが不可能になります。 少なくとも1度は上記1の方法を試してみて、中身を確認しておく のが良いでしょう。 なお、 *.Exe ファイルの名前を ABC.Exe に変更した場合、 *.Ini ファイルも同じく ABC.Ini に変更する必要がありますので念の為。 ●動作説明 「最初に開くファイル名」が「*.Mdb」か否かで弱冠の違いがあります。 一般のファイルの場合 *.INI ファイルに書かれてある「最初に開くファイル名」をフルパスで 取得します。 その拡張子を判別して、レジストリより関連付けを探します。 「Open(開く)」になっている設定のコマンドラインを取得します。 もし「最初に開くファイル名」が「*.Exe」「*.Bat」「*.Pif」ならば そのまま実行します。 それ以外ならば、取得したコマンドラインの最後のパラメーターとして 「最初に開くファイル名」を代入して実行します。 この時、実行するシステムは必ず「最大化」されます。 呼び出されたプログラムが終了するまでは、タスクトレイにアイコン化 してひたすら待ちます。このアイコンをクリックしても「稼働中」表示 が出るだけで、呼び出したソフトが起動している状態のままで終了させ ることはできません。 データベースシステムが終了すると(または、「最初に開くファイル名」 が空白 or 存在しないファイル名だったりした場合)、メインパネルが 開きます。 ここではこのデータベースシステムのローダー稼働に関する設定が変更 でき、バックアップ機能が使えます。 少なくとも「配布」するなら、「システムタイトル」と「イメージファ イル名」とはカスタマイズされたものを考慮して下さい。 イメージファイルには必ず「データベース開発者」の連絡先を入れてお いて下さいね。私の所に問い合せが来たら困ってしまいます。 (^^) *.Mdb ファイル( MS-Access のファイル)の場合 以下の点が違います。 ・システム起動前に、*.Mdb ファイルのコピーを作ります(ファイル 名は *.Mdb.Tmp です)。 ・システム終了後に「保存終了」「破棄終了」「保存継続」が選択で きます。桐ユーザーにお馴染みの上記3種類の違い(動作)は以下 の通り。 「保存終了」すると、 *.Mdb.Tmp を *.Mdb.Bak という名前に 変更して1世代前のデータを残します(既存の *.Mdb.bak は 強制上書きされます)。 「破棄終了」すると *.Mdb を削除した上で *.Mdb.Tmp を *.Mdb に戻して、1世代前(起動前)の状態に戻します。 「保存継続」すると上記保存終了と同じことをした後に改めて *.Mdb.Tmp を作り直してから *.Mdb ファイルを開きます。 長時間の入力作業を続行するような場合には、一定時間置きに この「保存継続」を行なえば、その間のデータの保持が保証さ れます。 ・「修復」「最適化」を実行できます。 ・環境設定を変更した場合は、このシステムを一旦終了します(この 時、*.Mdb ファイルの名前を変更した場合、事後に *.Mdb.Tmp も 残ります)。 上記の MS-Access 特有の機能は「最初に開くファイル名」に設定されて いるファイルに対してのみ適用されます。 ●「閉じる」ボタンの無効化動作について この機能はオプションで使わないこともできます(デフォルトは使う)。 この機能を使うことで何か突然のトラブルが発生しても、当方では全く責任 を持ちません(現在までに試用した限りは何も問題は起きていないが)。 まず、無効化するのは、このローダーが直接起動したアプリケーションプロ セスのみです。 たとえ同じアプリケーションが複数起動している状態であっても、自分自身 が起動したプロセスのみを動作対象とします(クラス名やタイトルが同一で あっても干渉しないはずです)。 「閉じる」ボタンとはアプリケーションタイトルバー右端の × ボタンです。 そのアプリケーションソフトが MDI (マルチドキュメントインターフェイス) だった場合、アプリケーション自身の「親」ウィンドウのタイトルバーです。 ※ MDI とは、桐 を始めとして、ワード・エクセル・一太郎のように、 1つのアプリケーションで幾つものファイルを「子」ウィンドウに 開くことができるアプリケーションスタイルを言います。 「子」ウィンドウのタイトルバーに存在する「閉じる」ボタンは制御しません。 「子」ウィンドウが最大化されていて、「閉じる」ボタンが上下に並んでいる 状態でも、「親」ウィンドウの「閉じる」ボタンのみが対象です。 この機能は、元々 hidetake さんが提唱して T.Samura さんが KIRITOOL.EXE (桐 Win「閉じる」ボタンの無効)として公開していた機能を取り込んだもの です。 T.Samura さんの KIRITOOL.EXE は「閉じる」ボタンを無効化する対象を判別 するのに、クラス名やタイトルを利用していたのですが(他に手段がない)、 これでは同一アプリが複数ある場合に問題になりそうなのと、実行した瞬間 だけに適用されるツールであるため、画面書き換えが起きた(発生させた) 時に再び「閉じる」ボタンが有効になるので Ogo は困っていたのです。 (例えば、桐で ウィンドウ更新 -1 とか、並べ替え・絞り込みなどを行なう と、その度に「閉じる」ボタンが有効になる) この LoadDB.Exe では、自分が起動したプロセスが終了したか否かを1秒間 に1回の割合で確認しているのですが、その時ついでに、「閉じる」ボタン の無効化も行なっているわけで、自分が起動したプロセス判別に必要な情報 は自分自身が取得できるので、誤動作もしないだろうと言えます。 この機能は、MS-Access や MS-Excel の場合、 VBA (マクロ)で内部的に Windows API を呼び出して、アプリケーション自体の挙動を変えることがで きるのですが、桐では内部的に API を使ったシステムコールを反映させる 方法がないのと、更に、一々そんなコードを追加で書くことを省略すること ができるので、まぁ楽かな (^^) と( Windows API を取り込んだマクロを 書くには、当該アプリケーションの勉強以外に、Windows プログラミングの 知識まで必要になるし)。 まぁ、「ついで」の機能ではあるのです。 あくまでも(特に MDI ソフトで)、子ウィンドウを終了するつもりで誤って アプリ全体を終了してしまうケースが多いことへの対策の積もりなので…… (特に桐の場合、フォーム編集と一覧表形式編集の間を行き来させると、 一覧表形式編集画面を終了させる時に、このエラーを多発させてしまう) なお、システムアイコン(アプリケーションタイトルバー左端のアイコン) に所属するメニューの「閉じる」も同時に使えなくなってしまうようです。 が、キーボードから ALT + F4 (閉じる)とか、アプリ側の「ファイル」 メニューの中に存在する「閉じる」とかの終了手段が使えなくなるわけでは ありません。 非常事態が発生して、システム設計以外での強制終了をしたい場合には、 上記終了手段が残されているということです。 ●重複起動禁止の条件について この LoadDB.Exe は任意のフォルダに、任意の名前にリネームされて、複数 インストールされることを想定しています。 「重複起動禁止」は、この「 LoadDB.Exe の重複」を指し、それが起動しよ うとするシステム(ファイル)を意味しません。 で、「 LoadDB.Exe の重複」とは、同一フォルダ・同一名の「 *.Exe 」と いう意味です。 同じ LoadDB.Exe でも、違うフォルダにあれば「重複起動」と看做しません。 同一フォルダにあっても、異なる名前の「 *.Exe 」ファイルは「重複起動」 と看做されません。 データベースシステムが終了して LoadDB.Exe に制御が戻ったにも関わらず、 非アクティブ状態で背後に隠れていると、うっかり同一の *.Exe を重複して 起動してしまう――というケースを何度も見たので、この「重複起動禁止」の 機能を見直しました。 (更に、別フォルダにある同名 *.Exe を同時に動かした時の挙動にも問題が あったので) ――ところが、事後の見直しで、桐8の場合にのみ以下の問題が発生すること が判りました。 桐8の場合、既に別の桐8が動いている状態で、新たに桐8が(拡張子の関連 づけを使って)起動を命令されると、新しい桐8は実際に立ち上がることなく、 既に起動している桐8にファイルを渡して、新しいプロセスは直ちに終了して しまうのです。 これは、次の事を意味します。 この LoadDB.Exe を使って、桐8のシステムを2つ同時に立ち上げようと思っ ても、2つ目の起動が発生すると、そのまま2つ目の LoadDB.Exe に戻ってし まう( LoadDB.Exe は自分が起動したプロセスは終了したと認識するから)。 その状態で、1つ目の桐システムを2つ目の桐システムが(中途半端な形で) 乗っ取ってしまう。 この状態の2つ目のシステムは既に LoadDB.Exe (2つめの)の管理下を離れ ているので、「閉じる」ボタンの無効化も反映されない(1つ目の桐システム が LoadDB.Exe を利用して起動されていて、「閉じる」ボタンが無効化されて いれば、話は別)。 この件に関しては、次のような回避方法があります。 桐8のインストールパスの Help\KIRI.TXT の中に起動時オプションの説明が あるのですが、 -AO <ファイル名> -O <ファイル名>などで桐を起動した場合、既に桐が起動されていれば 新しい桐のインスタンスは作成せずに既に起動されている桐で処理されます。 別の桐のインスタンスを強制的に起動して処理させる時に使用します。 これです。 これは即ち、現在 桐8の拡張子関連づけにおいて、 WFM (フォーム)や CMD (一括処理)の「開く(Open)」 の関連づけが "……\KIRI8.EXE" /O "%1" と 記述してあるはずなのを 「 /O 」 の部分を 「 /AO 」と書き換えてやれば、 桐8システムを2つ同時に起動・稼働させることが可能になるという意味です。 ※ ただし、これには弊害?(正確には、桐8の挙動変更)があります。 通常の時に上記変更を行なった拡張子のファイルを(エクスプローラーや その他の方法で)開くと、最初は桐8が起動して開くが、既に桐8が起動 している場合は、既存の桐がそのファイルを追加で開くという現在の仕様 なのですが、こちらが任意設定したとおり、その度に桐8がもう1つ立ち 上がるというような挙動に変化するのです。 ただし、私自身は別の理由で、同時に桐8を幾つも立ち上げる様な真似を 頻繁に行なっていますから、そのことが何かの悪影響を与えるとは思えま せん。 しかし、 OS が Win 9x 系の場合は、リソース面その他の関係で、これで はとても不安定になってしまうことが予想されます。 このような真似をするには Win NT 系 (2000,Xp) を使うべきなのでしょう。 ●バックアップ動作について 基本的に、 Xcopy コマンドを利用してシステムの存在するフォルダ全体 を別ドライブに丸ごとコピーしてしまうものです(圧縮などは行ないま せん)。 どうしても充分な容量の別ドライブを用意できなければ、同一ドライブ にバックアップすることも可能です。 タイムスタンプ比較で「より」新しいファイルのみをコピーするのか、 日時に関係なく全ファイルを強制上書きするかの選択もできるように なりました(日時更新ならば、バックアップ先が変更されない場合は、 2度目からはバックアップ所用時間が短縮されます)。 オプションとして次の2つの選択肢があります。 1.日付基準や曜日規準による多重化をするか(デフォルトは「しない」) バックアップ先フォルダ名は、 <選択したドライブ> :\\ <システムフォルダ名からドライブ名を除いたもの> を連結したものです。 例.システムが「C:\Test」で選択が「D:」なら バックアップ先は「D:\BackUp\Test」がデフォルトです。 ※ のデフォルトは "BackUp" です。 日付基準による多重化をすれば、最後に「今日」を表わす文字列が 付きます。 例.上記例で「今日」が 2000/2/15. なら バックアップ先は「D:\BackUp\Test\00_02_15」となります。 (「地域のプロパティ」での日付形式(短い形式)に対応 区切り文字は「/」に決め打ちしていますが) 曜日基準による多重化をすれば、最後に「曜日」を表わす文字列が 付きます。 例.上記例で「今日」が 水曜日 なら バックアップ先は「D:\BackUp\Test\(4)_水曜」となります。 ※ 曜日の前の (4) は曜日順に整列できるように、(1)_日曜〜 (7)_土曜 の順で割り振ったものです。 これにより「世代管理」が可能になります。 2.サブフォルダもバックアップ対象にするか(デフォルトは「する」) データベースシステムの構成上サブフォルダにもデータが枝分かれ している、または関連資料などをサブフォルダに収蔵している場合 などに、これらも含めたバックアップを取れます。 ところで、MS-Aceess の *.Mdb ファイルを指定してある場合、「動作の 説明」で述べている点で察しがつくと思いますが、 *.Mdb と *.Mdb.Tmp と *.Mdb.Bak の3種類がバックアップされます。 この時点では *.Mdb.Tmp は1世代前で、*.Mdb.Bak は2世代前になりま すよね。 バックアップ先の残り容量が元の *.Mdb ファイルの3倍必要な点に注意。 ●懸案事項 ・ Xcopy を使わないでバックアップできるようにしたい( OS 毎に動作 内容・パラメーターが異なるのには、特に困る)。 できれば、「圧縮してバックアップ」も取り入れたい。 ・このローダー自体にパスワード認証機能を盛り込みたい。 ●最後に この「データベース多重化システム(データベースシステムローダー)」 は Ogo の著作物です。 Ogo は これのバグ訂正やバージョンアップの義務を一切負いません。 ユーザーサポートの義務も負いません。 このシステムを使った結果、生じた損害に関しては Ogo は一切関知しま せん。 ご自分の責任とリスクにおいてお使い下さい。 このシステムを使った結果、生じた喜びや感謝や感想は、動作環境と共に Ogo に伝えてもらえれば、Ogo は大喜びするでしょう。(^_^) このシステムを、自分のシステムに組み込んだり貴作のデータベースシス テム配布に利用するなどの応用はどうぞ好き勝手にして下さい(商業用途 のデータベースシステムでもOKです)。 私には連絡の必要は一切ありません。 貴作のデータベースシステムに組み込んで一緒に配布する場合には、でき れば説明文の端にでも「ローダー/バックアップ部分の著作権は Ogo に ある」旨を書いていただければ有り難いです。 貴作のデータベースシステムに組み込むわけではなく、このシステム単体 を配布するなら、この説明書も添付して下さい。 不特定多数の方への配布でなければ、再譲渡は自由です。 物好きにも転載等をしたい人がいれば、事前に Ogo まで E-Mail でご連絡 下さい。 Ogo mailto:ogou@icity.or.jp URL=http://www.icity.or.jp/usr/ogou/ ----------------------------------------------------------------------- 謝辞 「閉じる」ボタンの無効化動作 を 桐ユーザーに提供した先駆者で、この LoadDB.Exe への取り込みに協力いただいた hidetake さんと T.Samura さん にお礼を申し上げます。 桐ならまだしも、ソースを公開する勇気は、私にはない。 (^^;; 蛇足 これは「フリーソフトウェア」です。代金支払いの義務は全くありません。 ただしよっぽど気にいった方がいらしたら、寄付金をいただくのにやぶさか ではありません。 その際には下記まで送金下さい。領収証が必要なら送付も可です。 もちろん金額に要望なぞはありません。 郵便振り替え 口座番号: 01320-2-15048 加入者名: Office Ogo