var MS:TMemoryStream;
begin
MS:=TMemoryStream.Create;
MS.LoadFromFile('image.bmp');
Query1.Append
TBlob(Query1.FieldbyName('ImageField')).LoadFromStream(MS);
Query1.Post;
如果要 demo 请联系 [email protected]
begin
MS:=TMemoryStream.Create;
MS.LoadFromFile('image.bmp');
Query1.Append
TBlob(Query1.FieldbyName('ImageField')).LoadFromStream(MS);
Query1.Post;
如果要 demo 请联系 [email protected]
解决方案 »
- 请教TXmlDocument增加节点count加3的问题
- 一直不太明白的一点:类方法有什么作用呢?
- 如何保存树形控件中每项的图标的所以????
- TcxButtons是属于哪个第三方控件的?现在忘了名字了!找不到了!
- 难题,请高手帮帮看看
- 请问各位大虾:谁有开发 财务系统 的经历,可否指点在下
- 我有一张737*1123的位图,在windows98下用A4纸就能将它打印出来,到2000下A4纸却打印不下了,有什么办法在2000下将它打印出来而不影响画面质
- 想跟大家交个朋友呀
- 请教一个问题,操作字符串,关于memo1.text
- 关于DELPHI的SQL查询
- 今日购得delphi6的D盘...
- MDI子窗体的互斥?
可以看看TStream,TMemoryStream,TStringStream等
存时
Image1.Picture.SavetoStream(流名);
if (流.Size>0) then
begin
流.Position:=0;//一定要写
(Query1.FieldByName('BMP') As TBlobField).LoadFromStream(流名);
end;
取出来就不用说了吧.
如果想保存Jpg、Gif等,就先将文件转换成Stream,然后就可以导入到Blob字段中了
TBlobField.LoadFromStream,通过Stream可以将任何二进制数据存到数据库中了,
但你读出数据时,要自己将二进制的Stream恢复成原来的形式。举个Jpg的例子,你可以先从数据库中Image字段的内容读到TBlobField中,然后你自己
建一个TFileStream,将BlobField中的内容SaveToStream,把TFileStream.Free,你就
可以从与FileStream关联的文件中得到恢复出的Jpg了!(这个我实践过)其实,这个问题的难点在于怎样将数据库保存的二进制Stream数据恢复为图片格式的数据,
用FileStream其实是回避了这个问题!如果大家有更好的办法,还请拿出来指导在下!
var strName:String;
begin
strName:=ExtractFileName(Table1.FieldByName('Name').AsString);
strName:=ExtractFileExt(strName);
if UpperCase(strName)='.BMP' then
begin
TBlobField(Table1.FieldByName('Sound')).SaveToStream(MS);
MS.Position:=0;
Self.Image1.Picture.Bitmap.LoadFromStream(MS);
MS.SetSize(0);
end;
if UpperCase(strName)='.JPG' then
begin
TBlobField(Table1.FieldByName('Sound')).SaveToStream(MS);
MS.Position:=0;
JPG.LoadFromStream(MS);
Self.Image1.Picture.Bitmap.Assign(JPG);
MS.SetSize(0);
end;
end;
var
MS:TMemoryStream;
Bit:TBitMap;
Jpg:TJPEGImage;
下面是一个网友的贴子:
读:
TBlobField * pField=(TBlobField *)pQuery->FieldByName("Image");
TBlobStream * pmem=new TBlobStream(pField,bmRead);
pmem->Seek(0,soFromBeginning);
Graphics::TBitmap * pBitmap=new Graphics::TBitmap();
pBitmap->LoadFromStream(pmem);
Image1->Picture->Assign(pBitmap);
delete pBitmap;
delete pmem;
写:
TBlobField * pField=(TBlobField *)pQuery->FieldByName("Image");
TBlobStream * pmem=new TBlobStream(pField,bmWrite);
pmem->Seek(0,soFromBeginning);
Graphics::TBitmap * pBitmap=new Graphics::TBitmap();
pBitmap->Assign(Image1->Picture->Graphic);
pBitmap->SaveToStream(pmem);
delete pBitmap;
delete pmem;
pField->Post();注意:一定要用此方法进行读写,因为实际上它是以二进制流的方式存入数据库!
1.先求当前记录的BLOB字段的对象:
TBlobField * pField=(TBlobField *)pQuery->FieldByName("Image");
2.从对象指针,建它的流指针:
TBlobStream * pmem=new TBlobStream(pField,bmRead、bmWrite、bmReadWrite);
有了大字段的流,什么都好办了;
3.pmem->SaveToFile("另一文件");
bitmap1->LoadFromStream(pmem);等, 流操作很丰富;
(TABLE。FIELDS。FIELDBYNAME(‘字段名’) AS TBLOBFIELD)。LOADFROMSTREAM(STREAM的名字);