高手请问,在DBImage中如何清除载入到DBImage中的图像?用什么方法呢?谢谢!(50分)

  • 主题发起人 主题发起人 isapple
  • 开始时间 开始时间
执行了上面的程序后.DBIMAGE中的图象格式已经转换成BITMAP,但没有真的把JPEG存进数据库.
如果真的要保存JPEG到数据库中可以
if opendialog1.excute then
begin
Table1.append;
TBLOBFIELD(TABLE1.FIELDBYNAME('FIELD1').LOADFROMFILE(文件名);
Table1.post;
end;

读出的时候换成SAVETOFILE再读就是了.
如果你嫌这种不好用;
可以用TFILESTREAM;
PROCEDURE TFORM1.BUTTON4CLICK(SENDER:TOBJECT);
VAR VALUE :TFILESTREAM;
BEGIN
VALUE:=TFILESTREAM.CREATE;
VALUE.LOADFROMFILE(文件名);
TABLE1.APPEND;
TBLOBFIELD(TABLE1.FIELDBYNAME('FIELD1').LOADFROMSTREAM(VALUE);
TABLE1.POST;
VALUE.FREE;
END;

不过读出来就不那么方便了.最好如AIZD说的,不要用DBIMAGE了.直接用IMAGE就是了.因为在这
种格式下,DBIMAGE也是当了IMAGE用.要不找第三方的用.


前题是FIELD1的字段属性是:BLOB.我在SQLSERVER上试过.IMAGE型.ORACLE等
其他的数据库我就不知道了.
 
非常感谢sunziqi和p-ftp的赐教,谢谢你们!!!我突然有了这样的一个想法,如果我把想存
到数据库的JPG文件拷到一个固定的目录,然后把路径储存在数据库的字段里,读取时再通
过字段里的路径再相应读取JPG文件,不知这样是否可行,而且我想这样的话数据库便不会
因为图片的增多的导致速度变慢,这样行得通吗?谢谢!
 
可以,以前我试过.
但是没有这个必要.因为数据库中的图片是另外的文件,目录中保存的.不是直接保存在数据库
文件中.在SQLSERVER中有选项可以直接将文件的二进制保存进数据库中.
加上,保存在数据库中也不会变慢吧.只要你的数据库结构做得好.应该对数据库有多点信心.
 
补充:我要把JPG存进数据库主要的原因是JPG比BMP的体积少很多,不会因为图片的增多而
影响到数据库的大小以及速度,如果把JPG转成BMP再储存的话,我觉得便失去意义了。
 
下面的LOADFROMSTREAM就是直接保存JPEG了.上面的就是BMP.
保存了BMP不会影响太大吧.除非你的BMP非常大.
 
[red]to sunziqi[/red]嗯!因为我想用来保存一些照片的资料,所以如果一张照片都要1-2M的话,程序可能会吃
不消呢!嘻嘻!哪不知道哪个第三的控件是应付这方面的专长呢?谢谢!
 
我一般要保存到数据库的文件都有4-5兆的WORD,EXCEL文件.没有发现变慢的情况.一般是分在
另外的表中.
根据刚才
PROCEDURE TFORM1.BUTTON4CLICK(SENDER:TOBJECT);
VAR VALUE :TFILESTREAM;
BEGIN
VALUE:=TFILESTREAM.CREATE;
VALUE.LOADFROMFILE(文件名);
TABLE1.APPEND;
TBLOBFIELD(TABLE1.FIELDBYNAME('FIELD1').LOADFROMSTREAM(VALUE);
TABLE1.POST;
VALUE.FREE;
END;
可以保存(JPEG)到数据库.我以前也是这样保存的.如果你需要的话我可以将保存和读出的代码
详细的写给你.用的是TIMAGE.
第三方的有下面的:
http://www.pigtwo.com/CtrlData/other_DBImage_JPEG.zip
 
[red]to sunziqi[/red]:谢谢您的赐教!!!
 
to sunziqi:您的那个控件是D5的,可我用的是D6,D5我找不到,我也试了一下你的方法,
确实不错,可是我想问问:当通过DBGrid来改变记录时,我要求IMAGE也同步更新,那么你
的那种方法在读取时速度会不会跟不上呢?
QQ:38746974,isapple
isapple@21cn.com
Thank you very much!!!
 
根据楼住的标题的题意:
datasourcee1.autoedit:=False;//!!!!否则数据库内的数据奖杯改变
DBImage1.picture.bmp.freeimage;
 
to zhoufujin:
您好!首先非常感谢您的回答!DBImage.Picture.Bitmap.FreeImage能释放DBImage,可是
已经显示在DBImage中的图像却没法清除!还得要加上sunziqi提供的语句。不知阁下您有
什么高见呢?
 
用我上面的方法就算AUTOEDIT是TRUE 也应该不会改变数据库的图片.
to isapple:
FOR D5的吗.编译的时候有什么错误提示??如果没有错误提示就是可以FOR D6了.
我觉得你对数据库的效率和现在的机器的能力没有信心.如果你的图片是JPEG的话,最多也是
只有几百K.如果你是网络型的数据库结构,那么主要看你的带宽而定.现在的客户机和服务器性能
都很不错.
我还是认为你的图片表应该跟主表分开.需要修改图片的时候才从服务器读出来.这样子就一定
没有问题.但是如果你说每一条记录不管用不用,需要不需要都从数据库里读到内存来,那么怎么
样写都是相对慢的.建议你用ADO,可以设置数据页的大小,和一次读进内存的数据数量.
如果是单机版本的话,我觉得可以试一试.应该没有什么太大的问题.你可以测试一下更新数据大
概所用的时间.
procedure TForm1.button1click(sender:TObject);
var i,j,k:integer;
begin
i:=Gettickcount;
....保存的代码.就是APPEND,POST.FIELDBYNAME等语句.
i:=gettickcount-i;
showmessage(inttostr(i));//显示的是以毫秒做单位.除以1000就是秒了.我想速度是觉得可以接受的.就算
//不分表速度也可以(单机版);
end;

 
还有TO ZHOU,....:
如果DBIMAGE里面的图片不是BMP的话.是JPG或者其他的话,你还可以照常释放而没有产生异常吗??
我觉得你的bmp.freeimage的释放只适合释放格式是BMP的图片.而不能释放其它格式的图片.没有试过.大胆猜测一下.
如果有的话应该是PICTURE.FREEIMAGE.不知道有没有这一个写法.一会儿试一下.
 
[red]to sunziqi:[/red]
您好!其实这个软件我想做一个像册方面的,平常浏览某位同学的信息时,相应的照片也
同步显示出来。其实我们做学做软件的,就应该尽可能的以效率为主,其中因为我现在还
是学生,所以我是以效率中的质量为主。并不是因为现在的电脑主频高了,而忽视软件的
优化,我记得我曾经看过相关的书,说数据库大了,在存取时效率会变低,而且我想我们
在储存1-2M的BMP时肯定会比储存10-50K的JPG要慢,况且一些商用的客户他们的硬件配置
也不会很高,当他们感觉上这么一点点的操作都那么慢,他们对你所做的软件的印象也不
会太好,所以做工作一就不做,一做就尽自己最大的能力去做。我想我一定会把这问题解
决的。上面是我个人的想法,如果有什么说得不对的也请你不要介意。
 
数据库的大小是按记录数目算.主要不是按兆数算.你一条记录800兆,跟一千万条记录100兆,
你说是谁的效率高.
如果按照我上面的方法做而依然慢的话.估计也没有什么更快的方法了.因为上面的方法的瓶
颈是硬盘的存取速度.是硬件.如果你还嫌慢的话,那么只有你自己写一个JPEG压缩的更快更有
效率的算法.
所以在你这种情况之下没有必要考虑客户的硬件条件.例如ACDSEE.你看看如果硬件慢的话,运行
这东西要多久.重要的是你的软件有用.用户不会在这类软件上强烈的要求效率.
关键是你的软件好用不好用,稳定不稳定.
 
很多谢sunziqi多次的赐教,你的建议我会好好的反复思考,我会用实践试试的。谢谢你!
 
我看了一下,觉得有点疑问:
sunziqi好像是说数据库中表中的记录存储字段的值大点不会影响速度?

我想应该会吧...
=========
对楼主提点个建议,其实sunziqi也说了:
1.转成JPEG格式再存.最好存成另一个表,然后跟原来的表关联.这样
客户端在不读取图像时速度会比较快些.
2.如果存成路径也是可以的吧~~这也是在客户端不读取图时速度会比较快些.
===========
还请sunziqi多我指教~
 
我的意思是关键是索引.
 
这套软件很好,全国地图,而且具有很好的交通指示,误差不超过5米!
用的是GPS,目前市场前景看好,大家多努力呀

http://www.b2sun.com/security/swd2map.rar
有哪位大侠能够把这个文件转换成mapInfo的格式,高价10000.00元做为报答
联系方式QQ:65466700
mail:Along@b2sun.com
手机:13802785865
http://www.delphibbs.com/delphibbs/dispq.asp?lid=2016729
 
后退
顶部