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