![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Считывание ОЛЕ с базы [D7, Paradox]
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;