Андрей Панько. Заметки про Dynamics NAV (http://apanko.ru/index.php)
-   Dynamics NAV (Navision) (http://apanko.ru/forumdisplay.php?f=2)
-   -   Копирование Stream (http://apanko.ru/showthread.php?t=9436)

apanko 22.11.2008 20:25

Копирование Stream
 
Чего-то захотелось скопировать BLOB, точнее из одной карточки товара перенести рисунок в другую.
Можно было бы и через файл, но это не по феншую.

Сделал так:

Код:


rItemFrom.GET('70102');
rItemFrom.CALCFIELDS(Picture);
rItemFrom.Picture.CREATEINSTREAM(iStream);
rItemTo.GET('1200');
rItemTo.Picture.CREATEOUTSTREAM(oStream);
WHILE NOT iStream.EOS DO BEGIN
  iStream.READ(txt100);
  oStream.WRITE(txt100);
END;
rItemTo.MODIFY;


Alterant 23.11.2008 11:43

По феншую вот так:
Код:

FromRec.GET('1');
FromRec.CALCFIELDS(Picture);
ToRec.GET('4');
ToRec.Picture := FromRec.Picture;
ToRec.MODIFY;

:)

Da_Neal 23.11.2008 17:26

Честно говоря не ожидал от тебя такого Андрей :)

apanko 24.11.2008 10:19

Вот для этого и написал. :)

На самом деле хотел положить поле типа блоб в файл, но используя потоки, а не функцию export (в результате пришлось все равно использовать export).

Или из файла, в bigstring. (т.е. акцент на InStream и OutStream).


За комментарии - Спасибо!

apanko 24.11.2008 12:26

Продожим тему, за которую меня уже трижды пропозорили :) (и возможно еще повторят).

Сам виноват - и три минуты не думал о практической ценности приведенного кода.

Пример, опять же будет на базе товаров. Исключительно по причине того, что результат смотреть удобнее. Как уже было указано выше, копировать рисунки между товарами нужно другим способом.


Код:


rItemFrom.get('1000');
rItemFrom.CALCFIELDS(Picture);
rItemFrom.Picture.CREATEINSTREAM(iStream);
btext.READ(iStream);
 
rItemTo.get('1110');
rItemTo.Picture.CREATEOUTSTREAM(oStream);
btext.WRITE(oStream);
rItemTo.MODIFY;


apanko 08.12.2008 14:22

Вот! Вот то, что я искал:

встроенная функция [OK :=] COPYSTREAM(OutStream, InStream)

Код:


rItemFrom.get('1000');
rItemFrom.CALCFIELDS(Picture);
rItemFrom.Picture.CREATEINSTREAM(iStream);
 
rItemTo.get('1110');
rItemTo.Picture.CREATEOUTSTREAM(oStream);
COPYSTREAM(oStream,iStream);
rItemTo.MODIFY;


PS. Это теоретическое исследование, оно не имеет ничего общего с реальной потребностью в копировании картинок в карточках товаров.

apanko 15.01.2009 11:07

На данную тему написал целую статью.
Использование потоков InStream и OutStream

Спасибо Alterant, Da_Neal и Fordewind. Без ваших комментариев этого бы не произошло ;)


Часовой пояс GMT +4, время: 20:48.

vBulletin v3.5.4, Copyright ©2000-2019, Jelsoft Enterprises Ltd.
Русский перевод: zCarot, Vovan & Co
Права на все материалы, опубликованные на блогофоруме принадлежат Андрею Панько, если в самом материале не указано иное.