線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2967
推到 Plurk!
推到 Facebook!

新增一個欄位的問題(用 ClientDataSet讀 XML)

答題得分者是:ccchen
kunying
一般會員


發表:17
回覆:28
積分:19
註冊:2002-03-14

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-09-26 16:22:46 IP:61.63.xxx.xxx 未訂閱
小弟因為之前欄位沒規畫好,現在突然想新增一個欄位。 想問要怎麼新增欄位。 目前是使用 ClientDataSet讀XML    之前是想利用,Add的方式來新增 結果不行??
var
  field : tfield;
begin
  ClientDataSet.FileName := 'c:\test.xml'
  ClientDataSet.open;
  field := tfield.Create(self);
  field.SetFieldType(ftmemo);
  field.FieldName := 'ttttt';
  ClientDataSet.Fields.Add(field);
  ClientDataSet.SaveToFile('c:\test.xml',dfxml);
  ClientDataSet.Close;
end;
請問,是我寫錯了嗎?? 還是不是這樣寫,請賜教謝謝。 ________________________ 「有時候你以為天要塌下來了,其實是因為你站歪了!」 發表人 - kunying 於 2002/09/26 16:23:28
------
________________________
「有時候你以為天要塌下來了,其實是因為你站歪了!」
ccchen
版主


發表:61
回覆:940
積分:1394
註冊:2002-04-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2002-09-27 11:10:27 IP:61.219.xxx.xxx 未訂閱
在DataSet open狀態是無法更改欄位的, 所以不行 ClientDataSet對XML我能想到的是, Create 另一個ClientDataSet,增加欄位,再逐筆抄入, 然後override原檔案 直接改XML file也是一個方法, 不過好像沒有現成工具
kunying
一般會員


發表:17
回覆:28
積分:19
註冊:2002-03-14

發送簡訊給我
#3 引用回覆 回覆 發表時間:2002-09-27 22:19:13 IP:61.59.xxx.xxx 未訂閱
>在DataSet open狀態是無法更改欄位的, 所以不行 原來如此。 >ClientDataSet對XML我能想到的是, Create 另一個ClientDataSet,增加欄位, >再逐筆抄入, 然後override原檔案 理論明白了,但是完成不知如何實作。 前輩,可以給個簡單的範例嗎? >直接改XML file也是一個方法, 不過好像沒有現成工具 最近找到一個不錯的工具, XML Spy(名字好像是這樣)。 很好用。 ________________________ 「有時候你以為天要塌下來了,其實是因為你站歪了!」
------
________________________
「有時候你以為天要塌下來了,其實是因為你站歪了!」
ccchen
版主


發表:61
回覆:940
積分:1394
註冊:2002-04-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2002-09-28 11:00:03 IP:203.217.xxx.xxx 未訂閱
以下程式供你參考, 相信若有須要,可提供要加入新欄位之GUI而完成一工具 設clientdataset1已連上你原有之XML檔(我用...\delphi6\Demos\internet\XML Taansform\country_dp.xml測試過). clientdataset2則為未經任何設定之元件
procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
  fields:string;
begin
  clientdataset1.Open;
//先將clientdataset1之所有field defs抄入clientdataset2
  for i:=0 to clientdataset1.FieldDefs.Count-1 do begin
    with clientdataset2.FieldDefs.AddFieldDef do
      assign(clientdataset1.FieldDefs[i]);
  end;
//create 一個新欄位(要用fieldDefs來create而不是TField)
  with ClientDataSet2.FieldDefs.AddFieldDef do begin
    Name := 'NewField';
    DataType := ftString;
    Size := 30;
  end;
//為了後面assing欄位值方便,先將所有欄位名稱組合成以;間隔之字串
  for i:=0 to clientdataset1.fields.Count-1 do
    fields:=fields clientdataset1.fields[i].FieldName ';';
  system.Delete(fields,length(fields),1);  //去掉最後一個;    // 用前面定義之fieldDefs來create ClienteDataset2, 後逐筆由clientdataset1抄入data
  clientdataset2.CreateDataSet;
  while not ClientDataSet1.eof do begin
    clientdataset2.append;
    clientdataset2[fields]:=ClientDataset1[fields]; //assing所有欄位值
    clientdataset2.Post;
    clientdataset1.Next;
  end;
  clientdataset2.SaveToFile('d:\test\test.xml',dfXML);  //存成XML
end;
XML Spy不是這種工具, 須針對delphi之DataPacket, 且須提供須改fieldDefs之工具, 我想可能須自己用XMLDOM來寫
系統時間:2024-04-29 11:54:21
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!