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

Вниз

Оле объект и База данных   Найти похожие ветки 

 
niko4543   (2004-06-28 09:10) [0]

Здравствуйте.
Подскажите пожайлуста как можно сохранить в базу данных в блоб
поле ОЛЕ  объект, вернее в ОЛЕ загружен вордовский документ и его надо сохранить в базу в блоб поле минуя сохранение в файл. А сохранённые оле объекты как файл и подгруженные  в ОЛЕ контейнер я сохраняю таким образом:  

var
OLE : TOLEContainer;
TBS : TBlobStream;
begin
OLE:=FindComponent("OleContainer1") as TOLEContainer;
if Assigned(OLE) then
with OLE do begin
{добавляю в таблицу новую запись}
Table1.Insert;
{создаюм поток, связанный с BLOB полем}
TBS:=TBlobStream.Create(Table1.FieldByName("OLE") as
TBLOBField, bmReadWrite);
{сохраняем OLE-объект в поток}
SaveToStream(TBS as TStream);
{уничтожаю поток}
TBS.Free;
Exit;

кно это к сожелению не подходит к загруженному в в ОЛЕ контейнер документ Ворд.


 
Курдль ©   (2004-06-28 09:19) [1]


> OLE:=FindComponent("OleContainer1") as TOLEContainer;
> if Assigned(OLE) then

Интересная конструкция... А Вы что, не уверены, есть ли OleContainer1, или нет? Или у Вас склероз?


 
niko4543   (2004-06-28 09:25) [2]

Я уверены что OleContainer1 у меня есть просто раньше я проверял, так остаток кода. Но речь не об этом правельно. Если вы можете ответить на мой вопрос буду вам очень признателен.


 
Курдль ©   (2004-06-28 09:32) [3]


procedure TfrmEditTemplate.actOpenFileExecute(Sender: TObject);
var mstr: TMemoryStream;
begin
 inherited;
 if not OpenDialog1.Execute then exit;
 OleContainer1.CreateObjectFromFile(OpenDialog1.FileName, false);
 mstr := TMemoryStream.Create;
 try
   OleContainer1.SaveToStream(mstr);
   mstr.Seek(0, soFromBeginning);
   if not ( sdqTemplate.State in [dsInsert, dsEdit]) then  sdqTemplate.Edit;
   sdqTemplateTEM_DATA.LoadFromStream(mstr);
 finally
   FreeAndNil(mstr);
 end;
end;



 
niko4543   (2004-06-28 09:48) [4]

Спасибо за ответ.
Но немог бы ты объяснить код комментариями просто я хочу понять что как делать.


 
Курдль ©   (2004-06-28 09:55) [5]

Тебя должен интересовать код со строчки "...mstr := TMemoryStream.Create;" - создание потока.
Потом содержимое контейнера помещается в этот поток.
Далее - указатель потока выставляется на начало.
ДатаСэт (в моем случае TSDQuery) устанавливается в режим редактирования.
В BLOB-поле (sdqTemplateTEM_DATA) грузятся данные из потока.
Освобождается память, выделенная под поток.


 
niko4543   (2004-06-28 10:00) [6]

mstr.Seek(0, soFromBeginning);эту строчку я понял выставляется поток на начало.

if not ( sdqTemplate.State in [dsInsert, dsEdit]) then  sdqTemplate.Edit;
sdqTemplateTEM_DATA.LoadFromStream(mstr);
а вот с этим туго


 
niko4543   (2004-06-28 10:01) [7]

в частности что это: sdqTemplate.State
и это sdqTemplateTEM_DATA


 
Курдль ©   (2004-06-28 10:44) [8]


> niko4543   (28.06.04 10:01) [7]
> в частности что это: sdqTemplate.State
> и это sdqTemplateTEM_DATA

Хорошо. Я сёдня добрый...
DataSet1.State
DataSet1.FieldByName("TEM_DATA").LoadFromStream(mstr);


 
niko4543   (2004-06-28 10:56) [9]

Кстати пишет что: Undeclared identifier: "DataSet1". Что за хрень???


 
Курдль ©   (2004-06-28 10:58) [10]

Ну, крындец! Не настолько же я добрый!
Попробуй сделать FindComponent("DataSet1") по всем своим проектам! :(


 
niko4543   (2004-06-28 11:05) [11]

DataSource1 - есть
Table1 - есть
DataSet в DataSource1 может есчё компонент какой нибудь нужен??????


 
bushmen ©   (2004-06-28 11:25) [12]

>niko4543   (28.06.04 11:05) [11]

Как же ты с такими знаниями пишешь программу? :))


 
niko4543   (2004-06-28 12:17) [13]

