自定义记录文件它规定每条记录其长度要相等,但是图片文件的长度却不是相等的,所以,不怎么好解决。建议用Char型定义,如:Bitmap:array[0..5000] of Char;//5K大小
然后将图片用流读出来,再保存!

解决方案 »

  1.   

    不用定义这种类,可直接使用流来存储:数据库用BLOB字段,若为MSSQL设为Image类型保存:Adoquery1.Parameters.ParamByName('CC').LoadFromFile(FileNameByPath, ftBlob);//文件
    Adoquery1.Parameters.ParamByName('CC').LoadFromStream(PicStream, ftBlob);//图片
    提取:(Adoquery1.FieldByName('模板') as TBlobField).SaveToFile(FileNameByPath);//文件
    (Adoquery1.FieldByName('图片') as TBlobField).SaveToStream(PicStream);//图片
    -------------------------------------------------------------------
    使用stream:var
      PicStream:TMemoryStream
    --------------------
      PicStream:=TMemoryStream.Create
      PicStream.LoadFromFile(FileNameByPath)  PicStream.free;
      

  2.   

    流的类可以可以使用 TMemoryStream来存储!如果从文件中读入可以使用TFilestream,其实使用TBlobField.LoadFromStream、和TBlobField.LoadFromFile可以进行操作的!读出可以使用SavetoFile 和SaveToStream就可以了1
      

  3.   

    请问我下面的程序有什么问题?我使用的是AdoTable控件
    Cstring := 'provider= %s;Data Source=%s';
       if OpenPictureDialog1.Execute then begin
         Path := ExtractFilePath(OpenPictureDialog1.FileName);
         ADOTbl.ConnectionString:=Format(Cstring,['Microsoft.Jet.OLEDB.4.0',path]);
         AdoTbl.TableName:= 'Tp';
         AdoTbl.Active   := True;
         Ms_Stream:=TMemoryStream.Create;
         Ms_Stream.LoadFromFile(OpenPictureDialog1.FileName);
         TBlobField(AdoTbl['photo']).LoadFromStream(Ms_Stream,ftBlob);
       end;
      

  4.   

    你这句代码保存的内容其实是文件,而不是图像!
    Ms_Stream.LoadFromFile(OpenPictureDialog1.FileName);
    你最好把它放在image控件中再取出:image.picture.Bitmap.loadfromfile(OpenPictureDialog1.FileName);//bmp
    image.picture.Graphic.loadfromfile(OpenPictureDialog1.FileName);//jpgimage.picture.bitmap.SaveToStream(Ms_Stream);这样你保存流以后才是图像