Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Считывание ОЛЕ с базы [D7, Paradox]


Страницы:   1 2

metrol ©   (2004-07-05 14:36:00) 

Здрасти.
У меня такая проблема. Есть база в ней 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;


metrol   (2004-07-07 12:31:00) [1]

А дайте ссылочки на литературу по потокам. Где можно почитать про это, а что много сказапно было про неграмотность.Хочется почитать.


sniknik   (2004-07-07 10:45:00) [2]

Clear забыл. ну да ладно найдеш куда вставить.


sniknik   (2004-07-07 10:41:00) [3]

> Я повторюсь что в потоках ничего непонимаю и разбераюсь в них по вашим отвем на вопросы.
вот это ты зря

> Если не так поправь пожайлуста.
попробуй так
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;


Курдль   (2004-07-07 09:59:00) [4]


> metrol   (07.07.04 09:30) [19]
> Я повторюсь что в потоках ничего непонимаю и разбераюсь
> в них по вашим отвем на вопросы.

А в объектах ты чего-нибудь понимаешь?
Тебе конструкция

obj := TObject.Create;
try
 ...
finally
 obj.Free;
end;

о чем-то говорит? Если нет - то не надо разбираться с программированием на Delphi по нашим ответам! Почитай книжки месяцок, а потом заходи опять сюда - обсудим возникшие вопросы.


metrol   (2004-07-07 09:30:00) [5]

Я повторюсь что в потоках ничего непонимаю и разбераюсь в них по вашим отвем на вопросы.
А значит это то(я так думаю). Создаётся поток данных с таблици в переменную mstr. Если не так поправь пожайлуста.


Johnmen   (2004-07-07 09:26:00) [6]

А это что значит ?

...
mstr := TMemoryStream.Create;
    try
mstr:=TBLOBStream.Create(Table1.FieldByName('OLE') as
TBLOBField, bmRead);
...


metrol   (2004-07-07 09:18:00) [7]

TBS я вообще неиспользую,он закоментирован


Johnmen   (2004-07-07 09:15:00) [8]

Ошибка в том, что подряд идет создание одного и того же объекта mstr.
Ты определись со стримами. mstr или TBS...


metrol   (2004-07-07 08:51:00) [9]

Знаешь он и втаком виде(Table1.Next убрал) даёт такую же ошибку >>>>Stream read error.


sniknik   (2004-07-07 08:41:00) [10]

ну так Table1.Next; то убери. и получиш вполне правильнный код. избыточный правда, можно раз поток создать и им пользоватся для всех, но это сам потом разберешся когда хоть в таком виде заработает.


metrol   (2004-07-07 08:36:00) [11]

Да ИЗВИНИТЕ в натуре ошибся.
> у тебя похоже 5 полей(OLE1,OLE2,OLE3,OLE4,OLE5) в одной(1)
> записи (иначе не пришлось бы разные имена полям давать).
ДА это действительно так есчё раз извините запутался сам и вас запутал.

Да я уверен что во второй записи  у поля OLE1 есть данные по одиночке всё работает а вместе нехотят.

А ошибка такая Stream read error.

Есть база в ней есть поля (OLE1,OLE2,OLE3,OLE4,OLE5) в каждом поле есть какие-то данный. Надо одновременно выводить данных находящиеся в  полях в оле компоненты. Показал 5 записе потом переходишь на следующую запись и показываешь содержимой полей этой записи. Вот вроде правельно объяснил.


sniknik   (2004-07-07 08:01:00) [12]

Table1.Next; здесь явно лишнее, .к. у тебя похоже 5 полей(OLE1,OLE2,OLE3,OLE4,OLE5) в одной(1)записи (иначе не пришлось бы разные имена полям давать).

а про 5 записей ты просто всем мозги запудрил, вот тебе и дали под это пример. проще бы привер структуру таблици и описание на пальцах если в терминах путаешся.

ошибка получается скорее всего изза того что null в поле (ничего не записано). уверен что во второй записи у поля OLE1 есть данные?
кстати ошибку тоже желательно приводить, то что там написано помогает понять от чего она случилась.


metrol   (2004-07-07 06:58:00) [13]

Здравствуйте.
Я конечно ивеняюсь, я по сравнению с вами тупой и мне есчё расти и расти. Но  у меня не получается сделать так как я хоху.
Бес проблем грузится с одгой записи во все ОЛЕКонтейнкры и если поля разные то он выдаёт что оштбка в потоке. Я сам не силён вообще в потоках и как сними работать и разбераюсь на ваших примерах.
Вообщем надо слелать что то типа токого.

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 ОЛЕКонтейнаров.  Если не трудно объясните пожайлуста на том что я хочу сделать.


Курдль   (2004-07-06 10:14:00) [14]


> Johnmen ©   (06.07.04 10:10) [9]
> Спасибо. Неохота. Тем более ты уже пробовал. Вот и доложи...:)

А я свою рабочуюверсию уже доложил и даже вложил! :)
А вспоминать, что там не работало 3 года назад - тоже неохота.


Johnmen   (2004-07-06 10:10:00) [15]

Спасибо. Неохота. Тем более ты уже пробовал. Вот и доложи...:)


Курдль   (2004-07-06 10:02:00) [16]


> Johnmen ©   (06.07.04 09:44) [6]
> Это из хелпа. А что здесь нерабочее ?
> Единственно, что можно добавить, позиционирование в начало...

Ах, так!!! Тогда рекомендую проверить и доложть! :)


Val   (2004-07-06 10:02:00) [17]

>Johnmen ©   (06.07.04 09:44) [6]
думаю, сам станет после создания.


Johnmen   (2004-07-06 09:44:00) [18]

>Курдль ©   (06.07.04 09:29) [5]

Это из хелпа. А что здесь нерабочее ?
Единственно, что можно добавить, позиционирование в начало...


Курдль   (2004-07-06 09:29:00) [19]


> Johnmen ©   (06.07.04 09:12) [4]

Это ты из хэлпа, или из рабочей проги? Дело в том, что у меня таким образом не заработало. Или заработало вкривь-вкось. А вот вариант [1] пашет, как дохтур прописал.


Johnmen   (2004-07-06 09:12:00) [20]

var S: TStream;
...
S:=Table1.CreateBlobStream(FieldByName('OLE'), bmRead);
try
 OleContainer1.LoadFromStream(S)
finally
 S.Free
end;


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо