在程序设计中,我需要在数据库中存储图片文件,如何实现?(我用的数据库为SQL SERVER,最好能说明存储图片字段的属性,解决方法)),谢谢!

解决方案 »

  1.   

    属性好像就是image或什么大对象或二进制。一般还是保存到服务器的子目录比较好吧,数据库里只保存它的【相对】路径
      

  2.   

    使用image字段,
    用流文件保存到字段中。
      

  3.   

    在delphi中用query的blob数据类型倒入文件,然后存入数据库中的对应字段(image或什么大对象或二进制)
      

  4.   

    TBlobField(DataSet.FieldByName('字段名')).LoadFromFile(完整文件名);
      

  5.   

    1. 图像数据的选择及保存procedure Tform1.selectimageClick(Sender: TObject); //选择图像
    begin
    if openpicturedialog1.Execute then
    image1.Picture.LoadFromFile(openpicturedialog1.FileName );
    end;
    procedure Tform1.savetodbClick(Sender: TObject); //保存图像到数据库
    var
    ext:string;
    begin
    if image1.picture.Graphic <> nil then //避免image1中无图像保存出错
    begin
    adotable1.Edit ;
    adotable1.FieldByName(myimage).Assign(image1.Picture.Graphic);
    //以下记录保存到数据库的图像格式
    ext:=extractfileext(openpicturedialog1.FileName ); //取出文件扩展名
    if uppercase(ext) = .BMP THEN
    adotable1.FieldByName(isbmp).VALUE := 1 //BMP型图像数据
    ELSE IF (UPPERCASE(EXT) = .JPEG) OR (UPPERCASE(EXT) = .JPG) THEN
    adotable1.FieldByName(isbmp).VALUE := 0; //JPEG型图像数据
    ADOTABLE1.Post ;
    end;
    end;   2. 图像数据的读取及显示procedure Tform1.ADOTable1AfterScroll(DataSet: TDataSet); //ADOTable1的AfterScroll事件方法程序
     var
      jpegimage:tjpegimage;
     begin
      image1.Picture.Graphic :=nil; 
      //下边BMP、JPEG两种图像数据必需分别处理
      if adotable1.fieldbyname(isbmp).Asstring = 1 then //BMP型图像数据
       image1.Picture.bitmap.Assign(adotable1.fieldbyname(myimage))
       //上边语句中的bitmap不能为graphic,否则会出错
      else if adotable1.fieldbyname(isbmp).asstring = 0 then //JPEG型图像数据
       begin //begin2
        jpegimage := tjpegimage.Create ; //通过jpegimage将图像显示在image1,否则会出错
        try
         jpegimage.Assign(adotable1.fieldbyname(myimage));
         image1.Picture.Graphic :=jpegimage;
        finally
         jpegimage.Free ;
        end; //end try
      end; //end begin2
    end;   注:别忘了在单元文件接口部分的uses语句中添入JPEG单元引用。  以上程序代码在DELPHI6.0+SQL(或ACCESS或PARADOX)数据库下运行通过。
      

  6.   

    图片格式在数据库中就是选IMAGE,存储及读取一般是用流的方式,我给你一段代码,分别是上传附件与下载附件的功能:
    上传:var
    fs:TFileStream;
    FtpStr:string;beginFtpStr:=edt3.Text;//这里主要是用DlgOpen控件选择的文件名
    fs:=Tfilestream.Create(FtpStr,Fmopenread);
    qry1.Close;
    qry1.SQL.Clear;
    qry1.SQL.Add('select * from 文件管理');
    qry1.Open;qry1.Append;qry1.FieldByName('主题').AsString:=edt1.text;
    qry1.FieldByName('类别').AsString:=cbb1.Text;
    qry1.FieldByName('附件大小').AsString:=FileSizeStr;
    Tblobfield(qry1.FieldByName('附件')).LoadFromStream(fs);//这里就是保存附件的方式
    qry1.Post;
    fs.Free;
    下载:
    TBlobField(qry1.FieldByName('附件')).SaveToFile(dlgSave1.FileName);
    以上希望对你有帮助!
      

  7.   

    image字段,blobfield
    用流文件保存到字段中 ...
      

  8.   

    我以前接触过一个把图片保存到数据库里的系统,用的数据库也是sql server,运行了几个月时间后,貌似效率变得难以忍受。还是建议采用目录的形式保存
      

  9.   

    1、SQL可以保存图像数据,保存在IMAGE字段中。本地SQL可以正常读写。如果SQL服务器,就要变法读了。
    2、建议大的图像不能保存在数据库中,否则。数据运行很慢。
      

  10.   

    这是SQL SERVER的机制问题,我用其他数据库不存在慢的问题.
      

  11.   

    image类型,数据存为二进制,取出数据较慢,建议存图片地址。
      

  12.   

    用TBlodFiled,不管是什么文件,一律用流加载存放该字段中。
      

  13.   

    我记得要把图片格式转换为流,以前在ACCESS里面做过
      

  14.   

    oracle中的话用bolob字段
    sqlserver中用binary字段
      

  15.   

    数据表中设置至少两个字段,一个字段保存二进制原始文件,一个字段记录文件的类型。本人觉得,楼主非这样做的话,可以在上传文件的时候,先将文件压缩,还原的时候,再将文件解压,再根据保存的文件类型用对应的应用程序打开。
    这样的话可以最大限度节省磁盘空间,不过,浪费了点时间,增加了压缩解压缩这两个步骤。  //C:\TestDoc.Doc
      //压缩原文件,文件名为原文件加ZIP
      MyCompact('C:\TestDoc.Doc');
      qry1.Edit;
      TBlobField(qry1.FieldByName('照片')).LoadFromFile('C:\TESTDOC.DOC.ZIP');
      qry1.FieldByName('文件类型').AsString:='DOC';
      qry1.Post;仅供参考
      

  16.   

    procedure TForm1.Button1Click(Sender: TObject);
    var MyImg:TBitmap;
        MyStream:TMemoryStream;
    begin
    try
      MyImg:=TBitmap.Create;
      MyImg.LoadFromFile('C:\Documents and Settings\zhengys\桌面\颜色\色块123.JPG');
      MyStream:=TMemoryStream.Create;
      Myimg.SavetoStream(MyStream);  ADODataSet1.Edit;
      (ADODataSet1.FieldByName('TP') as TBlobField).LoadFromStream(MyStream);
      ADODataSet1.Open;
    finally
      MyImg.Free; 
      MyStream.Free; 
    end;
    end;
      

  17.   

    数据库设为二进制就可以了;然用用BLOB方试:TBlobField(DataSet.FieldByName('字段名')).LoadFromFile(文件名);