Err := False; Transaction.StartTransaction (snapshort) try Tут идет выборка данных для репликации из базы на основании лог-таблицы и проставление в ней номера пакета, в который эти данные попадают. Запись выбранных данных в cds и сохранение на диск. Упаковка полученных файлов в zip и удаление *.cds. except Err := True; end;If (not Err) and (FileSize(FileNm) > 0) then Transaction.Commit else begin Transaction.Rollback; if FileExists(FileNm) then DeleteFile(FileNm); end;
Я главное не врубаюсь, при каких условиях может закоммитится транзакция и файл нулевой длины оказаться. Ну вот даже если по памяти чего-то страшное случилось и хоть и была ошибка, try...except обработать ее не смог и программа умерла. Как же тогда транзакция закоммитилась? Такое впечатление, что win говорит программе, что она файл успешно записала, а он пока еще в кэше болтается. И размер нормальный программе возвращается. А потом, когда программа завершилась, при сбросе файла из кэша на диск происходит какой-то сбой и файл записывается нулевой длины. Может такое быть?
With b/r. Gleb.

