幫我看看下面這段代碼(DbImage1對應一個SQL表Image字段)
出錯信息是: 程式無法存取檔案, 因為檔案正由另一個程式使用.
那個檔案是BMP的,事實上沒有打開它.
procedure Tfmhrjbzl.DBImage1DblClick(Sender: TObject);
var
 f: file of Byte;
 size: Longint;
 MS: TMemoryStream;
begin
  inherited;
  if OPDiag1.Execute then
  begin
   AssignFile(f, OpDiag1.FileName);
   Reset(f);
   size := FileSize(f);
   if size<20480 then
   begin
    DM1.TbEmpl.Edit;
    DBImage1.Picture.LoadFromFile(OpDiag1.FileName);
    DM1.TbEmpl.Post;
   end else showmessage('這選的這個圖案太大了');
  end;
end;

解决方案 »

  1.   

    AssignFile(f, OpDiag1.FileName);
       Reset(f);
    这里你的那个图片不是正在给f这个file使用吗,运行当然报错了!!
      

  2.   

    多謝提醒,我現在改成下面這樣,卻不能保存到TABLE中(SQL),請再指教
    var
     f: file of Byte;
     size: Longint;
    begin
      inherited;
      if OPDiag1.Execute then
      begin
       AssignFile(f, OpDiag1.FileName);
       Reset(f);
       size := FileSize(f);
       if size<20480 then
       begin
        CloseFile(f);
        DBImage1.Picture.LoadFromFile(OpDiag1.FileName);
       end else showmessage('這選的這個圖案太大了');
      end;
    end;
      

  3.   

    保存你要使用adoquery的post方法,或者adotable的post方法啊,你给DBImage1赋值并不代表post!!
      

  4.   

    是的.POST之后即時不見圖片.如下面代碼   if size<20480 then
       begin
        DM1.TbEmpl.Edit;
        DBImage1.Picture.LoadFromFile(OpDiag1.FileName);
        DM1.TbEmpl.Post;
       end else showmessage('這選的這個圖案太大了');
      

  5.   

    if size<20480 then
       begin
        DM1.TbEmpl.Edit;
        DBImage1.Picture.LoadFromFile(OpDiag1.FileName);
        dbimage1.CopyToClipborad;
        dbimage1.PasteFromClipboard
    //    DM1.TbEmpl.Post;
       end else showmessage('這選的這個圖案太大了');///这样就可以了....呵呵
      

  6.   

    在AssignFile(f, OpDiag1.FileName);
    Reset(f);
    后面加一个
    closefile(f);
    之后再LoadFromFile