CSV形式でFDに格納するPGを作成しているのですが、FDの空領域がなくなって
しまい”I/Oエラー”でコケてしまいます。
”2枚目をセットして下さい”のようなメッセージを出すにはどのようにすればいいですか?
CSVファイルがどこで切れてもよいのなら、ファイルのオープン、書き込みをtry exceptでくくって、
例外が発生したら「新しいディスクをセットしてください」と表示して復帰するようにすればできそうです。
CSVファイルのレコードに意味がある場合、さきにディスク空き容量を調べてそれから書き込めばよいです。
ディスク空き容量を調べるには、DiskFree関数を使用します。VCLのヘルプを見てください。
Repeat
try
Rec := RS1.Item(0,'出荷先NO')
+ K + RS1.Item(0,'出荷先住所')
+ K + RS1.Item(0,'出荷先名称カナ')
+ K + RS1.Item(0,'消費税');
Writeln(F, Rec);
inc(i);
except
on EConvertError do
begin
showmessage('いっぱい')
end
end
until RS1.QueryNext(0) = False;
CloseFile(F);
にしの様
お返事ありがとうございます。
例外処理がうまくいきません。
上記のような処理なのですが、
何かアドバイスがあったら教えてください。
初歩的な質問で申し訳ありませんが、
よろしくお願いします。
こんな感じでしょうか。
すでに開いている場合のチェックがわからなかったので、とりあえず開けたらtrue、閉じたらfalseにしてます。
var AlreadyFileOpen: boolean;
begin
AlreadyFileOpen := False;
Repeat
try
if not AlreadyFileOpen then AssignFile(F, FileName);
AlreadyFileOpen := True;
Rec := RS1.Item(0,'出荷先NO')
+ K + RS1.Item(0,'出荷先住所')
+ K + RS1.Item(0,'出荷先名称カナ')
+ K + RS1.Item(0,'消費税');
Writeln(F, Rec);
inc(i);
except
if AlreadyFileOpen then CloseFile(F);
AlreadyFileOpen := False;
if Application.MessageBox('ディスクを変えてください', PChar(Application.Title), MB_OKCANCEL) = ID_CANCEL then
break; // キャンセルなら中止
end;
if AlreadyFileOpen then CloseFile(F);
たびたびのお返事ありがとうございます。
にしの様のお陰で無事作成出来ました。
未熟者なので、また何か分からない事がありましたら
質問させていただきます。
本当にありがとうございました。
ツイート | ![]() |