我用感知控件DBImage1来直接连接一个image(image為連接數據庫dataset中的一個圖片型字段,在server sql中的類型為image類型)字段,为什么在保存很小的图片(几k)就可以,一旦保存大图片,根本无法保存。想知道这是为什么?大家在把图片保存在数据库中又是如何进行的啊!
谢谢!

解决方案 »

  1.   

    多大就不行了?我一般村的图片都不大,存大的图片用dbimage效率很低,非常慢,你还是就存小的把。
      

  2.   

    to liuex1235(盲流) :"用blob进行操作"是什麼意思,具體是如何操作?
      

  3.   

    TBlobField(AQuery.FieldByName('Image')).LoadFromStream(Stream);
    TBlobField(AQuery.FieldByName('Image')).LoadFromFile('C:\a.bmp');
      

  4.   

    存图片
    var
    testStream:TMemoryStream;
    begin
      testStream := TMemoryStream.Create; //創建內存流
      Image1.Picture.Graphic.SaveToStream(testStream);//將圖片保存至內存流中
      adoquery1.Close;
      adoquery1.SQL.Clear;
      adoQuery1.SQL.Add('Insert into test_test (id,photo) values (:p1,:P2)');
      adoquery1.Parameters.ParamByName('p1').Value := '001';
      adoQuery1.Parameters.ParamByName('p2').LoadFromStream(testStream,ftGraphic); //讀取保存的內存圖
      adoquery1.ExecSQL;
      testStream.Free;//釋放內存流
    end;
    取图的方法与村类似。
      

  5.   

    with od2 do
     begin
        // defaultext:='jpg';
        filter:='*.jpg,*.tif,*.bmp,*.png';
        if od2.execute then
        begin
          bmp1:=TBitmap.Create;
          jpg1:=TJpegImage.Create;
          try
            jpg1.LoadFromFile(od2.FileName);
            bmp1.Assign(jpg1);
            adoquery1.Edit;
            adoquery1.FieldByName('tupian').Assign(bmp1);
            adoquery1.fieldbyname('name').AsString:=dbedit15.Text;
            adoquery1.post;
          finally
            jpg1.Free;
            bmp1.Free;
          end;     dbedit15.Text:=od2.FileName;
       end;
    end;
    点击选择图片按钮的同时保存了选择的图片  
    od2是opendialog
      

  6.   

    应该使用BLOB类型存储。
    BLOB=(Binary Large Object)二进制大对象类型。它可以用来存储图形声音视频数据等等,尽管关系型数据库管理系统最初不是为它们而设计的,但是多媒体数据可以存储在BLOB 或LONG RAW 类型(Oracle里的讲法)的字段内。
    但是要注意:不同的DBMS对BLOB格式定义是不一样的,据我所知Oracle的BLOB(LONG RAW)设计就和其他家的格式不同,需要转化(小树不修不直溜,人不修理艮赳赳啊)