var
  st:TFileStream;
 //; olecontainer1:Tolecontainer;
begin
if not opendialog1.Execute then
exit;
 st :=TFileStream.Create(opendialog1.FileName,fmOpenRead);
try
with CD_view do //cd_view:TClientDataSet;
  begin
    close;
    sql.Add('select * from docu where docu_id=1');
    open;
    edit;
    Tblobfield(fieldbyname('UpFiles')).LoadFromStream(st);
    post;
    ApplyUpdates(-1);
  end;
finally
 st.Free
 end;
end;
以上代码编译通过,但运行后没有将需要的文件以流的方式写入数据库物理字段内,请高手指教是那里有错误???换句话说就是可以运行,但保存不住。第一次用这个TClientDataSet的东东,呵呵!!不要见笑哦!!

解决方案 »

  1.   

    那这样试试:
    function FileStreamToVar(fStream: TFileStream): OleVariant; //将FileStream转化为OleVariant
    var
      P: Pointer;
      Stream: TStream;
    begin
      Stream := TStream.Create;
      fStream.Position := 0;
      Stream.CopyForm(fStream, fStream.size);
      Result := VarArrayCreate([0, Stream.size -1],Varbyte);
      P := VarArrayLock(Result);
      Try
        Stream.Position := 0;
        Stream.Read(P^, Stream.size);
      Finally
        VarArrayUnlock(Result);
      end;
    end;  然后这里:Tblobfield(fieldbyname('UpFiles')).LoadFromStream(st);
    改为:FieldByName('UpFiles').Value := FileStreamToVar(st);这样看看行不行。
    ps :我没有测试^_^    
      

  2.   

    感谢Kevin_Lmx(繁华阅尽) ,你的测试可以通过,但还是不行哦!!!没有效果!真是奇怪!!!还是更新后没有保存住。继续期待大家的帮助,先谢谢咯!