DELPHI SQL 存取图像

合集下载

Delphi存取图像完整解决方案Delphi教程.

Delphi存取图像完整解决方案Delphi教程.

Delphi存取图像完整解决方案Delphi教程对于涉及图像数据的数据库应用程序,图像数据的存取技术是一个关键。

由于缺少技术文档及DEMO例程演示,为此笔者在网上搜索了相关资料,有的根本不能用,有的过于繁杂,有的应用范围太窄(如只能适用于BMP 图像),有的写得过于简单理解起来十分困难。

而且在网上这也是大家比较关心的一个问题。

笔者对这个问题进行了反复实作和探索,下边笔者将通过一个完整的简单例子来说明如何保存和显示SQL数据库中的图像数据(同时包括BMP和JPEG两种格式)。

一、创建演示数据库在SQL SERVER中新建一演示数据库:Demo,并创建一数据表Picture1,结构如下:字段名Dtata TypeIdentityId Int YesIsbmpTinyint MyimageImage 字段Isbmp是用来记录在Myimage中存入的图像的类型(0表JPEG,1表BMP,其它值表无图像),Isbmp数据类型选用整型Tinyint而末选用逻辑bit型主要是考虑到如下方法仍适用于ACCESS数据库。

在SQL中打开表Picture1,添入几条记录,Myimage图像字段值暂不管,字段Isbmp值随便输入0和1之外的其它数。

二、窗口设计在DELPHI中新建一个工程,在FORM1上放置如表所示控件(考虑到TDBImage型控件不能正确显示JPEG型图像,所以选用Timage型控件显示所有类型图像)。

组件类别组件属性名属性值用途说明TimagecaptionImage1显示图像nameImage1StretchTrue Tbuttoncaption选择图像选择图像nameselectimageTbuttoncaption保存图像保存图像到数据库namesavetodb TADOConnectioncaption Adoconnection1创建与数据库demo的连接nameAdoconnection1 Connectionstring见备注ConnectedTrueLoginpromptFalse TadotableCaptionAdotable1建立与表Picture1的连接nameAdotable1 ConnectionAdoconnection1TablenamePicture1Active TrueTdatasourceNameDatasource1建立数据源DatasetAdotable1TopenpicturedialogCaptionOpenpicturedialog1选择图像文件NameOpenpicturedialog1TdbgridCaption Dbgrid1显示记录NameDbgrid1DatasourceDatasource1 备注:adoconnection1.connectstring := Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=demo;DataSource=MysqlserverMysqlserver为SQL服务器的名称请据实际情况更改。

VB+SQL数据库图片存取

VB+SQL数据库图片存取

VB+SQL图片存取vb代码VB窗体界面如下:1.把图片写入到Field中函数代码:Private Sub picsavetodb(ByRef fld As ADODB.Field,diskfile As String)Const blocksize = 4096Dim bytedata() As ByteDim numblocks As LongDim filelength As LongDim leftover As LongDim sourcefile As LongDim i As Longsourcefile = FreeFileOpen Trim(CommonDialog1.filename) For Binary Access Read As sourcefilefilelength = LOF(sourcefile)If filelength = 0 ThenClose sourcefileMsgBox Trim(CommonDialog1.filename) & "无内容或不存在!"Elsenumblocks = filelength \ blocksizeleftover = filelength Mod blocksizefld.Value = NullReDim bytedata(blocksize)For i = 1 To numblocksGet sourcefile, , bytedata()fld.AppendChunk bytedata() NextReDim bytedata(leftover)Get sourcefile, , bytedata()fld.AppendChunk bytedata() Close sourcefileEnd IfEnd Sub2.把图片存入SQL数据库XS(学生表)中:Private Sub Command1_Click()Dim s As StringDim bytedata() As ByteDim adofld As ADODB.Fields = "select * from xs where 学号='" &Trim(Text1.Text) & "'"sqlres.Open s, connectstring, adOpenDynamic, adLockPessimisticIf Not sqlres.EOF ThenSet adofld = sqlres.Fields("照片")If CommonDialog1.filename <> "" ThenCall picsavetodb(adofld, "filename")End Ifsqlres.Update3.把图片从SQL数据库读入VB图片框:Private Sub Command3_Click()Dim sqlres As ADODB.RecordsetSet sqlres = New ADODB.Recordsetsqlres.Open "select * from xs where 学号='" & Trim(Text1.Text) & "'", connectstring, adOpenDynamic, adLockPessimisticDim stream As ADODB.streamSet stream = New ADODB.streamstream.Mode = adModeReadWrite'Image1.Picture = LoadPicture("")If Not IsNull(sqlres.Fields("照片")) Thenstream.Type = adTypeBinarystream.Openstream.Write sqlres.Fields("照片")stream.SaveToFile "filename", adSaveCreateOverWriteImage1.Picture = LoadPicture("filename")sqlres.Closestream.CloseEnd IfEnd Sub4修改图片:Private Sub Command2_Click()Dim filename As StringCommonDialog1.Filter = "图像(*.jpg)|*.jpg|位图(*.bmp)|*.bmp"CommonDialog1.InitDir = App.Path & "\图片库"CommonDialog1.ShowOpenfilename = CommonDialog1.filenameImage1.Picture = LoadPicture(filename)End Sub。

