CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  数据库相关

将图像直接插入数据库!-->在线等待,今晚结贴。

楼主rockynmc(rockynmc)2002-11-25 18:19:39 在 Delphi / 数据库相关 提问

我现在需要将多种格式的图像文件(*.bmp,*.Jpg,*.TIFF)直接插入到SQL   SERVER的数据库当中,test表的数据库字段是这样的:  
  id                 char    
  pic               image  
   
  我做了一个简单的Query1,主要代码是:  
  Query1.sql.add('insert   into   test(id,pic)   value(:id,:pic)');  
  Query1.ParamByname('id').Asstring:='1';  
  Query1.ParamByname('pic').LoadFromFile('d:\1.bmp',ftBlob);  
  Query1.ExecSql;  
   
  这样我的数据的确更新上去了,图片也上去,但有个问题:  
  我较小的图片,20k以下的基本正常   ,大于20k后就会出问题.  
  我用的TDBImage来显示,大于20k的图下显示出来上部会出现一片黑色的块,若是上传的JPG就根本显示不出来了。  
   
  请问各位高手,有没有其它方法来上传和显示呢?我的图片不会超过1M。  
  是不是需要转换成什么位流方式呢?  
  我试过Tbitmap和Tgraphic都不怎么行得通,不知Timage可以否?又该如何用呢》?  
   
  问题解决马上结贴. 问题点数:100、回复次数:15Top

1 楼lqdmafeng()回复于 2002-11-25 19:37:16 得分 10

你使使转成memorystream,我存WORD文档的时候转成流,读的时候,也使先存成流,然后再IMAGE.loadfromstream。使使,不行再说!哦棵!Top

2 楼hawksoft(明月清风)回复于 2002-11-25 19:43:35 得分 10

修改BDE的ODBC配置中的参数:  
  在Delphi   开发环境->Database->explore->你的ODBC->修改BLOB   SIZE,BLOBS   TO   CACHE两个参数.  
  祝你好运.  
  Top

3 楼siyu2002(阿努比斯)回复于 2002-11-25 19:46:26 得分 0

参考一下  
  http://expert.csdn.net/Expert/topic/1204/1204374.xml?temp=.9548761Top

4 楼rockynmc(rockynmc)回复于 2002-11-25 21:36:02 得分 0

不行  
  还有没有其它高招。  
  我现在的问题是写进去的内容读出来时,小的BMP没问题,大的不行。  
  这图形应转换成什么流方式来表达呢?Top

5 楼older(井底蛙同样可以向往大海)回复于 2002-11-25 21:46:50 得分 10

你这样试一试  
   
  stringstream1   :=   TStringStream.create(nil);  
  img.savetostream(stringstream1);  
  Query1.sql.add('insert   into   test(id,pic)   value(:id,:pic)');  
  Query1.ParamByname('id').Asstring:='1';  
  query1.paramByName('pic').asblob   :=   stringstream1.datastring;  
  query1.executesql;  
  stringstream1.free;    
  img是一个支持显示图像的image控件Top

6 楼devil(通吃)回复于 2002-11-26 09:34:22 得分 20

给你一个Table存图片的参考  
  以下是我觉得在所有图片存取方法中最简单的方法  
  use   jpeg,Clipbrd、、、、、、、、、、、、、  
  //Save   to   database  
  Image1.Picture.LoadFromFile('FileName');  
  if   not   (Image1.Picture.Graphic   Is   TBitmap)   then  
  begin  
      ClipBoard.Assign(Image1.Picture);  
      Image1.Picture.Bitmap.Assign(ClipBroad);  
      ClipBoard.Clear;  
  end;//Change   the   picture   that's   not   belonged   to   .bmp   to   .bmp  
          //   picture    
  Table1.Edit;  
  Table1.FieldByName('Image').Assign(Image1.Picture);  
  Table1.Post;  
  //get   from   database  
  Image1.Picture.Bitmap.Assign(TPicture(Table1.FieldByName('Image')));Top

7 楼zfmich()回复于 2002-11-26 09:40:06 得分 0

