Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
3-1089185451
onics
2004-07-07 11:30
2004.08.01
Запись в поле numeric 15.3


14-1089912596
emike
2004-07-15 21:29
2004.08.01
партитуры ударных


1-1089965306
gdima
2004-07-16 12:08
2004.08.01
exec


1-1089925831
AlexR
2004-07-16 01:10
2004.08.01
Отследить нажатие га доп. клавиатуре


1-1090395515
Tempo
2004-07-21 11:38
2004.08.01
Вопрос по TDBGridEh





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский