Показать сообщение отдельно
Старый 07.12.2007, 01:57   #5
f0w14
Новичок
 
Аватар для f0w14
 
Пол:Мужской
Регистрация: 07.04.2007
Сообщений: 25
Репутация: 7
По умолчанию Ответ: Файловые потоки, нужна помощь...

Цитата:
Сообщение от CrVik Посмотреть сообщение
Да вроде все я разобрался как сделать, вот код:
Код:
dm.ADOTable.First;
FS:=TFileStream.Create( 'File.doc', fmCreate);
while not dm.ADOTable.Eof do
  begin
    BlobStream := TADOBlobStream.Create(TBlobField(dm.ADOTable.FieldByName('RTFText')), bmRead);
    BlobStream.Seek(0, soFromBeginning);
    FS.Seek(0, soFromEnd);
    FS.WriteBuffer(BlobStream.Memory^, BlobStream.Size);
FS.WriteBuffer(Buf[1], Length(Buf));
    dm.ADOTable.Next;
  end;
Вообщем нужно наверное как то подругому сохранять в файл, наверное придеться пробывать через OLE, вот только не знаю останется ли форматирование текста как изначально в набрано в RichEdit?

Хорошей практикой является оборачивание объектов в блок 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, имхо.
Но в данной теме глубоко не копал, поэтому не претеную на абсолютизм
f0w14 вне форума
 
Ответить с цитированием Вверх
 
Время генерации страницы 0.02806 секунды с 10 запросами