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

請教如何實作Treeview 於Delphi 3層式架構中

尚未結案
airomeo
一般會員


發表:1
回覆:4
積分:1
註冊:2005-03-08

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-08-19 16:39:39 IP:203.66.xxx.xxx 未訂閱
您好!我想請問... dmView.cdsTemp 為一個tclientdataset... 但我在實作的時候,以如下程式來看,只能展一層, 只要一遇到dmView.cdsTemp.Free;這一行便會發生錯誤... 若把dmView.cdsTemp.Free; 給mark 起來,便可執行成功但只能展一層... 可否請您給個解答... 萬分感謝您 function AddChildNode(node: TTreeNode; id: string; stype: string): TTreeNode; var strSQL: String; begin Result := frmNode.TreeNodePage.Items.AddChild(node, stype); strSQL:='select * from node_list t WHERE parentid = ''' id ''' order by parentid,nodetype desc,nodetext'; tool_sqlToCDS(strSQL ,dmView.cdsTemp); While not dmView.cdsTemp.Eof do begin AddChildNode(Result, dmView.cdsTemp.FieldByName('nodeid').AsString, dmView.cdsTemp.FieldByName('nodetext').AsString); dmView.cdsTemp.Next; end; dmView.cdsTemp.Free; end; procedure tool_SQLtoCDS(SQL:string; cds:Tclientdataset); begin with dmView.cdsTemp do begin close; data:=dmView.midasview.AppServer.query(SQL); open; first; cds.Data:=data; end; end; PS.已參考過所有相關於Treeview於Delphi中的文章
deity
尊榮會員


發表:90
回覆:876
積分:678
註冊:2003-05-09

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-08-19 17:41:42 IP:218.15.xxx.xxx 未訂閱
引言:
function AddChildNode(node: TTreeNode; id: string; stype: string): TTreeNode;
var
strSQL: String;
begin
Result := frmNode.TreeNodePage.Items.AddChild(node, stype);
strSQL:='select * from node_list t WHERE parentid = ''' id ''' order by parentid,nodetype desc,nodetext';
tool_sqlToCDS(strSQL ,dmView.cdsTemp);    While not dmView.cdsTemp.Eof do
begin
AddChildNode(Result, dmView.cdsTemp.FieldByName('nodeid').AsString, dmView.cdsTemp.FieldByName('nodetext').AsString);
dmView.cdsTemp.Next;
end;
dmView.cdsTemp.Free;改为
dmView.cdsTemp.close; //试试,供参考
end;    procedure tool_SQLtoCDS(SQL:string; cds:Tclientdataset);
begin
with dmView.cdsTemp do
begin
close;
data:=dmView.midasview.AppServer.query(SQL);
open;
first;
cds.Data:=data;
end;
end;
============================ 为什么经过多年以后,得失的过程如此冷漠 ============================
airomeo
一般會員


發表:1
回覆:4
積分:1
註冊:2005-03-08

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-08-22 10:38:28 IP:203.66.xxx.xxx 未訂閱
經大大您建議後,測試發現 會有一個錯誤訊息 cdsTemp : cannot perform this operation on a closed dataset    
引言:
引言:
function AddChildNode(node: TTreeNode; id: string; stype: string): TTreeNode;
var
strSQL: String;
begin
Result := frmNode.TreeNodePage.Items.AddChild(node, stype);
strSQL:='select * from node_list t WHERE parentid = ''' id ''' order by parentid,nodetype desc,nodetext';
tool_sqlToCDS(strSQL ,dmView.cdsTemp);    While not dmView.cdsTemp.Eof do
begin
AddChildNode(Result, dmView.cdsTemp.FieldByName('nodeid').AsString, dmView.cdsTemp.FieldByName('nodetext').AsString);
dmView.cdsTemp.Next;
end;
dmView.cdsTemp.Free;改为
dmView.cdsTemp.close; //试试,供参考
end;    procedure tool_SQLtoCDS(SQL:string; cds:Tclientdataset);
begin
with dmView.cdsTemp do
begin
close;
data:=dmView.midasview.AppServer.query(SQL);
open;
first;
cds.Data:=data;
end;
end;
============================ 为什么经过多年以后,得失的过程如此冷漠 ============================
deity
尊榮會員


發表:90
回覆:876
積分:678
註冊:2003-05-09

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-08-22 12:48:44 IP:219.129.xxx.xxx 未訂閱
function AddChildNode(node: TTreeNode; id: string; stype: string): TTreeNode;
var
  strSQL: String;
begin
  Result := frmNode.TreeNodePage.Items.AddChild(node, stype);
  strSQL:='select * from node_list t WHERE parentid = ''' id ''' order by parentid,nodetype desc,nodetext';
  tool_sqlToCDS(strSQL ,dmView.cdsTemp);
  dmView.cdsTemp.open; //再加上此句试试,供参考
  While not dmView.cdsTemp.Eof do
     begin
       AddChildNode(Result, dmView.cdsTemp.FieldByName('nodeid').AsString, dmView.cdsTemp.FieldByName('nodetext').AsString);
       dmView.cdsTemp.Next;
     end;
  dmView.cdsTemp.Free;改为
  dmView.cdsTemp.close; //试试,供参考
end;    procedure tool_SQLtoCDS(SQL:string; cds:Tclientdataset);
begin
  with dmView.cdsTemp do
    begin
      close;
      data:=dmView.midasview.AppServer.query(SQL);
      open;
      first;
      cds.Data:=data;
   end;
end;
============================ 为什么经过多年以后,得失的过程如此冷漠 ============================ 發表人 - deity 於 2005/08/22 12:50:07
No-where
一般會員


發表:31
回覆:53
積分:16
註冊:2002-09-05

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-08-23 01:07:03 IP:218.175.xxx.xxx 未訂閱
重覆呼叫 AddChildNode,只有一個 clientdataset (dmView.cdsTemp) 這樣不是只會展一層的tree嗎 Top Level不會 Go Next...???
airomeo
一般會員


發表:1
回覆:4
積分:1
註冊:2005-03-08

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-08-23 13:46:24 IP:203.66.xxx.xxx 未訂閱
經deity兄的建議,修改後,還是會出現相同的錯誤訊息...
系統時間:2024-06-25 13:46:39
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!