過去の桐井戸端BBS (桐ver.8)
9915 一括処理でFDのファイルを開くとき,「バックアップ指定を解除しますか」で「いいえ」で処理停止 桐ギリス 2001/02/24-11:20
一括処理でFDのデータ処理を行っているとき,FDの容量が足りなくなり,「バックアップ指定を解除しますか」が出たときに
「いいえ」を指定すると,一括処理が停止してしまいます。
「はい」を指定すればよいのですが,多数の人に利用できるシステム(学校の成績処理)を開発しているので,
「いいえ」でも止まらないようにしたい。どうすればよいでしょうか?
9916 Re:一括処理でFDのファイルを開くとき,「バックアップ指定を解除しますか」で「いいえ」で処理停止 toshi-chan 2001/02/24-14:33
記事番号9915へのコメント
桐ギリスさん、こんにちは。
ご希望どおりにするのは無理ではないでしょうか。ご存じのこととは思いますが簡単に説明します。

バックアップ指定のある 表.tbl を開くと、その表のコピーが作成されます。
これは一時ファイル(テンポラリファイル)とよばれるもので、私たちはこちらの表にたいして操作を行っているのです。
破棄終了を行うと、この一時ファイルは破棄され、 表.tbl はそのまま残ります。
保存終了を行うと、一時ファイルが新しい 表.tbl となり、元の 表.tbl は 表.BAK となります。 
1つ前のファイルがバックアップファイルとして保存されるのはこのようなしくみによります。

バックアップ指定のない 表.tbl を開くと、表そのものに対して操作を行うことになります。
この場合保存終了のみ可能(破棄終了は不可能)となります。

桐ギリスさんが使用している表は1MB程度のサイズではないでしょうか。
FDの空き領域が少なくて、コピーを作成できないために桐がメッセージを発しているわけです。
「いいえ」を指定するということは、「バックアップを作成する」という意志表示をしていることになります。

解決策はハードディスクを使用することですね。
一時ファイルをハードディスクに作成するワザでもあれば話は別ですか。

9917 Re:一括処理でFDのファイルを開かない Ogo 2001/02/24-14:38
記事番号9915へのコメント

ワープロや表計算じゃあるまいし、FDのデータを直接開くのは殆ど御法度です。

これを行なうなら、FDのデータをローカルのHDにコピーした後に、
編集後のデータを最終的にFDに書き戻す処理にするべきです
(ローカルHDには *.TBL だけでなく *.BAK も残るので、
FDに書き戻した後で削除するのが一般的)。

- - -

ワープロや表計算はデータをオンメモリで扱います。
即ち、「開く」とはファイルを全てメモリに読み込むということなので、
事後に保存するまでは元々ファイルが存在したメディアにはアクセス不要で、
その間は元ファイルは閉じられています。

ところが、データベースは本来データをオフメモリで扱うのです
(でないと、何10〜何100MBの巨大なファイルを開くことはできないし、
たとえできたとしても「開く」だけで膨大な時間がかかります)。
即ち、ファイルを開きっ放しにしておいて、その場その場で必要な情報のみを
元メディアの中のファイル中から抜き出して処理をしてそのままファイルに書き込みます。

従って、データベースではファイルを開いてから閉じるまでは、
ずっとそのファイルを開きっ放しにしているわけで、随時データ
処理に必要なものを読み書きしているという概念になります。

喩えメディア容量が充分であっても、こんな用途にフロッピーやMO 等のメディアを使うのは全くお勧めできません
(信頼性を確保できないし、速度も遅くなる筈)。

蛇足ですが、データベースソフトのデータが壊れやすいのは、
正に「常時オープン」だからで、ワープロや表計算なら OS ハングアップによる
強制電源断でもメモリ上の編集中のデータが消えるだけでディスク上のファイルは閉じられている状態なのに対し、
データベースが開いたままのファイルは異常事態が起きた時には何が起きるか保証できないからです。

9921 Re:一括処理でFDのファイルを開かない 桐ギリス 2001/02/24-15:47
記事番号9917へのコメント
>ご指摘ありがとうございます。その点については十分検討させていただきたいと思います。

しかし,私の質問は一括処理の停止しない方法です。
フロッピーで処理できなくてもいいんです。一括処理が停止しない方法はないのでしょうか?

9922 Re:一括処理でFDのファイルを開かない Ogo 2001/02/24-15:49
記事番号9921へのコメント

>しかし,私の質問は一括処理の停止しない方法です。フロッピーで処理できなくて
>もいいんです。一括処理が停止しない方法はないのでしょうか?

だから。HDにコピーしてから開けば停止しないんだってば。

9924 Re:一括処理でFDのファイルを開くとき,「バックアップ指定を解除しますか」で「いいえ」で処理停止 【多遊】 2001/02/24-18:21
記事番号9915へのコメント
開かなくてもいいのでしたらFDの空き領域を調べる方法をご紹介いたします。

1.対象のファイルサイズを調べる
2.FDの空き容量を調べる
3.比較後判定処理を行う

まず空きファイルが小さい場合は無理でしょう
またファイルサイズと同じ程度の空きでは、並び替えなど行ったとき一時的にファイルが大きくなりますのでやはり無理でしょう。
作業内容にもよりますが、少なくとも3〜5倍分くらいが必要かと思います)

FDの空きサイズは、#DISKFREE( str )
使用ファイルのサイズは、#FSIZE( file )これに5倍くらいの
空きが有るかをチェックするルーチンを組み込めば、
一括処理はとまらないと思います

参考までにお試し下さい

※5倍の意味・・・作業内容で異なります。ご自分で確認下さい

