11.09.2009, 17:36 | #1 |
Участник
|
Kак cлить содержимое нескольких BLOB-полей в один файл?
Есть следующая проблема: в таблице содержатся в BLOB-полях .rtf-документы (.rtf из-за форматирования курсивом, жирн. шрифт итд.), т.е.: 1 запись Code1 Description BLOB 2 запись Code2 Description BLOB 3 запись Code3 Description BLOB Задача: пройтись по записям и записать текст навижена (Code+Description) и содержимое BLOB-полей всех записей в один .rtf-файл да так, чтобы форматирование сохранилось, т.е. если открыть потом требуемый .rtf файл с WordPad или WinWord , то формат должен сохранятся. Пробовал через BLOB-поле.EXPORT(filename), но в этом случае файл всякий раз переписывается последующей записью, т.к. перед каждым экспортом нужно закрывать файл. Т.е. надо что-то вроде file.open() file.write(содержимое BLOB'a) file.write(содержимое BLOB'a) file.write(содержимое BLOB'a) file.close. Есть ли у кого-нибудь идеи, как можно реализовать? |
|
12.09.2009, 13:19 | #2 |
Участник
|
Вот имеется следующий код, который проходится по записям с BLOB-полями и который должен по идее дописывать в файл содержимое очередного BLOB-поля.
Код: bigfilename := 'c:\Temp\test10.rtf'; IF EXISTS(bigfilename) THEN ERASE(bigfilename); BigFile.WRITEMODE(TRUE); BigFile.TEXTMODE(TRUE); BigFile.CREATE(bigfilename); BigFile.OPEN(bigfilename); IF Archiv.FINDSET THEN BEGIN REPEAT // begin writing of Navision-Text BigFile.SEEK(Position); BigFile.WRITE(Archiv.Description); Position := BigFile.POS; // end writing of Navision-Text Archiv.CALCFIELDS(Attachment); IF Archiv.Attachment.HASVALUE THEN BEGIN Archiv.Attachment.CREATEINSTREAM(InStreamBLOB); // begin writing of .rtf file from BLOB REPEAT InStreamBLOB.READTEXT(CurrentLine); BigFile.SEEK(Position); BigFile.WRITE(CurrentLine); Position := BigFile.POS; UNTIL InStreamBLOB.EOS; // end writing of .rtf file from BLOB END; UNTIL Archiv.NEXT = 0; END; Проблема: содержимое BLOB'a представляется в виде текста обрамлённым всей форматирующей абракадаброй в открытом тексте в несколько сот строк (color,fonts, Тimes New Roman... ) Код: {\rtf1\adeflang1025\ansi\ansicpg1252\uc1\adeff31507\deff0\stshfdbch31506\stshfloch31506\stshfhich31506\stshfbi31507\deflang1031\deflangfe1031\themelang1031\themelangfe0\themelangcs0{\fonttbl{\f0\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f34\fbidi \froman\fcharset1\fprq2{\*\panose 02040503050406030204}Cambria Math;} {\f37\fbidi \fswiss\fcharset0\fprq2{\*\ Если писать в файл с TEXTMODE(FALSE) то дело ещё хуже, форматирование представляется квадратиками. Если выполнять только код для записи BLOB'ов, то записывается в файл почему-то только BLOB самой первой записи из таблицы, НО отображается в файле корректно. Кто знает, в чём проблема? |
|