FDに格納するには?

解決


ボリュ!  2001-12-20 16:43:17  No: 384  IP: [192.*.*.*]

CSV形式でFDに格納するPGを作成しているのですが、FDの空領域がなくなって
しまい”I/Oエラー”でコケてしまいます。
”2枚目をセットして下さい”のようなメッセージを出すにはどのようにすればいいですか?

編集 削除
にしの  2001-12-20 16:52:39  No: 385  IP: [192.*.*.*]

CSVファイルがどこで切れてもよいのなら、ファイルのオープン、書き込みをtry exceptでくくって、
例外が発生したら「新しいディスクをセットしてください」と表示して復帰するようにすればできそうです。
CSVファイルのレコードに意味がある場合、さきにディスク空き容量を調べてそれから書き込めばよいです。

ディスク空き容量を調べるには、DiskFree関数を使用します。VCLのヘルプを見てください。

編集 削除
ボリュ!  2001-12-21 13:21:11  No: 386  IP: [192.*.*.*]

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);

にしの様
お返事ありがとうございます。
例外処理がうまくいきません。
上記のような処理なのですが、
何かアドバイスがあったら教えてください。
初歩的な質問で申し訳ありませんが、
よろしくお願いします。

編集 削除
にしの  2001-12-21 15:42:22  No: 387  IP: [192.*.*.*]

こんな感じでしょうか。
すでに開いている場合のチェックがわからなかったので、とりあえず開けたら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);

編集 削除
ボリュ!  2001-12-26 13:09:30  No: 388  IP: [192.*.*.*]

たびたびのお返事ありがとうございます。
にしの様のお陰で無事作成出来ました。
未熟者なので、また何か分からない事がありましたら
質問させていただきます。
本当にありがとうございました。

編集 削除