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

Вниз

Считывание ОЛЕ с базы   Найти похожие ветки 

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

Наверх




Память: 0.53 MB
Время: 0.026 c
1-1089847742
_Demik_
2004-07-15 03:29
2004.08.01
-= MainMenu =-


1-1089894898
List
2004-07-15 16:34
2004.08.01
Date


3-1089311171
GanibalLector
2004-07-08 22:26
2004.08.01
Пломбы...


14-1089669484
KilkennyCat
2004-07-13 01:58
2004.08.01
Notebook


14-1089435484
MBo
2004-07-10 08:58
2004.08.01
Об АЦП...