Я не профессионал это во первых, а во вторых у меня долгое время небыло практики и в третьих я уже задолбался. Не подскажешь? :))


 
Курдль ©   (2004-06-28 12:19) [14]

Я подскажу. Возьми книжку про Делфи + ДБ и посвяти себя её чтению хоть на недельку. Потом мы будем говорить на одном языке.


 
niko4543   (2004-06-28 12:47) [15]

>>>Курдль
Я с удовольствием возбму книжку и почитаю но мне надо сегодня а под рукой нет книжки,а мне надо срочно. Объясни пожайлуста в чём я ошибся. Насколько я помню DataSet это свойство DataSource.
???????????????????????????????????????????????????????


 
Курдль ©   (2004-06-28 12:58) [16]

Сегодня не получится (во всяком случае - бесплатно).


 
niko4543   (2004-06-28 13:00) [17]

Смешно. Спасибо за ответы, большое спасибо.


 
niko4543   (2004-06-28 13:05) [18]

Во всяком случае я могу написать тебе на мыло?. Когда прочту книжку разумеется.


 
bushmen ©   (2004-06-28 13:09) [19]

>niko4543   (28.06.04 13:00) [17]

Во-первых, не надо обижаться. Раз ты пишешь приложение работы с базами данных, то ты ДОЛЖЕН использовать компоненты доступа к данным. Теперь понятнее стало?


 
niko4543   (2004-06-28 13:26) [20]

Нет невкоем случае, я необижаюсь.Я дейчтвительно благодарен вам за ответы (>>>>>>bushmen,Курдль). Просто я задолбался с этим приложением мне надо сегодня написать эту утилитку, но увы неполучается . А базу я связал как положено Table1 и DataSource1, ладно буду дальше разбераться сам, если что напишу.


 
Курдль ©   (2004-06-28 14:04) [21]

Я приветствую твое упорство, но без знаний того, что TDataSet - не просто св-во TDataSource, а базовый класс для большинства компонентов, работающих с наборами данных, написать утилитку будет проблематично. Я в [3] привел абсолютно исчерпывающий пример кода в полном соответствии с заданным вопросом. Извини, конечно, что не всю "утилитку" и не в твоих наименованиях. Так что прервал дискуссию я не из вредности, а потому, что предугадываю цепочку твоих дальнейших вопросов, которым не будет конца, пока "утилитка" не заработает.
Написать на мыло мне можно (для этого я его и оставил), но я не являюсь лучшим знатоком Делфей, так что лучше обращайся к коллективному разуму прямо на этот сайт.


 
bushmen ©   (2004-06-28 14:32) [22]

>niko4543   (28.06.04 13:26) [20]

Попробуй сам разобраться. Все лежит на поверхности. Если что-то не додумаешь, задавай вопросы.


 
niko4543   (2004-07-03 09:07) [23]

>>>>>>>> bushmen и КурдльПомогите мне разобраться где находится поток у DataSet.Если честно не врублюсь. Сколько всего перепробывал не получается.


> Попробуй сам разобраться. Все лежит на поверхности. Если
> что-то не додумаешь, задавай вопросы.


 
niko4543   (2004-07-03 09:09) [24]

>>>>>>>> bushmen и КурдльПомогите мне разобраться где находится поток у DataSet.Если честно не врублюсь. Сколько всего перепробывал не получается.


> bushmen ©   (28.06.04 14:32) [22]


> Попробуй сам разобраться. Все лежит на поверхности. Если
> что-то не додумаешь, задавай вопросы.

Блин не получается за......лся!!!!!!!!!!!!



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

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

Наверх




Память: 0.5 MB
Время: 0.035 c
14-1088781511
OSokin
2004-07-02 19:18
2004.07.25
В чем измерять глюки и баги?


1-1089603479
Vitalik
2004-07-12 07:37
2004.07.25
TChart


3-1088407512
axx
2004-06-28 11:25
2004.07.25
Приобразование типов в запросе. Синтаксис


3-1088932286
Bizon's
2004-07-04 13:11
2004.07.25
Разрыв связи в InterBase


1-1089748982
far
2004-07-14 00:03
2004.07.25
Файлы ресурсов для компонентов





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский