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

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

загрузка Blob через TIbSQL [D7]


GanibalLector ©   (2007-07-05 12:33:00) 

использую TIbQuery для загрузки из blob картинки и последующего размещения ее в TImage.

Код:

LocalQuery.Close;
LocalQuery.SQL.Clear;
LocalQuery.SQL.Add(типа запрос);
LocalQuery.ParamByName('ID').Value:=некоторое значение;
LocalQuery.Open;
         Str:=LocalQuery.CreateBlobStream(LocalQuery.FieldByName('PHOTO'),bmRead);
if(Str.Size>0) then
begin
 JPG := TJPEGImage.Create;
 try
   JPG.LoadFromStream(Str);
   JPG.DIBNeeded;
   Image1.Picture.Bitmap.Assign(JPG);
 finally
   JPG.Free;
 end;
end;


А хотелось использовать TIbSQL. Но ! У TIbSQL нет CreateBlobStream.
Как быть ?

Заранее спасибо !


GanibalLector   (2007-07-06 14:04:00) [1]

2 ЮЮ ©   (06.07.07 10:21) [10]

Спасибо, помогло.


ЮЮ   (2007-07-06 10:21:00) [2]

TIBXSQLVAR = class(TObject) и не имеет никакого лтношения к TBlobField. Так что AV неизбежен.

> У TIbSQL нет CreateBlobStream

Зато есть

procedure TIBXSQLVAR.SaveToStream(Stream: TStream);
var
 bs: TIBBlobStream;
begin
 bs := TIBBlobStream.Create;
 try
   bs.Mode := bmRead;
   bs.Database := FSQL.Database;
   bs.Transaction := FSQL.Transaction;
   bs.BlobID := AsQuad;
   bs.SaveToStream(Stream);
 finally
   bs.Free;
 end;
end;


Неужели сложно самому создать экземпляр нужного наследника TStream и выполнить
 LocalQuery.FieldByName('PHOTO').SaveToStream


Novice   (2007-07-06 09:22:00) [3]

Если автор не против, сюда же впишу еще один вопрос по BLOB-полям.
Только начал изучать их, и столкнулся с такой проблемой.
Есть таблица из двух полей - одно Inc(+), второе - собственно BLOB (Paradox 7, Formatted Memo). В Blob храню файлы RTF.
код загрузки в BLOB:

var s : TStream;
begin
Table1.Locate('ID', Num, []);
s := TBlobStream.Create(Form1.Table1BlobData, bmRead);
RichEdit1.SaveToStream(s);
s.Free;
end;

код чтения:

var s : TStream;
begin
Table1.Locate('ID', Num, []);
s := TBlobStream.Create(Form1.Table1BlobData, bmRead);
RichEdit1.LoadFromStream(s);
s.Free;
end;

иногда при удалении одной из записей таблицы, содержащей BLOB-поле программа выдает сообщение об ошибке "Blob has been modified".

Скажите, что это за ошибка и в каких случаях она происходит?


Ega23   (2007-07-05 14:46:00) [4]

А TIBSQL возвращает наборы данных?


Плохиш   (2007-07-05 14:16:00) [5]


procedure TfrmMain.dsPictureDataChange(Sender: TObject; Field: TField);
var
   streamPreview:  TMemoryStream;
begin
 if Field = nil then
   if Assigned(FfrmPreview) then
   begin
     streamPreview := TMemoryStream.Create;
     try
       TBlobField(dsPicture.DataSet.FieldByName('preview')).SaveToStream(streamPreview) ;
       FfrmPreview.streamPreview := streamPreview;
     finally
       streamPreview.Free;
     end;
   end;
end;


GanibalLector   (2007-07-05 14:08:00) [6]

Вот весь код(на всякий случай) :

LocalSQL.Close;
LocalSQL.SQL.Clear;
LocalSQL.SQL.Add('select photo from personnel_photos where user_id=:id');
LocalSQL.ParamByName('ID').Value:=Temp2;
LocalSQL.ExecQuery;   Str:=TBlobStream.Create(TBlobField(LocalSQL.FieldByName('PHOTO')),bmRead);// AV
// загружаем картину
if(Str.Size>0) then
begin
 JPG := TJPEGImage.Create;
 try
   JPG.LoadFromStream(Str);
   JPG.DIBNeeded;
   Image1.Picture.Bitmap.Assign(JPG);
 finally
   JPG.Free;
 end;
end;


GanibalLector   (2007-07-05 14:05:00) [7]

2 Ega23 ©   (05.07.07 13:52) [4]

:) Читаем. См.[3]


Ega23   (2007-07-05 13:52:00) [8]

Str:=TBlobStream.Create( TBLOBField(LocalSQL.FieldByName('PHOTO')),bmRead);

Блин, ну когда же вы все начнёте Help читать, а????


GanibalLector   (2007-07-05 13:43:00) [9]

Даже так AV:
Str:=TBlobStream.Create(TBlobField(LocalSQL.FieldByName('PHOTO')),bmRead);


GanibalLector   (2007-07-05 13:39:00) [10]

2 Ega23 ©   (05.07.07 13:01) [1]

Не. Оно даже не скомпилируется : Incompatible types : TBlobField and TIbXSQLVAR

Пробовал так. Не помогло (AV) :

Str:=TBlobStream.Create(LocalSQL.FieldByName('PHOTO') .AsPointer,bmRead);

где LocalSQL=TIbSQL


Ega23   (2007-07-05 13:01:00) [11]


var Stream: TBlobStream;
begin
stream:=TBlobStream.Create(LocalQuery.FieldByName('PHOTO'),bmRead);
try
 jpeg.loadFromStream(stream);
finally
 stream.free;
end;


Наверх

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