9925 Re:一括処理でFDのファイルを開くとき,「バックアップ指定を解除しますか」で「いいえ」で処理停止 toshi-chan 2001/02/24-19:16
記事番号9920へのコメント
>フロッピーで処理できなくてもいいんです。一括処理が停止しなければ。
>一括処理が停止しない方法はないでしょうか?

私は知りません。
「表」コマンドの仕様がそうなっているから、としか言いようがないのでは。
「いいえ」を押したとたんに一括処理の実行を中止するダイアログが出てしまうのですからどうしようもないですね。

仮にハードディスク上で実行したとしても、空き容量が少なければ同じことが起こります。
初心者の方々はハードディスクを満タンにしてしまうこともありますから。

「表」コマンドのパラメータには 終了状態 がありますから、ここに返された値によってケース処理を行うことが考えられます。
しかし、「バックアップ指定を解除しますか」が出たときに「いいえ」を押すと、「表」コマンドの実行を中止するようですので
終了状態 に値が代入されません。この方法も使えません。

どうしても気になるのなら、「バックアップ指定を解除しますか」のダイアログが出ないようなシステム設計をすることになると思います。
#DISKSIZE( str )や#DISKFREE( str )を使って表のコピーが作成できるかどうかを調べて、
「表」コマンドを実行するか否かのケース処理へ進むことです。

>「はい」を指定すればよいのですが,多数の人に利用できるシステム(学校の成
>績処理)を開発しているので,「いいえ」でも止まらないようにしたい。どうすれ
>ばよいでしょうか?

「はい」を指定すればいいのなら、初めから表のバックアップ指定を解除しておくのも一つの方法です。
また、初心者の方々にもパソコンを使うときにはハードディスクに十分な空き容量を確保するように説明するのもよいと思います。
桐のリファレンスマニュアルにも類似のことが書いてあります。

9927 ありがとうございました。 桐ギリス 2001/02/25-00:08
記事番号9915へのコメント
ありがとうございました。
「いいえ」で処理停止は避けられないようなので,アドバイスいただいた方法でメッセージが出ないように工夫したいと思います。

9947 記録容量不足での処理停止は安全装置の作動です 佐田 守弘 2001/02/25-23:36
記事番号9915へのコメント
桐ギリスさん
既に解決している事かと思いますが、重要な事なので、私からも多少補足させて頂きます。
まず大筋で言えば、toshi-chanさん、Ogoさん、【多遊】さんがコメントされている通りです。
●桐のデータの記録メディア
これについてはOgoさんがはっきり言われている通り、信頼できるメディアを選ぶ事が重要です。
そしてここで「信頼できるメディア」とは、物理的に信頼性が高いメディアという以外に、
「記録途中で誤ってメディアを交換されるおそれのないメディア」という意味も含みます。
なぜなら、データベースは記録ファイルをオープン状態で読み書きするからです。
オープン中のファイルがある状態で、メディアが交換された場合、何が起こるかは言うまでもないでしょうね。
かつて桐ver.3かそれ以前の頃は、FDでデータベースのデータを記録していた事もなかった訳ではないので、
絶対に使えないとは申しません。
ただし、様々なトラブルの要因になる事も事実です。
多数の人がデータを共有する場合、ネットワークを使うのが現在では常識的な方法になっております。
もしどうしてもFDなどでデータ交換をせざるを得ないのであれば、
・起動時にFDからHDにデータをコピーする。
・データ操作はあくまでもHD上で行う。
・終わったらその結果をFDに書き戻す
といった事をすべきでしょうね。

●桐のバックアップの仕組み
桐の表データの扱いには、バックアップありとなしの2つのモードがあります。
これは単にバックアップを残すかどうかの問題ではなく、ファイルに対する本質的な違いがあります。
「バックアップなし」は、元来のデータベースの動作モードです。
データの編集は表ファイルに対して直接行われます。
終了時に短時間でファイルを閉じられますが、記録する票が常にオープンされていますから、
万一の場合に表が破損する事も含めて、様々な障害に曝されるおそれがあります。
「バックアップあり」では、表データをテンポラリファイルに逐次コピーしながら、こちらで編集作業をします。
そして終了時に元の表ファイルはバックアップファイルにリネームし、テンポラリファイルを表ファイルに書き出します。
このため、記録メディアには表の他、バックアップ、テンポラリの3つのファイルが存在する事になります。
つまりメディアの容量の3分の1が扱えるファイルサイズの上限になります。
バックアップありの場合、元の表ファイルは開かれていても更新はされていないので、
トラブル時に編集前の表が救われる可能性が高いのが特徴です。編集途中のテンポラリファイルは、
仮に残っていても、表としては完成していないので使えません。

●バックアップの解除
質問の主旨では、
「バックアップ指定を解除しますか」が出たときに「いいえ」を指定しても、
一括処理が止まらないようにしたいとの事ですが、これは理論的に不可能です。
なぜかと言えば、編集用のテンポラリファイルを作成する容量が足りなくて、編集を続行する事が困難な状態になっているからです。
桐としては、記録不能のためのデータの喪失を未然に防ぐための緊急手段として、一括処理を含め全ての処理が強制終了させられるためです。
これは言うなれば、電力の使い過ぎでブレーカーが落ちるのと同じで、安全装置の作動です。
質問の主旨では、「一括処理が停止しない方法はないのでしょうか」となっておりますが、
緊急事態による強制的な動作の遮断ですから、これを回避する方法はありません。

●どの様に対策すべきか
対策としては、他の方々が書かれている様に、予めディスクの空き容量をチェックしてから
表を開く様に一括処理を組むべきだと思います。

佐田守弘(KS-00119)

戻る