delphi中处理sqlserver中的image、text字段

delphi中处理sqlserver中的image、text字段

delphi中处理sqlserver中的image、text字段下面通过详细的例子来讲述如何在delphi中处理sql server中的image、text字段。

因为实际开发的需要,我们需要处理的是text类型的字段,包括读和写。

网上很多相关的文章都是讲述的对image的读写操作,下面首先介绍如何将图象存储在sql server的image字段。

其中DataMConn为一个针对数据库操作的单元,放置一个ADOConnection,一个ADOQuery //image to database procedure TfrmText.Button1Click(Sender: TObject);varbm:tbitmap;ms:TMemoryStream;beginms:=TMemoryStream.Create;bm:=TBitmap.Create;bm.Assign(image1.Picture.Bitmap);bm.SaveToStream(ms);with DataMConn.ADOQHistory dobeginClose;SQL.Clear;SQL.Add('INSERT INTO Package(PackageID,TempPackage) VALUES(:x,:y)');Parameters.ParamByName('y').LoadFromStream(ms,ftBlob);Parameters.ParamByName('x').Value := 'aaaaa';ExecSQL;end;end;//show imageprocedure TfrmText.Button2Click(Sender: TObject);varStream:TStream;bm:tbitmap;beginwith DataMConn.ADOQHistory dobeginClose;SQL.Clear;SQL.Add('SELECT * FROM Package WHERE packageID= ''aaaaa''');TryOpen;stream := DataMConn.ADOQHistory.CreateBlobStream(FieldByName('T em pPackage'),bmRead);bm:=TBitmap.Create;bm.LoadFromStream(stream);image2.Picture.bitmap.Assign(bm);stream.Free;exceptbeginShowMessage('Error!');Exit;end;end;//tryend;end;下面的两个例子是如何处理text类型的字段,其中读取的时候,利用了一个TDBMemo控件,来加载读取的流数据,然后赋值给一个WideString类型的变量str//text to streamprocedure TfrmText.Button3Click(Sender: TObject);varstr : WideString;ss:TStringStream;i : integer;beginstr := 'sstrstrststrstrststrstrstrsttrstrstrrstrstr';for i := 1 to 10000 dobeginstr := str + 'sstrstrststrstrststrstrstrsttrstrstrrstrstr'; //43万多个字节end;str := str + 'E';ss := TStringStream.Create(str);//bm:=TBitmap.Create;//bm.Assign(image1.Picture.Bitmap);//bm.SaveToStream(ms);with DataMConn.ADOQHistory dobeginClose;SQL.Clear;SQL.Add('INSERT INTO tPackage(PackageID,TempPackage) VALUES(:x,:y)');Parameters.ParamByName('y').LoadFromStream(ss,ftMemo);Parameters.ParamByName('x').Value := 'aaaaa';ExecSQL;end;end;//read text to a TDBMemoprocedure TfrmText.Button4Click(Sender: TObject);varstream : TStream;str : WideString;beginwith DataMConn.ADOQHistory dobeginClose;SQL.Clear;SQL.Add('SELECT TempPackage FROM tPackage WHERE packageID= ''aaaaa''');Open;if not IsEmpty thenbeginStream := DataMConn.ADOQHistory.CreateBlobStream(FieldByName('T em pPackage'),bmRead);stream.Position := 0;AMemo.Lines.LoadFromStream(stream);stream.Free;end;end;end;//下面是把text字段的数据内容直接读到一个WideString中,而不通过TDBMemo,因为在实际中,不知道何种原因,线程读到数据后,只能在第一次处理时正常,然后再用鼠标点应用程序,程序就停了……who knows the reason , pls tell me & 3ksprocedure TfrmText.Button5Click(Sender: TObject);varBuffer: PChar;MemSize: Integer;Stream: TStream;str : WideString;beginwith DataMConn.ADOQHistory dobeginClose;SQL.Clear;SQL.Add('SELECT TempPackage FROM tPackage WHERE packageID= ''aaaaa''');Open;if not IsEmpty thenbeginStream := DataMConn.ADOQHistory.CreateBlobStream(FieldByName('T em pPackage'),bmRead);tryMemSize := Stream.Size;Inc(MemSize); //Make room for the buffer's null terminator.Buffer := AllocMem(MemSize); //Allocate the memory.tryStream.Read(Buffer^, MemSize); //Read TempPackage field into buffer.str := Buffer;finallyFreeMem(Buffer, MemSize);end;finallyStream.Free;end;end;end;end;如何用流的方法向SQLServer数据库中读写blob的image字段varTempStream: TMemoryStream;begin//ReadTempStream := TMemoryStream.Create;tryTBlobField(FieldByName('ImageField')).SaveToStream; TempStream.Position := 0;Memo1.Lines.LoadFromStream(TempStream);FinallyTempStream.Free;end;//WriteTempStream := TMemoryStream.Create;tryMemo1.Lines.SaveToStream(TempStream);//Image1.Picture.Bitmap.LoadFromStream(TempStream); TBlobField(FieldByName('ImageField')).LoadFromStream; FinallyTempStream.Free;end;end;varaStream1 : TStream;jpg : tjpegimage; //在uses 加入 jpeg,db 单元插入jpg := tjpegimage.Create();trydm.Query_image.open;dm.query_image.insert;aStream1 := dm.query_image.CreateBlobStream(dm.query_image.FieldByNa me('content'),bmReadWrite);jpg.LoadFromFile(name);jpg.SaveToStream(aStream1);aStream1.Free;dm.query_image.Post;finallyjpg.Free;end;取出if dm.query_image.State <> dsBrowse then exit;if dm.query_image.FieldByName('content').IsNull then Exit; //判断状态,content是我表里存放jpeg的fielddm.query_image.open;aStream1 := dm.query_image.CreateBlobStream(dm.query_image.FieldByNa me('content'), bmRead);tryaStream1.Position := 0;jpg:= tjpegimage.Create();tryjpg.LoadFromStream(aStream1);jpg.SaveToFile(ipath); //ipath:string 存放路径与文件名finallyjpg.Free;end;finallyaStream1.Free;end;end;文件写入字段:SQLstr:='INSERT INTO 表名(...,Image字段名,...)VALUES (...,:Image,...)';Query.SQL.Add(SQLstr);Query.SQL.ParamByName('Image').LoadFromFile(图象文件名);Query.ExecSQL;从字段写入文件:SQLstr:='SELECT ...,Image字段名,... FROM 表名 WHERE...';Query.Close;Query.SQL.Clear;Query.SQL.Add(SQLstr);Query.Open;(Query.FieldByName(Image字段名) as TBlobField).SaveToFile(文件名);//或TBlobField(Query.FieldByName(Image字段名)).SaveToFile(文件名);向SQL Server插入带有Image字段的记录向SQL Server插入记录相信大家都会做,但是如果表中带有Image字段就不好弄了,这里有一个例子,非常安全,同时也向大家展示动态生成控件的技巧!在SQL Server中建立TEST表,两个字段,id varchar(10),photo image(16);procedure TForm1.BitBtn1Click(Sender: TObject);beginopenpicturedialog1.execute;image1.picture.loadfromfile(openpicturedialog1.filename);end;procedure TForm1.BitBtn2Click(Sender: TObject);vargraphic1:Timage;begingraphic1:=Timage.Create(self);graphic1.picture.loadfromfile(openpicturedialog1.filename);table1.Open;table1.insert;table1.fieldbyname(’id’).asstring:=’121’;table1.fields[1].assign(graphic1.Picture);table1.post;table1.close;graphic1.free;end;显示可用:DBIMAGE控件显示!DELPHI存取JPEG文件到SQL Server数据库unit Unit1;interfaceusesWindows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,ExtCtrls, DBCtrls, Grids, DBGrids, Db, ADODB,jpeg, StdCtrls,dbtables;{一定要USES JPEG单元,使能存储JPG文件格式}typeTForm1 = class(TForm)DataSource1: TDataSource;ADOQuery1: TADOQuery;DBGrid1: TDBGrid;DBNavigator1: TDBNavigator;Image1: TImage;savebutton: TButton;showbutton: TButton;OpenDialog1: TOpenDialog;ADOQuery1id: TIntegerField;ADOQuery1pic: TBlobField;procedure savebuttonClick(Sender: TObject);procedure showbuttonClick(Sender: TObject);procedure DBNavigator1Click(Sender: TObject; Button: TNavigateBtn);private{ Private declarations }public{ Public declarations }end;varForm1: TForm1;implementation{$R *.DFM}function JpegStartsInBlob(PicField:TBlobField):integer;varghy: TADOBlobstream;buffer:Word;hx: string;beginResult := -1;ghy := TADOBlobstream.Create(PicField, bmRead);trywhile (Result = -1) and (ghy.Position + 1 < ghy.Size) dobeginghy.ReadBuffer(buffer, 1);hx:=IntToHex(buffer, 2);if hx = ’FF’ then b eginghy.ReadBuffer(buffer, 1);hx:=IntToHex(buffer, 2);if hx = ’D8’ then Result := ghy.Position - 2else if hx = ’FF’ thenghy.Position := ghy.Position-1;end; //ifend; //whilefinallyghy.Freeend; //tryend;procedure TForm1.savebuttonClick(Sender: TObject);varpicstream:tadoblobstream;beginadoquery1.edit;picstream:=tadoblobstream.Create(tblobfield(adoquery1.fie lds[1]),bmWrite);if form1.opendialog1.execute thenbeginpicstream.LoadFromFile(opendialog1.filename);picstream.Position:=0;adoquery1.edit;tblobfield(adoquery1.Fields[1]).loadfromstream(picstream);adoquery1.post;end;end;procedure TForm1.showbuttonClick(Sender: TObject);varghy:TADOBlobstream;pic:tjpegimage;beginghy := TADOBlobstream.Create(Adoquery1pic, bmRead);tryghy.Seek(JpegStartsInBlob(Adoquery1pic),soFromBeginning );Pic:=TJpegImage.Create;tryPic.LoadFromStream(ghy);Image1.Picture.Graphic:=Pic;finallyPic.Free;end;finallyghy.Freeend;end;procedure TForm1.DBNavigator1Click(Sender: TObject; Button: TNavigateBtn);beginif button in [nbFirst, nbPrior, nbNext, nbLast] thenshowbutton.Click;end;end.如果数据库中要存储的是BMP文件,则在procedure TForm1.showbuttonClick(Sender: TObject);过程中代码更改如下即可存储显示BMP文件格式的操作。

