下面代码目的想实现向TABLE.XML文件中写入一条记录:  
 ClientDataSetTable.LoadFromFile('c:\TABLE.xml');
   ClientDataSetTable.Append;
   ClientDataSetTable.FieldByName('ID').asinteger           :=ID;
   ClientDataSetTable.FieldByName('ID_DB').asinteger        :=ID_DB;
   ClientDataSetTable.FieldByName('TableName').asstring     :=Trim(sTableName);
   ClientDataSetTable.FieldByName('Caption').asstring       :=Trim(sCaption);
   ClientDataSetTable.Post;
   ClientDataSetTable.SaveToFile(c:\Table.xml');
   ClientDataSetTable.Close;
问题:这段程序在连续执行几十次后,系统就突然崩溃,更为可怕的是竟然将TABLE。XML文件清空了。大家想想办法救救我!

解决方案 »

  1.   

    是不是应该加上格式
    ClientDataSetTable.SaveToFile(c:\Table.xml',dfXML);
      

  2.   

    procedure TForm1.Button1Click(Sender: TObject);
    begin
      with ClientDataSet1 do
      begin
        FileName := 'C:\Table.xml';
        Open;
        Append;
        FieldValues['ID'] := ID;
        {...}
        Post;
        Close;
      end;
    end;
      

  3.   

    TO: lijinghe1(副乡长)(立党为公,执政为民) 加上dfXML后也没有用!
      

  4.   

    説明:不用SaveToFile、直接用文件名接好、追加後、
       CLOSE就自動存...
      

  5.   

    TO: cronuz(cronus) 
    您的方法会让.xml文件始终处于独占状态,不适合多用户操作!
      

  6.   

    to:cronuz(cronus) 
    不用SaveToFile、直接用文件名接好、追加後、CLOSE就自動存
    您能否说详细!
      

  7.   

    to:windindance(风舞轻扬) 
    1 硬盘空间不足?-----------回答:硬盘空间足够大
    2 是否多线程并发操作?是否其他程序访问了该文件?--------就自己一个用户,因为我现在先测试
      

  8.   

    to:
    我得xml文件:
      <?xml version="1.0" standalone="yes" ?> 
    - <DATAPACKET Version="2.0">
    - <METADATA>
    - <FIELDS>
      <FIELD attrname="ID" fieldtype="i4" /> 
      <FIELD attrname="ID_DB" fieldtype="i4" /> 
      <FIELD attrname="TableName" fieldtype="string" WIDTH="50" /> 
      <FIELD attrname="Caption" fieldtype="string" WIDTH="50" /> 
      <FIELD attrname="Description" fieldtype="string" WIDTH="255" /> 
      </FIELDS>
    - <PARAMS LCID="0">
      <PARAM Name="NO_RESET_CALL" Value="TRUE" Type="boolean" /> 
      </PARAMS>
      </METADATA>
    - <ROWDATA>
      <ROW ID="2" ID_DB="2" TableName="KF.GG_BANK" Caption="KF.GG_BANK" /> 
      <ROW ID="3" ID_DB="2" TableName="KF.GG_BYQ" Caption="KF.GG_BYQ" /> 
      <ROW ID="7" ID_DB="2" TableName="KF.YK_NY_TOTALREPORT" Caption="KF.YK_NY_TOTALREPORT" /> 
      <ROW ID="8" ID_DB="7" TableName="nextitem.db" Caption="nextitem.db" /> 
      <ROW ID="9" ID_DB="7" TableName="nextord.db" Caption="nextord.db" /> 
      </ROWDATA>
      </DATAPACKET>
      

  9.   

    to:windindance(风舞轻扬) 
    xml文件及字段如上
      

  10.   

    建议重新生成一下XML。
    参考下面的格式看看:
    procedure CreateDataSet(ADODataSet: TCustomADODataSet; DataType:array of string; FieldName :array of string; AWidth :integer);
    const
      XMLRowDefine =
    #13#10' <s:AttributeType name=''%s'' rs:number=''%d'' rs:nullable=''true'' rs:writeunknown=''true''>' +
    #13#10' <s:datatype dt:type=''%s'' dt:maxLength=''%d'' rs:precision=''10''/>' +
    #13#10' </s:AttributeType>';
    var
      XMLData:TStringList;
      i:integer;
      fname:string;  XML :string;
      Width :integer;
    begin
      fname := FormatDateTime('\yyyymmddhhnnsszzz', Now);
      XMLData := TStringList.Create;  XML := '';
      FOR I:=0 to High(Datatype) do
      begin
        if DataType[i] = 'string' then Width := AWidth
        else
          Width := 8; 
        XML := XML + Format(XMLRowDefine, [IntToStr(i), i+1, DataType[i], Width]);
      end;  XMLData.Text :=
    #13#10'<xml xmlns:s=''uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882''' +
    #13#10' xmlns:dt=''uuid:C2F41010-65B3-11d1-A29F-00AA00C14882''' +
    #13#10' xmlns:rs=''urn:schemas-microsoft-com:rowset''' +
    #13#10' xmlns:z=''#RowsetSchema''>' +
    #13#10'<s:Schema id=''RowsetSchema''>' +
    #13#10' <s:ElementType name=''row'' content=''eltOnly'' rs:updatable=''true''>' +
      XML +
    #13#10' <s:extends type=''rs:rowbase''/>' +
    #13#10' </s:ElementType>' +
    #13#10'</s:Schema>' +
    #13#10'<rs:data>' +
    #13#10'</rs:data>' +
    #13#10'</xml>';
      XMLData.SaveToFile(fname);
    end;
      

  11.   

    你先
       ClientDataSetTable.LoadFromFile('c:\TABLE.xml');
    后又
       ClientDataSetTable.SaveToFile(c:\Table.xml');
    当然是数据被使用
      

  12.   

    很感谢windindance(风舞轻扬) 的代码支持,我找到问题的原因:程序在WIN2000 或者 xp下均可执行,但在WIN 2003 下就出现了上述问题,所以程序没有错误,可能就是系统的问题了,非常感谢大家的鼎立支持与建议!祝大家工作顺利!结贴!!