procedure TForm1.BitBtn3Click(Sender: TObject);
var
  iFileHandle: Integer;
  iFileLength: Integer;
  iBytesRead: Integer;
  Buffer: Array[0..38400] of char;
  MS:TMemoryStream;
begin
  if OpenDialog1.Execute then
  begin
      MS:=TMemoryStream.Create;
      iFileHandle := FileOpen(OpenDialog1.FileName, fmOpenRead);
      iFileLength := FileSeek(iFileHandle,0,2);
      FileSeek(iFileHandle,0,0);
      if iFileLength<=38400 then
      begin
          iBytesRead:= FileRead(iFileHandle, Buffer, iFileLength);
          FileClose(iFileHandle);          if (iBytesRead>0) then
          begin
              MS.WriteBuffer(Buffer,iBytesRead);
              MS.Position:=0;              if not (Table1.State in [dsInsert, dsEdit]) then
                  Table1.Insert;
              TBlobField(Table1.FieldByName('bitmap')).LoadFromStream(MS);
              Table1.Post;
          end;
      end;
      MS.Free;
  end;
end;

解决方案 »

  1.   

    何必那么麻烦呢,既然已经知道文件名,直接用TBlobField的LoadFromFile方法就是啦。
      

  2.   

    procedure TForm7.Button1Click(Sender: TObject);      //保存.bmp格式的文件到更新包里。
    var str:Tmemorystream;
    begin
    str:=Tmemorystream.Create;
    str.LoadFromFile('d:\cai.jpg');//OpenDialog1.FileName 也可以
    str.Position:=0;    adoquery2.Append;                               //图片
        Tblobfield(adoquery2.FieldByName('image')).loadfromstream(str);
        try
        adoquery2.Post;
        finally
        str.Free;
        end;
    end;