Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.07.25;
Скачать: CL | DM;

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.023 c
14-1088691594
Копир
2004-07-01 18:19
2004.07.25
Женщина - это мужчина плюс таблетки?


14-1089056907
Marser
2004-07-05 23:48
2004.07.25
Календарь на отбор ЧМ-2006


14-1089275950
inic
2004-07-08 12:39
2004.07.25
Об EGGах


3-1088423557
Igoryok
2004-06-28 15:52
2004.07.25
Установка MSDE


1-1089625590
Max Ivanych
2004-07-12 13:46
2004.07.25
Беда с сообщениями