DELPHI存取JPEG、BMP图像到数据库完整解决方案

DELPHI存取JPEG、BMP图像到数据库完整解决方案
DELPHI存取JPEG、BMP图像到数据库完整解决方案(演示版)
版权所有 李明亮 2003-2008
成都地区的朋友需要我兼职的话,请联系。
nlh6@
==================================================================}
DBCtrls;
type
TForm1 = class(TForm)
DBGrid1: TDBGrid;
ADOConnection1: TADOConnection;
ADOTable1: TADOTable;
selectimage: TButton;
savetodb: TButton;
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, ExtDlgs, StdCtrls, ADODB, Grids, DBGrids, ExtCtrls,jpeg,
strm := tmemorystream.Create ;
try
image1.Picture.Graphic.SaveToStream(strm);
adotable1.Edit ;
strm.Position :=0;
DBImage1.dataField :=''; //dbimage只能显示BMP,否则myimage由BMP变为jpeg时会出错
adoconnection1.LoginPrompt := false;

如何用Delphi存取Microsoft SQL Server中的图像数据

如何用Delphi存取Microsoft SQL Server中的图像数据

如何用Delphi存取Microsoft SQL Server中的图像数据丁益祥
【期刊名称】《武汉纺织大学学报》
【年(卷),期】2005(018)011
【摘要】本文介绍了Microsoft SQLServer中大型二进制对象数据的存取机制,针对Delphi开发工具,介绍了一种通过文件流来存取Microsoft SQL Server中的图像数据的方法.
【总页数】3页(P107-109)
【作者】丁益祥
【作者单位】武汉科技学院,计算机科学系,湖北,武汉,430073
【正文语种】中文
【中图分类】TP311
【相关文献】
1.用VB6.0存取SQL Server 2000数据库中图像数据的方法 [J], 罗兴荣
2.基于VB存取SQL Server中图像数据方法的探讨 [J], 骆兴国
3.Delphi编程存取SQL Server图像数据 [J], 周洪斌;邵静燕
4.如何用存取SQL Server2000中的图像数据 [J], 贺军;李喜梅
5.Microsoft SQL Server环境中图像数据的存取方法研究 [J], 李弘;徐德生
因版权原因,仅展示原文概要,查看原文内容请购买。

