All Forums
 Категория Visio
 Форум Вопросы и ответы
 Visio и MS SQL Server
Author Previous Topic Topic Next Topic  

Arsenyi

Rwanda
4 Posts

Posted - 05/10/2005 :  17:38:18
Подскажите, пожалуйста, можно ли документ Visio сохранить в MS SQL Server в поле Image и обратно считать его?

TuzhibaevTA

Russia
85 Posts

Posted - 05/12/2005 :  06:33:28
Конечно можно! Но это будет уже извращенство :)
документ Visio это xml-подобный файл, делайте выводы сами...

Тужибаев Тимур
Go to Top of Page

TuzhibaevTA

Russia
85 Posts

Posted - 05/12/2005 :  07:37:30
quote:
Originally posted by TuzhibaevTA

Конечно можно! Но это будет уже извращенство :)
документ Visio это xml-подобный файл, делайте выводы сами...

Тужибаев Тимур


Пардон, забыл сказать, xml-файл получиться при условии если будет выставлен соот отрибут в options/Save/Save Visio files as

Тужибаев Тимур
Go to Top of Page

algama

2 Posts

Posted - 11/28/2005 :  13:14:02
quote:
Originally posted by TuzhibaevTA

Конечно можно! Но это будет уже извращенство :)
документ Visio это xml-подобный файл, делайте выводы сами...

Тужибаев Тимур


А можно подробностей. я так и не смог найти метода позволяющего загрузить документ из строки.
Go to Top of Page

Voland

91 Posts

Posted - 11/29/2005 :  11:13:04
Можно и сохранить и считать, для этого поле должно быть BLOB.
Я делаю это в делфи так:
СОХРАНЯЮ

Len:=SCHEME.Size;
index:=0;
while index<Len do begin
if (Len-index) >= BlockSize then Size:=BlockSize
else Size:=Len-index;

buf:=AllocMem(Size);
SCHEME.ReadBuffer(buf^, Size);
CTLib.WriteText(buf,Len,Size);
freemem(Buf,Size);

index:=index+size;
end;

ЧИТАЮ
Тут сложнее, нужны 2 хранимых на сервере

while Total<Size do
begin
Count := min(Size-Total,32000);
with Query do begin
SQL.Text := Format('exec sp_meSchemePicDataBlock %d'+#13#10+',%d,'+#13#10+'%d', [SCHEME_CODE_NOW,Total,Count]);
Open;
(Fields[0] as TBlobField).SaveToStream(SCHEME);
end;
Total:=Total+Count;
end;

пишу и читаю блоками по 32000байта, т.к. больше не поддерживается...
Все это через временный файл потока SCHEME

Тексты хранимых, одна для получения размера поля, вторая для непосредственного чтения

if object_id("sp_meSchemePicDataLength") is not null drop proc sp_meSchemePicDataLength
go

create proc sp_meSchemePicDataLength(@scheme_id T_SMALLINT) as
begin
select datalength(SCHEME_DATA) as SIZE
from SCHEMES
where SCHEME_CODE=@scheme_id
end
go

if object_id("sp_meSchemePicDataBlock") is not null drop proc sp_meSchemePicDataBlock
go

create proc sp_meSchemePicDataBlock(@scheme_id T_SMALLINT,@idx int,@length int) as
declare @val varbinary(16)
begin
select @val = textptr(SCHEME_DATA)
from SCHEMES
where SCHEME_CODE=@scheme_id

readtext SCHEMES.SCHEME_DATA @val @idx @length
end





___ Кто ищет тот найдет __
Go to Top of Page
  Previous Topic Topic Next Topic  
Данный сайт является архивом форума visio.artberg.ru, который был закрыт в связи с переходом на новую платформу visio.getbb.ru
Все материалы доступны только для чтения! Если у вас появились вопросы, или вы хотите что-то обсудить, связанное с Visio, обращайтесь на новый форум!
Архив был создан благодаря совместным усилиям Генадия Туманова @Tumanov (visio.artberg.ru), Александра ака @Surrogate (visio.getbb.ru), и Николая Белых @nbelyh (unmanagedvisio.com)