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

Вниз

загрузка Blob через TIbSQL   Найти похожие ветки 

 
GanibalLector ©   (2007-07-05 12:33) [0]

использую 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.
Как быть ?

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


 
Ega23 ©   (2007-07-05 13:01) [1]


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


 
GanibalLector ©   (2007-07-05 13:39) [2]

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

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

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

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

где LocalSQL=TIbSQL


 
GanibalLector ©   (2007-07-05 13:43) [3]

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


 
Ega23 ©   (2007-07-05 13:52) [4]

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

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


 
GanibalLector ©   (2007-07-05 14:05) [5]

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

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


 
GanibalLector ©   (2007-07-05 14:08) [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;


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


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;


 
Ega23 ©   (2007-07-05 14:46) [8]

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


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

Если автор не против, сюда же впишу еще один вопрос по 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".

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


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

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


 
GanibalLector ©   (2007-07-06 14:04) [11]

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

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



Страницы: 1 вся ветка

Текущий архив: 2007.11.18;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.03 c
15-1192221654
Petr V. Abramov
2007-10-13 00:40
2007.11.18
Каковы перспективы Mono?


15-1192432862
Ломброзо
2007-10-15 11:21
2007.11.18
VisioModeler


2-1193666916
@!!ex
2007-10-29 17:08
2007.11.18
Как ловить AV?


2-1193218088
nAlex
2007-10-24 13:28
2007.11.18
Canvas.Draw, Bitmap, ImageList


15-1192519969
Александр
2007-10-16 11:32
2007.11.18
Автоматическое копирование обновлённой версии программы