在interbase里,如何存入图像?(50分)

  • 主题发起人 主题发起人 blacksnow
  • 开始时间 开始时间
B

blacksnow

Unregistered / Unconfirmed
GUEST, unregistred user!
请问如何将jpg图像(文件)存入interbase的blob字段!
是存入图片的内容?还是存入图片文件的路径?
请详细一些!谢谢!
 
可用 TStream 对象。用这种方法,你可以在字段里放入任意的文件,图片、Word、甚至
EXE文件。
程序如下:
procedure TfmBlob.btnSaveClick(Sender: TObject);
var
FStream: TFileStream;
BStream: TBlobStream;
begin
if not OpenDialog1.Execute then exit;
//创建一个文件流
FStream := TFileStream.Create(OpenDialog1.FileName,fmOpenRead);
Table1.Edit;
//创建一个 Blob 流
BStream := TBlobStream.Create(Table1Doc,bmReadwrite);
with BStream do begin
Seek(0,soFromBeginning); //把流指针回到头上,否则会从当前位置向后copy,
//结果一个字段内存了两个对象,而只能调入第一个
Truncate; //截断
CopyFrom(FStream,FStream.Size) //两个流之间的copy
end;
BStream.Free; //释放对象
FStream.Free;
Table1.Post;

end;

上述是综合Pipi和Crab等人的论述,我已能成功,你也试试!请感谢他们吧!!!

又及,字段内放入图片内容要好些,不要放路径,那容易产生其他问题。
 
好像有点问题,插入一条纪录用insert into value(......)
图想怎么存进取?
 
Table1.Append();

....其他field赋值

TBlobField(Table1.FieldByName('doc')).LoadFromFile('图片文件名字');

Table1.Post;
 
如果用insert,用变量:

命令是:
insert into xxx (...) values (..., :MY_BLOB_FIELD)

Query1.ParamByName('MY_BLOB_FIELD').LoadFromFile(文件名,ftBlob)
...
Query1.ExecSQL
 
pipi
我用insert总是出错,这样你来看看
table name:test,2个字段,GATE VARCHAR(2),PHOTO BLOB;
数据:‘01’,图片文件名:image.jpg
如何存入?

 
pipi
用 Table1.Append();就不会出问题,你能不能把insert的方法说的详细一些
另外DBImage不支持jpg显示,你有没有简单的解决办法,详细一些,就以上面
的表做范例吧,我给你加分!
 
qry.SQL.Text:='insert into test (gate,photo) values (:gate, :photo)'
qry.ParamByName('gate')='AB'
qry.ParamByName('photo').LoadFromFile(文件名,ftBlob)
Query1.ExecSQL
 
我花了一个钟头时间写了一个用IB管理图片的程序.哦, 速度真是了不得!

建议: 读写都使用TIBSQL , 而不要用TIBQuery 或 TIBDataset 之类.
TIBSQL有一个TIBXSQLDA类为Current
TIBSQL.Current通过Fields[Index]或ByName('字段名')函数访问一个
TIBXSQLVAR类的数据,(注意是圆括号)
类似TQuery中的TField或TParam.不同的是它自己有一个Pointer属性和一个SaveToStream
和LoadFromStream的方法.存取BLOB还有困难吗?
TIBSQL速度奇快,大概比TIBQuery能提高2-4倍左右.比TIBDataset提高4-10倍.
 
我存图片不存文件名.文件名和文件类型交给搞定TImageENIO就处理得不错.
 
with query1 do
begin
Close;
sql.clear;
sql.add('insert into traveller(tno,nam,pht)');
sql.add(' values(:p_tno,:p_nam,:p_pht)');
parambyname('p_tno').asstring:=edtno.text;
parambyname('p_nam').asstring:=trim(edtname.text);
if image2.picture.bitmap.empty then
parambyname('p_pht').asstring:='n' //标志为pht空
else
begin
try
tempjpeg:=tjpegimage.create;
tempjpeg.assign(image2.picture.Bitmap);
tempJpeg.JPEGNeeded;
tempJpeg.CompressionQuality:=30;
tempJpeg.Compress;
tempStream:=TStringStream.Create('');
tempJpeg.SaveToStream(tempStream);
tempstream.position:=0;
parambyname('p_pht').asblob := tempstream.datastring;
finally
tempjpeg.free;
tempstream.free;
end;
end;
end;

我做的是把一个image的图片转化成jpeg格式存储在paradox和mssql的blob字段里,用了好多次,
没出过问题。试试看,怎么样。

另:barton:羞愧,tibsql是什么东东,麻烦说清楚一点。
 
不就是Interbase面板上的一个控件吗?
 
多人接受答案了。
 
后退
顶部