在Delphi中轻松控制SQL的Image字段的数据存取

在Delphi中轻松控制SQL的Image字段的数据存取

本例程序所 能执行 的功能 ,主要包括 :为 某一学生加入相片,或为 S dn 表 的所有学生 t et u
或清除该学生相片等。 该方法简单且容易理解 ) ,而且在考生登录考试 加入相片 , 下面简要介绍控制 I A E字段存储数据 的 M G 系 统时 服务 器 能 自动 加 入 考 生 相 片 ( 生 相 片 考 e h 环境 中,按 以下 步骤设置表单 p 存放于服务器的文件夹下 ) ,及 时显示该照片。 方法。在 D l i 但为了简化问题 ,本 文仅介绍如何控制 I A E M G 及完成代码编写 :
料 的欠缺及 不完善 ,许 多用户及程序 员对如何控 制 IA E字 来存储数据 ,尚未掌握 和 了解,在 编写 实 M G 段
际程序 时 ,常受此 困扰 。本文针对这一问题 ,介 绍在 D p i eh 7轻松控制 S LSr r I A E Q Q e e 的 M G S L字段 ,来 v
相 片
p v t i r ae .
pic rP t:s n ; / si ue a ’t h t g / 照片文 件存 放位置 i r
{Pia elrt n r t d c a os} ve a i
poe ueT o . o Cet ( edr T bet ; rcd r F r F r rae S ne : O jc) m2 m
维普资讯
堡 壅 。 . .
在 D lh 中轻松控制 S L的 Iae字段 的数据存取 e i p Q mg
陈建兵 邹 月
( 广东省农业管理干部学院计算机 系,广东 广州 504 ) 160
[ 摘
要 ] 随着网络的普及 和发展 ,网络数据库 S LSr r 来越受到数据管理人 员的喜爱。 由于资 Q e e越 v

