Форум: "Базы";
Текущий архив: 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