用TBLOBFIELDTop

8 楼lyhold(让你飞)回复于 2002-11-26 09:48:11 得分 0

 
                                adoquery1.Edit   ;  
                                Tblobfield(adoquery1.FieldByName('zp')).Assign(image1.Picture   );  
                                adoquery1.Post   ;  
  Top

9 楼lyhold(让你飞)回复于 2002-11-26 09:51:15 得分 0

显示:  
       
  dbImage1.Picture.Bitmap.Assign(TBLOBField(adoquery1.Fields[0]));  
  Top

10 楼star_of_light(Supper Star)回复于 2002-11-26 10:40:15 得分 0

If   OpenDialog1.Execute   then     //保存图形  
      begin  
          ADOQuery1.Edit;  
          TBlobField(ADOQuery1.FieldByName('Pic')).LoadFromFile(OpenDialog1.FileName);  
          ADOQuery1.Post;  
      end;Top

11 楼rockynmc(rockynmc)回复于 2002-12-07 19:38:26 得分 0

我的问题始终没有得到更好的解决,冒昧得很,哪位有高招,指点小弟一把  
    star_of_light(星星之光)   的用ADO不会有错,(同样的方法若用ODBC或者BDE都不行),但此方法只能用于保存BMP格式的图片,而没办法解决通用的其它格式,如JPG,GIF等,这样一来,造成数据库增大,影响网络传输。  
  有没有更好的办法来上传JPG等图形格式呢?Top

12 楼star_of_light(Supper Star)回复于 2002-12-07 20:52:13 得分 50

我前面介绍的方法我在SQL   Server中保存过BMP,JPG图片和Word文档。下面是另一种方法:  
  Var  
      Fs:TFileStream;  
  begin  
      If   OpenDialog1.Execute   then  
      begin  
          Fs:=TFileStream.Create(OpenDialog1.FileName);                  
          ADOQuery1.Edit;  
          TBlobField(ADOQuery1.FieldByName('Image')).LoadFromStream(Fs);  
          ADOQuery1.Post;  
      end;  
  end;Top

13 楼star_of_light(Supper Star)回复于 2002-12-07 21:01:56 得分 0

Var  
      Stream:TStream;  
  begin  
      If   OpenDialog1.Execute   then  
      begin  
          try  
              Stream:=Query1.CreateBlobStream(Query1.FieldByName('Image'),bmRead);                  
              ADOQuery1.Edit;  
              TBlobField(Query1.FieldByName('Image')).LoadFromStream(Stream);  
          ADOQuery1.Post;  
        finally  
            Stream.Free;  
        end;  
      end;  
  end;  
  Top

14 楼nico_h(nico)回复于 2002-12-08 15:56:08 得分 0

rockynmc   (rockynmc)   ,我用你的方法,好像库并没有变大啊,你怎么发现图片存到库里了?star_of_light(星星之光)   ,assign方法没有在dbimage里显示什么东西,是没存进库里呢?还是没取出?Top

15 楼rockynmc(rockynmc)回复于 2002-12-10 15:53:10 得分 0

ar_of_light(星星之光)   ,你的第二种办法显示不对的呀!?Top

相关问题

  • "关于数据库插入的问题"在线等待
  • 往数据库中插入图片(在线等待)
  • 如何向数据库插入数据——在线等待
  • 数据库插入错误---在线等待
  • 急,excel插入数据库问题!在线等待!!!
  • 在vb客户端如何向sql数据库中插入图像?
  • 把sybase数据库里的数据插入到SQL Server数据库中的方法?(在线等待)
  • 一个关于数据库插入的问题,急!在线等待!!!!
  • 关于asp如何向数据库中插入NULL的问题,在线等待~~
  • 数据库插入问题

关键词

  • 数据库
  • 图像
  • sql
  • adoquery
  • pic
  • fieldbyname
  • parambyname
  • picture
  • stringstream
  • query

得分解答快速导航

  • 帖主:rockynmc
  • lqdmafeng
  • hawksoft
  • older
  • devil
  • star_of_light

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo