Форум: "Базы";
Текущий архив: 2004.08.01;
Скачать: [xml.tar.bz2];
ВнизСчитывание ОЛЕ с базы Найти похожие ветки
← →
metrol (2004-07-05 14:36) [0]Здрасти.
У меня такая проблема. Есть база в ней 5 БЛОБ полей в которых хранятся ОЛЕ объекты. Как мне миожно их все разом прочесть от туда на мою форму на которой 5 оле компонентов. На форуме был какой-то вопрос связанный с ОЛЕ и там был такой пример но он наработает.var
OLE : TOLEContainer;
TBS,TB : TBLOBStream;
i:integer;
begin
Table1.Next;
TBS:=TBLOBStream.Create(Table1.FieldByName("OLE") as
TBLOBField, bmRead);
OLEContainer1.LoadFromStream(TBS as TStream);
TBS.Free;
← →
Курдль © (2004-07-05 14:50) [1]
mstr := TMemoryStream.Create;
try
sdqTemplateTEM_DATA.SaveToStream(mstr);
mstr.Seek(0, soFromBeginning);
OleContainer1.LoadFromStream(mstr);
finally
FreeAndNil(mstr);
end;
где sdqTemplateTEM_DATA - TBLOBField.
← →
metrol (2004-07-06 07:43) [2]>>>Курдль ©
Блин не работает. Ты бы немог бы это показать на присере 2 записей. Тоесть одновременно считать с 2 записей. и ставить в Олеконтейнеры.Говорит что что тот с потоком.
Заранее спасибо metrol
← →
Курдль © (2004-07-06 09:09) [3]У меня несколько лет работает и кушать не просит.
> Ты бы немог бы это показать на присере 2 записей.
Мог бы. А ты сам не мог бы поднапрячься?
mstr := TMemoryStream.Create;
try
sdqTemplateTEM_DATA.SaveToStream(mstr);
mstr.Seek(0, soFromBeginning);
OleContainer1.LoadFromStream(mstr);
finally
FreeAndNil(mstr);
end;
sdqTemplate.Next;
mstr := TMemoryStream.Create;
try
sdqTemplateTEM_DATA.SaveToStream(mstr);
mstr.Seek(0, soFromBeginning);
OleContainer2.LoadFromStream(mstr);
finally
FreeAndNil(mstr);
end;
← →
Johnmen © (2004-07-06 09:12) [4]
var S: TStream;
...
S:=Table1.CreateBlobStream(FieldByName("OLE"), bmRead);
try
OleContainer1.LoadFromStream(S)
finally
S.Free
end;
← →
Курдль © (2004-07-06 09:29) [5]
> Johnmen © (06.07.04 09:12) [4]
Это ты из хэлпа, или из рабочей проги? Дело в том, что у меня таким образом не заработало. Или заработало вкривь-вкось. А вот вариант [1] пашет, как дохтур прописал.
← →
Johnmen © (2004-07-06 09:44) [6]>Курдль © (06.07.04 09:29) [5]
Это из хелпа. А что здесь нерабочее ?
Единственно, что можно добавить, позиционирование в начало...
← →
Val © (2004-07-06 10:02) [7]>Johnmen © (06.07.04 09:44) [6]
думаю, сам станет после создания.
← →
Курдль © (2004-07-06 10:02) [8]
> Johnmen © (06.07.04 09:44) [6]
> Это из хелпа. А что здесь нерабочее ?
> Единственно, что можно добавить, позиционирование в начало...
Ах, так!!! Тогда рекомендую проверить и доложть! :)
← →
Johnmen © (2004-07-06 10:10) [9]Спасибо. Неохота. Тем более ты уже пробовал. Вот и доложи...:)
← →
Курдль © (2004-07-06 10:14) [10]
> Johnmen © (06.07.04 10:10) [9]
> Спасибо. Неохота. Тем более ты уже пробовал. Вот и доложи...:)
А я свою рабочую версию уже доложил и даже вложил! :)
А вспоминать, что там не работало 3 года назад - тоже неохота.
← →
metrol (2004-07-07 06:58) [11]Здравствуйте.
Я конечно ивеняюсь, я по сравнению с вами тупой и мне есчё расти и расти. Но у меня не получается сделать так как я хоху.
Бес проблем грузится с одгой записи во все ОЛЕКонтейнкры и если поля разные то он выдаёт что оштбка в потоке. Я сам не силён вообще в потоках и как сними работать и разбераюсь на ваших примерах.
Вообщем надо слелать что то типа токого.procedure TForm1.SpeedButton1Click(Sender: TObject);
var
OLE : TOLEContainer;
TBS : TBLOBStream;
i:integer;
mstr:TStream;
begin
Table1.Next;
mstr := TMemoryStream.Create;
try
mstr:=TBLOBStream.Create(Table1.FieldByName("OLE") as
TBLOBField, bmRead);
mstr.Seek(0, soFromBeginning);
OleContainer1.LoadFromStream(mstr);
finally
FreeAndNil(mstr);
Table1.Next;
mstr := TMemoryStream.Create;
try
mstr:=TBLOBStream.Create(Table1.FieldByName("OLE1") as
TBLOBField, bmRead);
mstr.Seek(0, soFromBeginning);
OleContainer2.LoadFromStream(mstr);
finally
FreeAndNil(mstr);
Суть в том что есть пять записей в таблице допустим OLE1,OLE2,OLE3,OLE4,OLE5 и их надо вывести в 5 ОЛЕКонтейнаров. Если не трудно объясните пожайлуста на том что я хочу сделать.
← →
sniknik © (2004-07-07 08:01) [12]Table1.Next; здесь явно лишнее, .к. у тебя похоже 5 полей(OLE1,OLE2,OLE3,OLE4,OLE5) в одной(1) записи (иначе не пришлось бы разные имена полям давать).
а про 5 записей ты просто всем мозги запудрил, вот тебе и дали под это пример. проще бы привер структуру таблици и описание на пальцах если в терминах путаешся.
ошибка получается скорее всего изза того что null в поле (ничего не записано). уверен что во второй записи у поля OLE1 есть данные?
кстати ошибку тоже желательно приводить, то что там написано помогает понять от чего она случилась.
← →
metrol (2004-07-07 08:36) [13]Да ИЗВИНИТЕ в натуре ошибся.
> у тебя похоже 5 полей(OLE1,OLE2,OLE3,OLE4,OLE5) в одной(1)
> записи (иначе не пришлось бы разные имена полям давать).
ДА это действительно так есчё раз извините запутался сам и вас запутал.
Да я уверен что во второй записи у поля OLE1 есть данные по одиночке всё работает а вместе нехотят.
А ошибка такая Stream read error.
Есть база в ней есть поля (OLE1,OLE2,OLE3,OLE4,OLE5) в каждом поле есть какие-то данный. Надо одновременно выводить данных находящиеся в полях в оле компоненты. Показал 5 записе потом переходишь на следующую запись и показываешь содержимой полей этой записи. Вот вроде правельно объяснил.
← →
sniknik © (2004-07-07 08:41) [14]ну так Table1.Next; то убери. и получиш вполне правильнный код. избыточный правда, можно раз поток создать и им пользоватся для всех, но это сам потом разберешся когда хоть в таком виде заработает.
← →
metrol (2004-07-07 08:51) [15]Знаешь он и втаком виде(Table1.Next убрал) даёт такую же ошибку >>>>Stream read error.
← →
Johnmen © (2004-07-07 09:15) [16]Ошибка в том, что подряд идет создание одного и того же объекта mstr.
Ты определись со стримами. mstr или TBS...
← →
metrol (2004-07-07 09:18) [17]TBS я вообще неиспользую,он закоментирован
← →
Johnmen © (2004-07-07 09:26) [18]А это что значит ?
...
mstr := TMemoryStream.Create;
try
mstr:=TBLOBStream.Create(Table1.FieldByName("OLE") as
TBLOBField, bmRead);
...
← →
metrol (2004-07-07 09:30) [19]Я повторюсь что в потоках ничего непонимаю и разбераюсь в них по вашим отвем на вопросы.
А значит это то(я так думаю). Создаётся поток данных с таблици в переменную mstr. Если не так поправь пожайлуста.
← →
Курдль © (2004-07-07 09:59) [20]
> metrol (07.07.04 09:30) [19]
> Я повторюсь что в потоках ничего непонимаю и разбераюсь
> в них по вашим отвем на вопросы.
А в объектах ты чего-нибудь понимаешь?
Тебе конструкция
obj := TObject.Create;
try
...
finally
obj.Free;
end;
о чем-то говорит? Если нет - то не надо разбираться с программированием на Delphi по нашим ответам! Почитай книжки месяцок, а потом заходи опять сюда - обсудим возникшие вопросы.
← →
sniknik © (2004-07-07 10:41) [21]> Я повторюсь что в потоках ничего непонимаю и разбераюсь в них по вашим отвем на вопросы.
вот это ты зря
> Если не так поправь пожайлуста.
попробуй такprocedure TForm1.SpeedButton1Click(Sender: TObject);
var
mstr: TStream;
begin
Table1.Next;
mstr:= TMemoryStream.Create;
try
TBLOBField(Table1.FieldByName("OLE1")).SaveToStream(mstr);
if mstr.Size > 0 then begin
mstr.Position:= 0;
OleContainer1.LoadFromStream(mstr);
end;
TBLOBField(Table1.FieldByName("OLE2")).SaveToStream(mstr);
if mstr.Size > 0 then begin
mstr.Position:= 0;
OleContainer2.LoadFromStream(mstr);
end;
finally
FreeAndNil(mstr);
end;
end;
← →
sniknik © (2004-07-07 10:45) [22]Clear забыл. ну да ладно найдеш куда вставить.
← →
metrol (2004-07-07 12:31) [23]А дайте ссылочки на литературу по потокам. Где можно почитать про это, а что много сказапно было про неграмотность.Хочется почитать.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2004.08.01;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.033 c