Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2003.01.20;
Скачать: [xml.tar.bz2];

Вниз

Здесь есть настоящие мастера??? Если да, то вопрос именно для них   Найти похожие ветки 

 
Lonely_F   (2002-12-24 06:03) [0]

На этот вопрос вот уже больше месяца никто не может дать вразумительный ответ. Обидно, а ведь форум вроде как мастеров.
Помогите, плиз!
Моя задача - вытащить из BLOB поля первой записи таблицы его содержимое и положить в OLE-контейнер:

var
S : TBlobStream;
begin
Table1.Active:=true;
Table1.First;
s:=TBlobStream.Create(Table1fblob, bmread);
oc.LoadFromStream(s);
Table1.Active:=false;
oc.Free;
end;

На данную процедуру выдается ошибка "Invalid stream format". Ошибка возникает после того, как данные потока s загружаются в контейнер oc.
Где тут собака зарыта? Спасибо.


 
BorisUK   (2002-12-24 06:48) [1]

Ну да... не нравится ему этот формат для оле контейнера...
Может здесь оле контейнер не по назначению используется?
Нельзя ли пояснить какова цель данной процедуры.
Возможно окажется благоразумнее решить задачу другим способом - опиши её (задачу)...


 
Eugene_S   (2002-12-24 08:56) [2]

У меня схожая проблема, но пояснения действительно треба. Например, не ясно почему из первой записи? И нужен ли для этого OLE-container. Короче, для чего необходимо использовать выходные данные?


 
Reindeer Moss Eater   (2002-12-24 09:13) [3]

При использовании LoadFromFile контейнер узнает о формате объекта из расширения файла.
При использовании LoadFromStream он ничего не знает о формате загружаемого объета.


 
ЮЮ   (2002-12-24 09:18) [4]

>При использовании LoadFromStream он ничего не знает о формате загружаемого объета.

И для чего же у него тогда этот метод? :-)

property OldStreamFormat: Boolean;
Indicates whether the OLE object is loaded and saved using the Delphi format.

Set OldStreamFormat to True to read OLE objects that were saved to file using Delphi or to save OLE objects that will be used by Delphi. If OldStreamFormat is False (the default), the LoadFromFile, LoadFromStream, SaveToFile, and SaveToStream methods use the newer format that contains extra header information. The extra header information is used to validate a file or stream. This property is provided for backward compatibility only.


 
Reindeer Moss Eater   (2002-12-24 09:33) [5]

И для чего же у него тогда этот метод? :-)
Подозреваю, что для полиморфизма.

OldStreamFormat помогает, если в Blob поле писали из Олеконтейнера.


 
ЮЮ   (2002-12-24 09:35) [6]

>OldStreamFormat помогает, если в Blob поле писали из Олеконтейнера.

Да, но если писали не оттуда, то уже ничего не поможет :-))


 
roottim   (2002-12-24 10:58) [7]

вариант для проверки...

var
S : TStream;
begin
Table1.Active:=true;
Table1.First;
try
s:= TMemoryStream.Create;
(Table1.FieldByName("my_blob_field") as TBlobField).SaveToStream(s);
s.Position := 0;
oc.LoadFromStream(s); // oc - это я так понимаю OLE CONTAINER
finally
Table1.Active:=false;
s.Free;
end;
end;


 
BorisUK   (2002-12-24 11:36) [8]

Старый пример
<< s:=TBlobStream.Create(Table1fblob, bmread);
<< oc.LoadFromStream(s);
<< Table1.Active:=false;
<< oc.Free;
Загрузил и .Free ????


 
ЮЮ   (2002-12-24 11:40) [9]

Бей своих, что чужие боялись :-) Это, наверное, вместо s.Free;


 
Lonely_F   (2002-12-25 20:38) [10]

2 roottim: Спасибо за пример, но, увы, он не сработал. Та же ошибка (об инвалидности формата) вываливается при попытке загрузки потока в контейнер.

2 BorisUK и Eugene_S: здесь я привел пример обычного позиционирования на запись и для упрощения спозиционировал все на первую в таблице. А вся задача у меня такова:
Есть база данных (она уже действует и имеет порядка 10000 записей) в которой в BLOB поле находятся схемы в формате Xara X. Сейчас у меня обработчик для данной базы написан в Access 2000. В Access есть форма, содержащая различные поля для редактированя/дополнения и т.д. В том числе есть ole-поле, через которое я получаю доступ к содержимому BLOB-поля для просмотра и редактирования. Хотелось бы "слезть" с Access-а и сделать нечто подобное на Delphi. А вот с контейнером косяки пошли.


 
koks   (2002-12-26 11:43) [11]

Не смогу подсказать точно, но я слышал что в Delphi 5.0 с этими контейнерами какая-то замарочка. в том смысле что они могут нормально работать там, где теоретически работать не должны.... и наоборот.
Проблема решена в Delphi 6.0
Но это - только то что я слышал... Своим опытом поделиться не могу.....
Но в данной ситуации я бы попытался отойти от OLE-контейнера...


 
Johnmen   (2002-12-26 12:01) [12]

Ну что же такие мучения ?

var S: TStream;
...
S:=Table1.CreateBlobStream(Table1BLOBFIELD,bmRead);
try
OleContainer1.LoadFromStream(S)
finally
S.Free
end;



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2003.01.20;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.01 c
4-62897
solo
2002-12-03 01:29
2003.01.20
Cписок зарегистрированных в системе расширений файлов


4-62920
_Ed_
2002-12-04 06:44
2003.01.20
ExtractAssociatedIcon под XP


14-62800
Cr@sh
2002-12-31 20:36
2003.01.20
Дед Мороз, подари мне безглючную жизнь %)


4-62904
karimiy
2002-12-03 13:31
2003.01.20
where


14-62795
The_Vizit0r
2002-12-31 14:31
2003.01.20
Вы чё ребята





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский