起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 149|回复: 6

SheetDoc显示数据库中存储签名图片的问题[请求]**

[复制链接]
发表于 2009-1-20 16:39:25 | 显示全部楼层 |阅读模式
我现有的程序,是可以的,但是,是存到本地后读取,这样就有个问题:在硬盘频繁操作的时候,连续调用该方法,就会导致文件没有完全写完就读了,显示的时候就是空图片,现在想直接从内存中读取,我的代码应该怎么改?谢谢

  procedure TFDYJSBBCXXX.SetImg(ADocView:TDocView;X,Y:integer;AName:String);
var
  ts:TDSE;
  lsql:String;
  lmms:TMemoryStream;
  lGUID:String;
begin
  lGUID := JSCommon.CreateGUIDStr;
  lmms := TMemoryStream.Create;
  ts := TDSE.Create;
  lsql :='select * from T_IDSIGN where id = '+SysUtils.QuotedStr(SysUtils.Trim(AName))+'';
  ts.OpenQuery(lsql);
  TBlobField(ts.Query.FieldByName('Sign')).SaveToFile(TGENFUNCLIB.GetIETempFloder+lGUID+'.bmp');

  lmms.LoadFromFile(TGENFUNCLIB.GetIETempFloder+lGUID+'.bmp');
  TSheetDoc(ADocView.Doc).Sheet.CellTypes[X,Y] := TCellType.ctPicture;
  TPictureCell(TSheetDoc(ADocView.Doc).Cells[X,Y]).Picture.Bitmap.LoadFromStream(lmms);
  ts.Destroy;
  lmms.Destroy;
  SysUtils.DeleteFile(TGENFUNCLIB.GetIETempFloder+lGUID+'.bmp');
end;
回复

使用道具 举报

发表于 2009-1-20 16:55:04 | 显示全部楼层
1、让这个SetImg不能连续调用。
  比如有一个button调用SetImg。在调用的前面禁用掉这个按钮,SetImg后面再启用。
2、减小这个图片的大小.楼主这个bmp效率太低。
回复 支持 反对

使用道具 举报

发表于 2009-1-20 17:11:03 | 显示全部楼层
http://bbs.justep.com/forum.php?mod=viewthread&tid=27315
这个帖子怎样了?有结果反馈一下吧。
回复 支持 反对

使用道具 举报

发表于 2009-1-20 17:25:36 | 显示全部楼层
BlobStream := ts.Query.CreateBlobStream(ts.Query.FieldByName('Sign'), TBlobStreamMode.bmWrite);

用这个存储到流里面就可以了
回复 支持 反对

使用道具 举报

发表于 2009-2-3 14:07:35 | 显示全部楼层
不知道楼主是否还有问题?如果没有那就结贴了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-2-17 14:26:39 | 显示全部楼层
嗯,不好意思,今天正好要处理这个问题,我试一下,马上回来。
回复 支持 反对

使用道具 举报

发表于 2009-2-18 16:04:10 | 显示全部楼层
不知道楼主测试的结果怎样了?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-27 18:08 , Processed in 0.037416 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表