在程序设计中,我需要在数据库中存储图片文件,如何实现?(我用的数据库为SQL SERVER,最好能说明存储图片字段的属性,解决方法)),谢谢!
解决方案 »
- 关于AnimateWindow setwindowrgn的问题,求教!
- 如何获取文件属性中的“描述”信息(点右键弹出属性框“文件类型”下面那个)?
- 请帮我诊断SQL语句(相同记录汇总出错)
- 为什么OLE中的Word内容保存后变成了乱码
- 我用的开发工具都是盗版的,开发出来的产品是盗版的吗?
- dbgrideh中的小问题
- delphi+Oracle+ADO,对一条既包含文本、又包含视频、图像字段的记录能否一次性的插入或者修改,提供源码者最好!谢谢!
- 高手来帮忙
- 在unit2中对unit1的菜单按钮编程怎么办?我用的是:unit1.N12.Enabled:=true;提示N12 是未定义的标示符
- 我也来提问
- 求经纬度算法,高手请进,一天25小时在线等
- 在Pascal的一段代码
用流文件保存到字段中。
begin
if openpicturedialog1.Execute then
image1.Picture.LoadFromFile(openpicturedialog1.FileName );
end;
procedure Tform1.savetodbClick(Sender: TObject); //保存图像到数据库
var
ext:string;
begin
if image1.picture.Graphic <> nil then //避免image1中无图像保存出错
begin
adotable1.Edit ;
adotable1.FieldByName(myimage).Assign(image1.Picture.Graphic);
//以下记录保存到数据库的图像格式
ext:=extractfileext(openpicturedialog1.FileName ); //取出文件扩展名
if uppercase(ext) = .BMP THEN
adotable1.FieldByName(isbmp).VALUE := 1 //BMP型图像数据
ELSE IF (UPPERCASE(EXT) = .JPEG) OR (UPPERCASE(EXT) = .JPG) THEN
adotable1.FieldByName(isbmp).VALUE := 0; //JPEG型图像数据
ADOTABLE1.Post ;
end;
end; 2. 图像数据的读取及显示procedure Tform1.ADOTable1AfterScroll(DataSet: TDataSet); //ADOTable1的AfterScroll事件方法程序
var
jpegimage:tjpegimage;
begin
image1.Picture.Graphic :=nil;
//下边BMP、JPEG两种图像数据必需分别处理
if adotable1.fieldbyname(isbmp).Asstring = 1 then //BMP型图像数据
image1.Picture.bitmap.Assign(adotable1.fieldbyname(myimage))
//上边语句中的bitmap不能为graphic,否则会出错
else if adotable1.fieldbyname(isbmp).asstring = 0 then //JPEG型图像数据
begin //begin2
jpegimage := tjpegimage.Create ; //通过jpegimage将图像显示在image1,否则会出错
try
jpegimage.Assign(adotable1.fieldbyname(myimage));
image1.Picture.Graphic :=jpegimage;
finally
jpegimage.Free ;
end; //end try
end; //end begin2
end; 注:别忘了在单元文件接口部分的uses语句中添入JPEG单元引用。 以上程序代码在DELPHI6.0+SQL(或ACCESS或PARADOX)数据库下运行通过。
上传:var
fs:TFileStream;
FtpStr:string;beginFtpStr:=edt3.Text;//这里主要是用DlgOpen控件选择的文件名
fs:=Tfilestream.Create(FtpStr,Fmopenread);
qry1.Close;
qry1.SQL.Clear;
qry1.SQL.Add('select * from 文件管理');
qry1.Open;qry1.Append;qry1.FieldByName('主题').AsString:=edt1.text;
qry1.FieldByName('类别').AsString:=cbb1.Text;
qry1.FieldByName('附件大小').AsString:=FileSizeStr;
Tblobfield(qry1.FieldByName('附件')).LoadFromStream(fs);//这里就是保存附件的方式
qry1.Post;
fs.Free;
下载:
TBlobField(qry1.FieldByName('附件')).SaveToFile(dlgSave1.FileName);
以上希望对你有帮助!
用流文件保存到字段中 ...
2、建议大的图像不能保存在数据库中,否则。数据运行很慢。
sqlserver中用binary字段
这样的话可以最大限度节省磁盘空间,不过,浪费了点时间,增加了压缩解压缩这两个步骤。 //C:\TestDoc.Doc
//压缩原文件,文件名为原文件加ZIP
MyCompact('C:\TestDoc.Doc');
qry1.Edit;
TBlobField(qry1.FieldByName('照片')).LoadFromFile('C:\TESTDOC.DOC.ZIP');
qry1.FieldByName('文件类型').AsString:='DOC';
qry1.Post;仅供参考
var MyImg:TBitmap;
MyStream:TMemoryStream;
begin
try
MyImg:=TBitmap.Create;
MyImg.LoadFromFile('C:\Documents and Settings\zhengys\桌面\颜色\色块123.JPG');
MyStream:=TMemoryStream.Create;
Myimg.SavetoStream(MyStream); ADODataSet1.Edit;
(ADODataSet1.FieldByName('TP') as TBlobField).LoadFromStream(MyStream);
ADODataSet1.Open;
finally
MyImg.Free;
MyStream.Free;
end;
end;