怎样往SQL数据库存放图象文件

怎样往SQL数据库存放图象文件

怎样往SQL数据库存放图象文件2006-08-19 18:38procedure SavePicture(img:TImage);varJPGImg: TJPEGImage;ADOData: TADOBlobStream;beginJPGImg := TJPEGImage.Create;ADOData :=TADOBlobStream.Create(TBlobField(DataModule1.PatientInfoTable.Fie ldByName('图像1')), bmWrite);tryJPGImg.Assign(img.Picture.Bitmap);JpgImg.SaveToStream(ADOData);finallyJPgImg.Free;ADOData.Free;end;end;读取代码如下:procedure LoadPicture(img: TImage);varPicData: TADOBlobStream;SQL Server存储图像数据的策略与方法目前对于图像数据的管理大都采用表+实体的方法,即图像数据以文件形式存放于指定的计算机目录下,在数据库表中只反映图像数据文件的存储路径。

这种管理模式,给数据的维护增加了难度,同时,也给数据的安全带来一定的隐患。

因此,要真正做到各类数据在数据库中安全管理,研究和探索直接将图像数据存储在数据库关系表中的方法是非常必要的。

笔者在Visual Basic 6.0开发环境中,采用客户机/服务器的工作方式,针对SQL Server数据库关系表中存储图像数据的问题进行了初步探讨,提出了一套基本解决方案,供读者参考。

一、存储图像数据的策略图像数据库技术一直致力于解决海量数字图像的有效存储和管理问题。

它是数据库技术的继承和发展,一方面,图像数据和文本数据存在着本质的区别,在文本数据领域得以成功应用的传统数据库技术,如果一成不变的照搬到图像数据库领域,结果往往是低效,甚至无效;另一方面,传统数据库的许多成果,如SQL语言、索引技术等都值得图像数据库借鉴。

用Delphi实现SQL Server下JPG文件的存取

