各位高手,怎么样将一个bmp文件保存在数据库中,然后再取出来

解决方案 »

  1.   

    表中建立一个ole字段//取出表中ole对象字段的值 
        adoquery1.SQL.Clear ;
        adoquery1.SQL.Add('select * from  bb');
        adoquery1.Open ;
        tblobfield(adoquery1.FieldByName('s6')).savetofile('c:\test1.bmp') ;
        
        
     //用动态sql语句插入有ole对象字段的记录
        sqlstring := 'insert into bb(s1,s2,s6) values("12","45",:bb)' ;
        adoquery1.SQL.Add(sqlstring) ;
        adoquery1.Parameters.ParamByName('bb').loadfromfile('c:\test1.bmp',ftblob) ;
        adoquery1.execsql;刚看到的,你试用一下:)
      

  2.   

    用TBlobField来作:
    if not OpenPictureDialog1.Execute then exit;
    Table1.Edit;
    TBlobField(Table1.FieldByName('Pic')).LoadFromFile(OpenPictureDialog1.FileName);
    Table1.Post;
      

  3.   

    procedure TfrmDataModul.OleImageMouseDown(Sender: TObject;
      Button: TMouseButton; Shift: TShiftState; X, Y: Integer);var
      frm :TfrmOleToBig;
    begin
      try
        if(ssRight in Shift) then
        begin
          OleImage.InsertObjectDialog();
          exit;
        end;
        if((ssCtrl in Shift) and (Button=mbLeft)) then
        begin
          if(OleImage.State=osLoaded) then
            OleImage.Run;
          exit;
        end;
    end;
    procedure TfrmDataModul.BitBtnUpdClick(Sender: TObject);
    var
      strOldValue,strNewValue :String;
      UpdateId :Integer;
      SavePlace: TBook;//保存數據的當前位置
      Stream :TADOBlobStream;
      Stream1 :TADOBlobStream;
    begin    with DM.tbEdit do
        begin
          Close;
          TableName := 'data_modul';
          Open;      Locate('id', UpdateId, [loPartialKey]);      Edit;
          if(OleImage.State = osLoaded)then
          begin
          Stream := TADOBlobStream.Create(TBlobField(FieldByName('cad')),bmReadWrite);
            try
              OleImage.SaveToStream(Stream);
            finally
              Stream.Free;
            end;
          end;
        end;
    end;
      

  4.   

    也可去
    http://expert.csdn.net/Expert/topic/1171/1171608.xml?temp=9.601992E-02
    看看代碼
      

  5.   

    我用的是ADO控件连接。首先在数据库中建立一个含有位图地字段,然后利用简帖板的图像拷贝的功能,首先进行图像格式的转换,在利用数据库操作的函数完成。给你部分主要代码看看:
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      if OpenPictureDialog1.Execute then
      begin
        try
        Image1.Picture.LoadFromFile(OpenPictureDialog1.FileName);
        except
        Application.MessageBox('文件类型错误','错误',MB_OK);//?????
        end;
        if not (Image1.Picture.Graphic Is TBitmap) then
        begin
          ClipBoard.Assign(Image1.Picture);
          Image1.Picture.Bitmap.Assign(ClipBoard);
          ClipBoard.Clear;    end;//Change the picture that's not belonged to .bmp to .bmp
           // picture
        ADOTable1.Edit;
        ADOTable1.FieldByName('pic').Assign(Image1.Picture);
        ADOTable1.Post;
        image1.Picture.Bitmap.Assign(nil);
        //get from database
        //Image1.Picture.Bitmap.Assign(TPicture(Table1.FieldByName('Image')));
      end;
    end;
      

  6.   

    var
      Stream : TMemoryStream;
    begin
      Stream=TMemoryStream.Create;
      Stream.LoadFromFile('c:\12.bmp');
      Table1.append;
      (Table1.Fieldbyname('jj').as TBlobFile).LoadFromStream(Stream)
      Table1.post;
      Stream.Free;
    end;
      

  7.   

    我使用几种方法,但总是出现‘invalid blob length',不知道为什么???