Хорошей практикой является оборачивание объектов в блок try...finally, дабы гарантированно освободить память, занимаемую объектом в случае исключительной ситуации (exception) или выхода из процедуры в теле ее цикла.
Код:
FS:=TFileStream.Create( 'File.doc', fmCreate or fmOpenWrite);
try
while not ....
finally
FS.Free;
end;
Далее: можно обойтись без множественного приведения (TADOBlobStream).
Если Вы используете визуальный компонент набора данных (TADODataSet или TADOuery), можно просто писать
TBlobField(DataSet1.FieldByName('myblobdata')).Sav eToStream(FS);
или
DataSet1MyBlobData.SaveToStream(FS);
Второй вариант пройдет, если поля набора данных созданы в списке (двойной щелчок по датасету - add all fields), и поле MyBlobData создано как BLOB.
Далее. По поводу того, чтобы писать все файлы из данных в один: в случае RTF это невозможно, т.к. RTF - это не обычный текст, который можно дописывать друг за другом, а текст с тэгами, указывающими на признаки форматирования текста, и просто объединение не даст результат. Надо писать парсер RTF, имхо.
Но в данной теме глубоко не копал, поэтому не претеную на абсолютизм