用Delphi实现SQL Server下JPG文件的存取
本 文 就介 绍 了一种 a 用 D lh 来 实现 S LS re 下 J G文 件 保 利 e j p Q evr I 存 的方法 , 现将主要操作步骤描述如下 : 1建立演 示程 序数 据表 . 此例 中在 S eyr中已有 的示例 数据库 p b QLSre us中建立一个 名为 Pc et 表 . 的创建脚 本 如下 : i s的 T 表
C E T A L Pc etf R A ET B E[i s T ]
[aei e[ae m ] L SvTm ]dtt eNU L, i 兀i [ g] U L P li eN L c ma 、 N[R MAR ] E I G _ PR MA Y 0 PI Y T XTMA E ON[ I R ] 2准备 几张 ig格 式 的图 片 p
b gn e i ‘
将图片保存在 cj 文件夹 中备用 ,本例 中分别为 Up 、j 和 3 .g 、 P s P z g .
]g P。
建立 新项 目文件
打开 D lh 的 IE, ep i D 新建一个名为 SvPc et ae i s 的项 目, T 将主窗体单 元文 件保存 为 ma fr . s i omp 。 n a poeue f rcd r r i Fr Det  ̄ed r O jc; T mMam om s S n e. bet my T ) 4组 织主 窗体 及所 有控 件 . b sn  ̄ i 对 主窗 体 和所有 控件 按 以下 步骤进 行组 织 : Jgmae re Pl g. e; F () 主窗 体 的 N m 1将 a e属 性设 置 为" mMan 。a t n属性 设 置为 “ f r i”C pi o 在 e d n; 数据库中存取 Je p g图片演示程序” ;在 manot ̄¥的 itr c if n a E4 nef e部分的 a ()g bn odmae按钮 . 3 g击 tL al g 在 ue 段 中添加 对 ie 单 元 的引用 ; 主窗体 类声 明的 pia ss pg 在 r t v e部分 添 加 内 填人 如 下代 码 : 容为" gma ̄Tp gmae的一行 ; j l g JeI g” p poe ue f rc d r r i. n odm g Ci (ed r O jc T mMan tLa i ae ikSn e. be% b c T () 主 窗 体 上放 置 两 个 Go p o , 别 命 名 为 "b i ” “b B , 2在 ru B x分 g Fl 和 s D ” e b gn e i C pin分别 设置 为 “i ” ‘ a b s” at o Fl 和 ' t ae ; e Da in t d e n p g ie e uete xt f o Op J e F l. c t ne i o Ex h ; () s Fl 3在 bi e中放 置两 个 按 钮 和一 个 I g , 一个 按 钮 的 N me mae第 a 属 jgm g.od rm i ( Opnpg i.i N e pl ae aFo Flo e JeFlFl a ) L ed e em ; 性 和 C pin属 性 分 别设 置为 "tla l ae 和“ odI  ̄e 。 二个 按 at o bn ̄ dm g ” La n ”第 - / i g i . c rA s n p l ae m F e i ue s g0 g g ; lP t . i m ) 钮 的 N me属性 和 C pin属性 分 别设 置 为 ‘tS vT D ”和 "ae o a at o ‘n ae o B b S v T bn a e DBEn be t e tS v To . a ld r ; u
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Delphi sql存取图像
procedure TForm1.Button1Click(Sender:TObject);//插入图片过程
var
Stream:TMemoryStream;
begin
try
Stream:=TMemoryStream.Create;//创建内存流
Image1.Picture.Graphic.SaveToStream(Stream);//将图片保存到内存流中
adoquery1.Close;
adoquery1.SQL.Clear;
adoQuery1.SQL.Add('Insert into tbltemp(Image)values
(:photo)');//进行插入操作
adoQuery1.Parameters.ParamByName('photo').LoadFromStream(Strea m,ftBlob);//读取保存的内存图
adoquery1.ExecSQL;
finally
Stream.Free;//释放内存流
end;
end;
procedure TForm1.Button2Click(Sender:TObject);//读取图片过程
var
Stream:TMemoryStream;
Jpg:TjpegImage;
begin
ADOQuery1.Close;
ADOQuery1.SQL.Text:='SELECT*FROM tbltemp';//查询图片
ADOQuery1.Open;
if not ADOQuery1.FieldByName('Image').IsNull then
begin
Stream:=TMemoryStream.Create;
Jpg:=TjpegImage.Create;
TBlobField(ADOQuery1.FieldByName('Image')).SaveToStream(Stream) ;//显示的转换为BlobField并保存到内存流
Stream.Position:=0;
jpg.LoadFromStream(Stream);//加载图片
image2.Picture.Assign(Jpg);
end
else
begin
image2.Picture:=nil;
end;
end;
sql server2005字段类型为image
delphi使用的单元为jpeg,db,dbtables;
delphi存储图片代码片段
procedure TForm1.btnPostClick(Sender:TObject);
var
lMemoStream:TMemoryStream;
jpg:TJpegImage;
begin
lMemoStream:=TMemoryStream.Create;
jpg:=TJpegimage.Create;
jpg.Assign(Img.Picture.Graphic);
jpg.SaveToStream(lMemoStream);
lMemoStream.Position:=0;
TBlobField(dm1.adoqrytea.fieldbyname('image')).LoadFromStream(lMemoStream);
dm1.adoqrytea.Post;
end;
delphi从数据库读取到image中的代码片段
procedure TForm3.FormShow(Sender:TObject);
var
MyJPEG:TJPEGImage;
MS:TMemoryStream;
begin
MyJPEG:=TJPEGImage.Create;
MS:=TMemoryStream.Create;
if not dm1.adostuview.Active then
dm1.adostuview.Open;
with dm1.adostuview do
begin
TBlobField(dm1.adostuview.Fields[9]).SaveToStream(MS);
ms.Position:=0;
MyJPEG.LoadFromStream(MS);
Img.picture.assign(MyJPEG);
MyJPEg.free;
MS.free;
end;
end;
uses,jpeg,db
show
procedure Tfrmyd.SpeedButton4Click(Sender:TObject);
const
JPEG_FLAG_BEGIN=$D8FF;
JPEG_FLAG_END=$D9FF;
var
Stream:TMemoryStream;
Flag1,Flag2:word;
Jpg:TjpegImage;
begin
dmdata.ADOQupdate.Close;
dmdata.ADOQupdate.SQL.Text:='SELECT*FROM Restaurant where reno=''5''';//查询图片
dmdata.ADOQupdate.Open;
if not dmdata.ADOQupdate.FieldByName('photo').IsNull then
begin
Stream:=TMemoryStream.Create;
TBlobField(dmdata.ADOQupdate.FieldByName('photo')).SaveToStream(Stream);//显示的转换为BlobField并保存到内存流
Stream.Position:=0;
Stream.Read(Flag1,SizeOf(Flag1));
Stream.Position:=Stream.Size-2;
Stream.Read(Flag2,sizeOf(Flag2));
if(flag1=JPEG_FLAG_BEGIN)and(flag2=JPEG_FLAG_END)then
begin
Stream.Position:=0;
Jpg:=TjpegImage.Create;
jpg.LoadFromStream(Stream);//加载jpeg图片
image1.Picture.Assign(Jpg);
jpg.Free;
end
else
begin
Stream.Position:=0;//加载bmp图片
image1.Picture.BITMAP.LoadFromStream(Stream);
end;
end
else
begin
image1.Picture:=nil;
end;
end;
shave
procedure Tfrmyd.SpeedButton2Click(Sender:TObject);
var
Stream:TMemoryStream;
begin
if OpenDialog1.Execute then
begin
image1.Picture.LoadFromFile(OpenDialog1.FileName);
try
Stream:=TMemoryStream.Create;//创建内存流
Image1.Picture.Graphic.SaveToStream(Stream);//将图片保存到内存流中dmdata.ADOQupdate.Close;
dmdata.ADOQupdate.SQL.Clear;
dmdata.ADOQupdate.SQL.Add('Insert into Restaurant(photo)values(:photo)'); //进行插入操作
dmdata.ADOQupdate.Parameters.ParamByName('photo').LoadFromStream(Stream,ft Blob);//读取保存的内存图
dmdata.ADOQupdate.ExecSQL;
finally
Stream.Free;//释放内存流
end;
end;
end;
内存流中转换jpeg传入imagelist中
uses
Jpeg
myjpg:=TJPEGImage.Create;
mybmp:=TBitmap.Create;
tmpbmp:=TBitmap.Create;
myjpg.LoadFromFile(JPEG文件);
mybmp.Assign(myjpg);
tmpbmp.Width:=136;
tmpbmp.Height:=160;
tmpbmp.Canvas.StretchDraw(tmpbmp.Canvas.ClipRect,mybmp);
ImageList.Add(tmpbmp,nil);。

相关文档
最新文档