网页功能: 加入收藏 设为首页 网站搜索  
DELPHI存取JPEG文件到SQL Server数据库
发表日期:2003-07-23作者:高红岩[] 出处:  

近日笔者书写一个小型的学生管理系统时,需要用到ADO控件存取SQL Server数据库图片,查看资料发现基本都是针对BMP文件进行操作(巨增数据库大小),但发现了★eagletian★高手翻译的ADO英文技术文档,里面涉及到了数据库存取JPEG文件的关键技术,在win98+sql server桌面版中测试通过,运行良好,现于源码公开如下:

unit Unit1;

interface

uses

 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

 ExtCtrls, DBCtrls, Grids, DBGrids, Db, ADODB,jpeg, StdCtrls,dbtables;

  {一定要USES JPEG单元,使能存储JPG文件格式}

type

 TForm1 = 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;

var

 Form1: TForm1;

implementation

{$R *.DFM}

function JpegStartsInBlob(PicField:TBlobField):integer;

  var

  ghy: TADOBlobstream;

  buffer:Word;

  hx: string;

  begin

  Result := -1;

  ghy := TADOBlobstream.Create(PicField, bmRead);

  try

   while (Result = -1) and (ghy.Position + 1 < ghy.Size) do

   begin

   ghy.ReadBuffer(buffer, 1);

   hx:=IntToHex(buffer, 2);

   if hx = ’FF’ then begin

    ghy.ReadBuffer(buffer, 1);

    hx:=IntToHex(buffer, 2);

   if hx = ’D8’ then Result := ghy.Position - 2

    else if hx = ’FF’ then

       ghy.Position := ghy.Position-1;

   end; //if

   end; //while

   finally

   ghy.Free

   end; //try

  end;

procedure TForm1.savebuttonClick(Sender: TObject);

var

picstream:tadoblobstream;

begin

adoquery1.edit;

picstream:=tadoblobstream.Create(tblobfield(adoquery1.fields[1]),bmWrite);

if form1.opendialog1.execute then

begin

picstream.LoadFromFile(opendialog1.filename);

picstream.Position:=0;

adoquery1.edit;

tblobfield(adoquery1.Fields[1]).loadfromstream(picstream);

adoquery1.post;

end;

end;

procedure TForm1.showbuttonClick(Sender: TObject);

var

ghy:TADOBlobstream;

pic:tjpegimage;

begin

ghy := TADOBlobstream.Create(Adoquery1pic, bmRead);

try

 ghy.Seek(JpegStartsInBlob(Adoquery1pic),soFromBeginning);

 Pic:=TJpegImage.Create;

 try

  Pic.LoadFromStream(ghy);

  Image1.Picture.Graphic:=Pic;

 finally

  Pic.Free;

 end;

finally

ghy.Free

end;

end;

procedure TForm1.DBNavigator1Click(Sender: TObject; Button: TNavigateBtn);

begin

if button in [nbFirst, nbPrior, nbNext, nbLast] then showbutton.Click;

end;

end.

如果数据库中要存储的是BMP文件,则在procedure TForm1.showbuttonClick(Sender: TObject);过程中代码更改如下即可存储显示BMP文件格式的操作。

procedure TForm1.showbuttonClick(Sender: TObject);

var

ghy:TADOBlobstream;

pic:tbitmap;

begin

ghy := TADOBlobstream.Create(Adoquery1pic, bmRead);

try

{ ghy.Seek(JpegStartsInBlob(Adoquery1pic),soFromBeginning);}

 Pic:=Tbitmap.Create;

 try

  Pic.LoadFromStream(ghy);

  Image1.Picture.Graphic:=Pic;

 finally

  Pic.Free;

 end;

finally

ghy.Free

end;

end;

  到此用DELPHI存取JPEG文件到SQL Server数据库中的具体操作已经叙述完毕。

我的网站:

http://delphijl.99898.com

QQ:123168091

我来说两句】 【加入收藏】 【返加顶部】 【打印本页】 【关闭窗口
中搜索 DELPHI存取JPEG文件到SQL Server数据库
本类热点文章
  DBGrid 应用全书
  DBGrid 应用全书
  TWebBrowser编程简述
  用户界面设计的技巧与技术
  用户界面设计的技巧与技术
  初探Delphi 7 中的插件编程
  获取主板BIOS的信息
  网卡的远程网络唤醒
  Delphi 2006简介(Dexter)
  用Delphi开发数据库程序经验三则
  Delphi面向对象编程的20条规则
  Delphi面向对象编程的20条规则
最新分类信息我要发布 
最新招聘信息

关于我们 / 合作推广 / 给我留言 / 版权举报 / 意见建议 / 广告投放  
Copyright ©2003-2024 Lihuasoft.net webmaster(at)lihuasoft.net
网站编程QQ群   京ICP备05001064号 页面生成时间:0.00484