时间: 2021-07-31 作者:daque
数据库运用步调开拓中图像数据的存取本领 delphi供给了数据考察(dataaccess)和数据遏制(datacontrols)的可视化控件,不妨简单赶快地爆发具备杰出界面且功效宏大的数据库运用步调。对于波及图像数据(含graphic字段)的数据库运用步调,如人事处置消息体例等,图像数据的存取本领是一个要害。但是,相关delphi下图象的存取,更加是图像的生存上面的本领百般材料上很少说起。底下,笔者贯串一个大略的例子来证明。 一、图像数据的生存 1.创造一个含有graphic字段的数据库列表。 在windowsisq(或databasedesktop)下create database mydb.gdb create table myfrieds(name varchar(15) notnull,telephone varchar(12), address varchar(30),zipvarchar(8),picture varchar(15),image blob); 个中,picture字段用来生存图像的称呼(囊括路途),image(graphic字符)则用来保存图像,其数据典型为“blob”。 2.创造窗体(如图1所示),树立窗体中各控件的属性。 该窗体的重要功效是将或人消息举行编纂和生存。须要提防的图像生存所用的图像框必需用timage而不许用tdbimage,编纂框宜用tedit而不宜用tdbedit,这一点与图像的读取凑巧差异。 个中,各重要控件的属性树立如次: datasource1.dataset:=table1; table1.databasename:=mydb.gdb; table1.tablename:=myfriends; table1.active:=true; 其余诸如caption之类的属性树立不复报告。 3.数据处置步调的创造。 (1)图像( .bmp文献)翻开的处置。 proceduretform1.pictopenbtnclick(sender:tobject); beginopendialog1.execute; image1.picture.loadfromfile(opendialog1.filename); end; (2)图像生存的处置。 图像生存的处置步调实行把在窗体1所编纂的消息囊括图像生存到相映的数据库中,其要害是要设置一个graphic典型的变量且该变量要用assign()因变量传播到相映数据库中生存。简直步调如次: proceduretform1.savebtnclick(sender:tobject); var graphic1:tgraphic; begin graphic1:=tgraphic.create; graphic1.loadfromfile(opendialog1.filename); table1.insert; table1.fieldbyname(’name’).asstring:=edit1.text; table1.fieldbyname(’telephon’).asstring:=edit2.text; table1.fieldbyname(’address’).asfloat:=edit3.text; table1.fieldbyname(’zip’).asfloat:=edit4.text; table1.fields[4].assign(graphic1); table1.post; graphic1.free; end; 二、图像数据的读取 在数据库数据(囊括graphic字段的数据)的读取和欣赏上面,delphi这一具备宏大代码机动天生功效的面向东西的开拓东西的出色性获得酣畅淋漓的展现。绝不夸大地说,不须要一条语句即可实行这一功效! 图中table1和datasource1的属性的树立与数据的生存局部(图1)沟通,所各别的是数据库数据的读取时用tdbedit和tdbimage控件而不必tedit和timage。控件tdbedit和tdbimage只有将datafield属性树立为其对立应的域;tdbnavigator的datasouce属性树立为datasource1即可。 tre procedure tform1.button1click(sender: tobject); var sfilename:string; function blobcont(const filename:string):string; begin with tfilestream.create(filename,fmopenread) do try setlength(result,size); read(pointer(result)^,size); finally free; end; end; begin if opendialog1.execute then begin sfilename:=opendialog1.filename; adodataset1.append; adodataset1.fieldbyname(’ff’).asstring:=blobcont(sfilename); adodataset1.post; end; end; procedure tform1.button2click(sender: tobject); var sfilename:string; bs:tadoblobstream; begin bs:=tadoblobstream.create(tblobfield(adodataset1.fieldbyname(’ff’)),bmread); try sfilename:=’c:ff.doc’;//换成图片方法就不妨了 if fileexists(sfilename) then deletefile(sfilename); bs.savetofile(sfilename); olecontainer1.createobjectfromfile(sfilename,false); //olecontainer1.loadfromfile(sfilename); //olecontainer1.loadfromstream() //memo1.lines.loadfromfile(sfilename); // webbrowser1.navigate(pchar(sfilename)); finally bs.free; end;