![]() |
|
| Правила Форума редакция от 22.06.2020 |
|
|||||||
|
|
Окажите посильную поддержку, мы очень надеемся на вас. Реквизиты для переводов ниже. |
|
![]() |
|
|
Опции темы | Опции просмотра |
Language
|
|
|
#1
|
|
Новичок
Пол:
Регистрация: 12.10.2007
Сообщений: 15
Репутация: 10
|
Мне нужно из таблицы, в которой есть BLOB поле, в котором записан RTF текст, положить данные в файл (*.doc, *.rtf). После долгих попыток что ли бо такое сделать, получилось следующее:
Код:
var FS: TFileStream;
BlobStream: TADOBlobStream;
i:Integer;
begin
dm.ADOTable.First;
i:=0;
while not dm.ADOTable.Eof do
begin
FS:=TFileStream.Create( 'File'+ IntToStr(i) + '.doc', fmCreate);
BlobStream := TADOBlobStream.Create(TBlobField(dm.ADOTable.FieldByName('RTFText')), bmRead);
BlobStream.Seek(0, soFromBeginning);
FS.CopyFrom(BlobStream, BlobStream.Size);
inc(i);
dm.ADOTable.Next;
end;
![]() |
|
|
|
| Реклама: | Заходите на сайт MebelStol.ru: полки для книг - отличные цены и большой выбор! | прокат шатров москва премиальные | seagate exos x22 | Смесительный узел SURP 60-4,0 | мягкий пуфик |
|
|
#2
|
|
Неактивный пользователь
Пол:
Регистрация: 23.10.2007
Адрес: St.-Petersburg
Сообщений: 6
Репутация: 8
|
|
|
|
|
|
|
#3
|
|||||||||||||||||||||||
|
Новичок
Пол:
Регистрация: 12.10.2007
Сообщений: 15
Репутация: 10
|
Да вроде все я разобрался как сделать, вот код: Код:
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;
Код:
{\rtf1\ansi\ansicpg1251\deff0\deflang1049{\fonttbl{\f0\fnil\fcharset204 MS Sans Serif;}{\f1\fswiss\fcharset0 Tahoma;}{\f2\fnil MS Sans Serif;}}
{\colortbl ;\red0\green0\blue0;}
\viewkind4\uc1\pard\cf1\f0\fs24\'ee\'e1\'fa\'ff\'e2\'e0 2 \'e8\'e2\'e0\'ed\'ee\'e2\'e0\lang1033\f1 dgfg\lang1049\f2
\par }
{\rtf1\ansi\ansicpg1251\deff0\deflang1049{\fonttbl{\f0\fswiss\fcharset0 Tahoma;}{\f1\fnil MS Sans Serif;}}
{\colortbl ;\red255\green0\blue0;\red0\green0\blue0;}
\viewkind4\uc1\pard\cf1\lang1033\f0\fs24 werwe rwe rq rqwe rqwe rw r\cf2\lang1049\f1
\par }
Последний раз редактировалось CrVik; 23.10.2007 в 18:16.. |
|||||||||||||||||||||||
|
|
|
|
|
#4
|
|
Новичок
Пол:
Регистрация: 13.11.2007
Сообщений: 10
Репутация: 2
|
BlobStream := TADOBlobStream.Create(TBlobField(dm.ADOTable.Field ByName('RTFText')), bmRead);
BlobStream.Seek(0, soFromBeginning); FS.LoadFromStream(BlobStream); |
|
|
|
|
|
#5
|
|
Хорошей практикой является оборачивание объектов в блок try...finally, дабы гарантированно освободить память, занимаемую объектом в случае исключительной ситуации (exception) или выхода из процедуры в теле ее цикла. Код:
FS:=TFileStream.Create( 'File.doc', fmCreate or fmOpenWrite); try while not .... finally FS.Free; end; Если Вы используете визуальный компонент набора данных (TADODataSet или TADOuery), можно просто писать TBlobField(DataSet1.FieldByName('myblobdata')).Sav eToStream(FS); или DataSet1MyBlobData.SaveToStream(FS); Второй вариант пройдет, если поля набора данных созданы в списке (двойной щелчок по датасету - add all fields), и поле MyBlobData создано как BLOB. Далее. По поводу того, чтобы писать все файлы из данных в один: в случае RTF это невозможно, т.к. RTF - это не обычный текст, который можно дописывать друг за другом, а текст с тэгами, указывающими на признаки форматирования текста, и просто объединение не даст результат. Надо писать парсер RTF, имхо. Но в данной теме глубоко не копал, поэтому не претеную на абсолютизм ![]() |
|
|
|
|
|
|
#6
|
|
Неактивный пользователь
Регистрация: 05.07.2010
Сообщений: 6
Репутация: 0
|
Пиши в текст а затем в DOC
|
|
|
|
![]() |
| Опции темы | |
| Опции просмотра | |
Похожие темы
|
||||
| Тема | Автор | Раздел | Ответов | Последнее сообщение |
| Нужна помощь! | GgreenpowerP | Настройка интернета | 2 | 29.01.2009 08:40 |
| нужна помощь! | lar_gur | Помощь по играм | 1 | 18.12.2007 15:00 |
| Нужна помощь в ответе на вопрос, причем нужна сегодня(15 марта). | prosmith | Архив | 1 | 15.03.2007 20:57 |
|
|