jeyseni's diary

「ジェイセニ」と呼んでください。批判ではなく提案をするのが生き甲斐です。

オフライン・データベースの同期の問題--レコードの「修正タイムスタンプ」がカギを握る

筆者は,個人でデータベースソフトの「ファイルメーカーPro」を使っている。サーバーは持っていない。オフィスのPC,自宅のデスクトップPC,そしてノートPCの3台に,それぞれプログラムソフトをインストールして使っている。

 サーバーを使うほどでもなく,かといってクライアントソフト側で可能な「インスタントWeb公開」なども使っていない。ブラウザーでデータの操作は可能だが,データベースそのものの修正などはできないからである。

 ファイルメーカーで厄介なのは,リレーショナルがフォルダ階層を含めてセットされることである。筆者の場合,複雑なリレーション構造を作り込んでしまったので,そこだけ持ち歩くわけにいかない。仕事で使うデータを基本的に1つのフォルダの下に全部入れて,そのフォルダごと持ち歩く必要がある。このために現在は,512GBのポータブルSSDでデータを持ち歩いている。変更や追加,削除などの差分情報だけを管理できる「FreeFileSync」というユーティリティーが欠かせない。それでも最大で15GBぐらいのデータをやり取りする必要があり,USB3.0で2分,2.1で10分近くかけて同期を図っている。本来は,SSDにファイルセキュリティを掛けるべきなのだが,以前,そのためにファイルの読み取りができなくなるという不具合を経験したことから,現在は持ち歩くカバンの金具にダイヤルロックチェーンで固定する方法を採用している。金具を外したり,ロックを破壊すればSSDを外すことは可能とは思われるが,多少なりとも抑止力にはなると思っている。

 さて,通常の書類の差分は,ファイル単位なので特に問題はないのだが,ファイルメーカーデータベースファイルの中で追加修正した場合は,ファイル名は同じなので,ファイルサイズと日付を頼りにして新旧を判定する必要がある。

 ところが差分コピーを都度おこなって同期をとっているのだが,たまに同期のし忘れをしたり,同期後にファイルを修正したり,さらにSSDを置き忘れて同期できなかったりすることがある。こうすると,2ヵ所で同じファイルを修正する可能性があり,一方の修正を反映できない不具合が生じた。

 最終的には,どちらかを使うことにし,もう一方のファイルは別途保管しておいて,不記載や修正前の情報が見つかったときに参照する,という方法しかないように思える。

 「ファイルメーカーのレコードの差分を調べる」というテーマで検索してみると,双方にリレーションを設定し,スクリプトで異なるレコードを抽出する方法が紹介されていた。たしかにこれもありなのだが,何しろデータベースファイル名が同じなので,リレーションを設定するときに間違えやすそうだった。

 そこで,外部に比較のためだけのデータベースファイルを作り,元となる2つのデータベースファイルとの間でそれぞれリレーショナルを張る方法を考えた。

 あらかじめ,データベースファイルには「シリアル番号」を入れたフィールドがあり,これでリレーションを取ることでデータを集められると考えた。各データベースには「DBID」という新しいフィールド(グローバル)を作り,「Office」,「SSD」という文字データを入れて,これもリレーションのキーとした。

 双方のデータベースファイルとリレーショナルでつながったところで,それぞれのフィールドの値を取得できる。今回は,「修正タイムスタンプ」のフィールドを取得し,あとはIF関数で比較した。同じぐらいのレコード数を作り,シリアル番号を入れて比較した。

 今回の経験から,シリアル番号の自動記入,作成日,修正日の自動記入のフィールドが必須であると,改めて感じた。参考にしていただけると幸いである。