1、LoadFromFile后直接跟文件名字符串即可;
2、看一下表中是不是有这个字段;
3、根据经验,BLOB的字段名要大写;
跟踪调试。或者用MessageBox
var
  ff: TFileStream;
begin
  ...
  ff := TFileStream.Create(OpenDialog1.FileName,fmOpenRead);
//看一下ff的大小
  ShowMessage(IntToStr(ff.Size));  
  TBlobField(FieldByName('file_content')).LoadFromStream(ff);
//看一下BLOBFIeld的大小
  ShowMessage(IntToStr(TBlobField(FieldByName('file_content')).BLOBSize));
  CDS.Post;
  CDS.ApplyUpdates(-1);  
  CDS.Close;
......
end;
如果还不行,到clientDataSet的OnReconcileError事件中写一句代码,找出问题的关键所在。
  ShowMessage(E.Message);

解决方案 »

  1.   

    我現在查出不是blob型字段上傳出問題,
      我把file_content字段刪掉後file_extension也出同樣的問題.
      我正在查錯.....
      

  2.   

    謝謝 yjs_lh(长风浪子) 的指點,ClientDS1:Field 'file_content' not found.的問題解決了.原因是是dm2.ClientDS1中沒有'get all field',因此會找不到字段.
     我現在碰到新錯'ORA--01465 此一16進位數字無效.'  此錯誤是在下面的事件中打印出的;procedure TDM2.ClientDS1ReconcileError();
    begin
        ShowMessage(E.Message);
    end;
      這是什麼原因???
     
     
      

  3.   

    我的程序是3層的,數據庫是oracle8.17  .
       server端;  ADOConnection1+ADOQuery1+DataSetProvider1
       client端;  SocketConnection1+ClientDataSet1--/*No: 9  教育訓練文件表 */
    create table tab_file (
        file_name  varchar2(100)  not null ,/*文件名 */
        file_content  blob  not null ,/*文件內容 */
        file_extension varchar2(10)  null ,/*文件擴展名 */ 
        file_note varchar2(80) Null,/*備註 */ 
        file_flag varchar2(4) Null,/* 標志*/ 
        file_drop char(1) default 'F',/*是否被刪除,T表示是,F表示否*/
        modstaff varchar2(15) null ,/*最後修改或創建者工號 */ 
        modtime date not null ,/*最後修改或創建者工號 */ 
           primary key(file_name,modtime)
        );