AXForum  
Вернуться   AXForum > Microsoft Dynamics NAV > NAV: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 11.09.2009, 17:36   #1  
alexb_imported is offline
alexb_imported
Участник
 
256 / 12 (1) ++
Регистрация: 25.08.2006
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  
alexb_imported is offline
alexb_imported
Участник
 
256 / 12 (1) ++
Регистрация: 25.08.2006
Вот имеется следующий код, который проходится по записям с 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;
текст из навижена (Description) отображается в rtf файле нормально.
Проблема: содержимое 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 самой первой записи из таблицы, НО отображается в файле корректно.
Кто знает, в чём проблема?
 

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 01:05.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.