用Image类型字段,dbimage控件显示。(sql server 2000下)

解决方案 »

  1.   

    只要是二进制类型均可以用(image,text等)。关键是转换。
      

  2.   

    用TBlobStream或TADOBlobStream(ADO下用)保存和读取
    用TImage.Picture.LoadFromStream显示
      

  3.   

    用TJPEGImage.LoadFromStream然后assign给TImage显示
      

  4.   

    当我保存的图片的图片名是比较短时(box1.jpg)没有问题,但图片名是比较长时(2000510_6.jpg)就有问题,提示“string or binary data would be
    truncated”,将2000510_6.jpg改为比较短的图片名就没有问题。什么原因?
      

  5.   

    Assign图片bmp的一般不会有问题!
    但是jpg的有时会有错误,或Assign不上的问题!
    试一下Assgin对应的picture 如果还不行
    你可以用Dbimage的CopytoClipboard和pastefromclipboard
    这个方法不会有问题,不过存储的jpg可能会变大,效率问题你需要考虑!
      

  6.   

    原样拷贝了我一段程序,数据集是基于ClientDataSet的,但大体思路是这样的:
    procedure TfrmObjectPhoto.ShowPhoto(DataSet: TDataSet);
    var
      PicBlob: TStream;
      jpeg: TJpegImage;
    begin
      with DataModuleObjectManage.cdsPhoto do
      begin
        if UpdateStatus = usInserted then
        begin
          Image1.Picture.LoadFromFile(OpenPictureDialog1.FileName);
          SetImageProperty();
        end
        else
        begin
          Edit;
          PicBlob := CreateBlobStream(FieldByName('Photo'), bmReadWrite);
          Post;      if PicBlob.Size = 0 then
            Image1.Picture := nil
          else
          begin
            jpeg := TJpegImage.Create;
            jpeg.LoadFromStream(PicBlob);
            Image1.Picture.Assign(jpeg);
            SetImageProperty();
            jpeg.Free;
          end;      PicBlob.Free;
        end;
      end;
    end;
      

  7.   

    这是一段保存图象得代吗:
    procedure TfrmObjectPhoto.btnNewClick(Sender: TObject);
    var
      NewPhotoID: Integer;
      PhotoStream: TFileStream;
      ThumbStream: TMemoryStream;
    begin
      if OpenPictureDialog1.Execute then
      begin
        PhotoStream := TFileStream.Create(OpenPictureDialog1.FileName, fmShareDenyNone);
        ThumbStream := TMemoryStream.Create();
        CreateThumbnail(PhotoStream, ThumbStream, 200, 200);    with DataModuleObjectManage do
        begin
          SocketConnection1.AppServer.GetSequenceNo(FPhotoSequenceIndex, NewPhotoID);      cdsPhoto.Append;
          cdsPhoto.Edit;
          cdsPhoto.FieldByName('PhotoID').AsInteger  := NewPhotoID;
          cdsPhoto.FieldByName('ObjectID').AsInteger := FObjectID;
          cdsPhoto.FieldByName('Descript').AsString  := '编号为' + IntToStr(NewPhotoID) + '的照片';
          TBLOBField(cdsPhoto.FieldByName('Photo')).LoadFromStream(PhotoStream);
          TBLOBField(cdsPhoto.FieldByName('Thumbnail')).LoadFromStream(ThumbStream);
          cdsPhoto.Post;
        end;    PhotoStream.Free;
        ThumbStream.Free;
      end;
    end;
      

  8.   

    我用ADO连接ACCESS数据库,在数据库里建了一个表,一个字段为自动增长的主健,另一个为OLE对象类型(相当于其他数据库的二进制类型)。
    连接SQL SERVER是一样的。代码如下:
      if OpenDialog1.Execute then
      begin
        with ADOTable1 do
        begin
          Insert;
          TBlobField(FieldByName('Files')).LoadFromFile(OpenDialog1.FileName);
          Post;
        end;
      end;
      

  9.   

    这是我保存的一段代码,其中Dialog控件不要选用OpenPictureDialog,直接用OpenDialog,否则就无法查找到JPG的文件。procedure TForm1.BitBtn2Click(Sender: TObject);
    begin
    adotable1.Edit;
    (adotable1.FieldByName('zp') As TBlobField).LoadFromFile(s);//写文件
    adotable1.post;
    end;procedure TForm1.DBGrid1DblClick(Sender: TObject);
    begin
    if adotable1.FieldbyName('zp').IsNull=false then//判断文件是否已经存入数据库
      showmessage('ok!')
      else
      showmessage('go on!')
    end;Image1.Picture.Bitmap.Assign(TBlobField(table1.FieldByName('ZP')));
    //取图片!