月
月影沙秋
Unregistered / Unconfirmed
GUEST, unregistred user!
我现在数据表结构如下:
ID dwtydm dwmc dm1(上级结点代码) bblx
1 111111111 aaaaaaaaa 333333333
2 222222222 bbbbbbbbb 333333333
3 333333333 ccccccccc 777777777 1|汇总表
4 444444444 ddddddddd 666666666
5 555555555 eeeeeeeee 666666666
6 666666666 fffffffff 777777777 1|汇总表
7 777777777 ggggggggg 1|汇总表
8 999999999 hhhhhhhhh 777777777
9 000000000 iiiiiiiii
要生成树型结构,只显示dwmc的内容
我现在的程序是:
procedure TForm1.Button1Click(Sender: TObject);
var
s1,s2,ss,str:shortstring;
i,j,n1,p,zdjd,n2:integer;
node1:ttreenode;
txt,txt1,txt2:tstrings;
t1,t2:ttime;
begin
t1:=time;
txt:=tstringlist.Create;
txt1:=tstringlist.Create;
txt.Clear;
txt1.Clear;
txt2:=tstringlist.Create;
txt2.Clear;
form1.ADOQuery1.Close;
form1.ADOQuery1.SQL.Text:='select count(dwtydm) as d from dwqkb';
form1.ADOQuery1.open;
zdjd:=form1.ADOQuery1.Fieldbyname('d').AsInteger;
/////
TreeView1.Items.Clear;
form1.ADOQuery1.Close;
form1.ADOQuery1.SQL.Text:='select dwtydm,dwmc from dwqkb where (dm1='''')or(dm1 is null) order by dm1 desc';//or(jd='+inttostr(zdjd)+')';
form1.ADOQuery1.open;
n1:=form1.ADOQuery1.RecordCount;
/////
/////////
form1.ADOQuery1.First;
while not form1.ADOQuery1.Eof do
begin
application.ProcessMessages;
ss:=trim(ADOQuery1.fieldbyname('dwtydm').AsString)+'|'+trim(ADOQuery1.fieldbyname('dwmc').AsString);
txt.Add(ss);
txt2.Add(ss);
ADOQuery1.Next;
end;
txt2.SaveToFile('c:/jjbb.txt');
TreeView1.LoadFromFile('c:/jjbb.txt'); ///// 添加一级结点
while n1<>zdjd do
begin ////1
for i:=0 to n1-1 do //将树型结点循环一遍
begin ///2
application.ProcessMessages;
node1:=TreeView1.Items.Item;
s1:=TreeView1.Items.Item.Text;
if not AnsiContainsStr(txt1.Text,s1) then
begin ////3
p:=pos('|',s1);
str:=copy(s1,1,p-1);
form1.ADOQuery1.First;
form1.ADOQuery1.Close;
form1.ADOQuery1.SQL.Text:='select dwtydm,dwmc from dwqkb where (dm1='''+str+''')';//and(jd='+inttostr(j)+')';
form1.ADOQuery1.open;
if form1.ADOQuery1.RecordCount<>0 then
begin ///4
form1.ADOQuery1.First;
while not form1.ADOQuery1.Eof do
begin ///5
application.ProcessMessages;
ss:=trim(ADOQuery1.fieldbyname('dwtydm').AsString)+'|'+trim(ADOQuery1.fieldbyname('dwmc').AsString);
TreeView1.Items.AddChildFirst(node1,ss);
txt.Add(ss);
ADOQuery1.Next;
end; ///5
end; ///4
txt1.Add(s1);
end; ///3
end;//2
n1:=txt.Count;
end; //1
txt.Destroy;
txt1.Destroy;
txt2.Destroy;
t2:=time;
showmessage(timetostr(t2-t1));
end;
功能 可以实现,但数据多了太慢,请各前辈帮忙把程序优化一下,换程序也行,只要能实现在功能就行.在此先行谢过!!
ID dwtydm dwmc dm1(上级结点代码) bblx
1 111111111 aaaaaaaaa 333333333
2 222222222 bbbbbbbbb 333333333
3 333333333 ccccccccc 777777777 1|汇总表
4 444444444 ddddddddd 666666666
5 555555555 eeeeeeeee 666666666
6 666666666 fffffffff 777777777 1|汇总表
7 777777777 ggggggggg 1|汇总表
8 999999999 hhhhhhhhh 777777777
9 000000000 iiiiiiiii
要生成树型结构,只显示dwmc的内容
我现在的程序是:
procedure TForm1.Button1Click(Sender: TObject);
var
s1,s2,ss,str:shortstring;
i,j,n1,p,zdjd,n2:integer;
node1:ttreenode;
txt,txt1,txt2:tstrings;
t1,t2:ttime;
begin
t1:=time;
txt:=tstringlist.Create;
txt1:=tstringlist.Create;
txt.Clear;
txt1.Clear;
txt2:=tstringlist.Create;
txt2.Clear;
form1.ADOQuery1.Close;
form1.ADOQuery1.SQL.Text:='select count(dwtydm) as d from dwqkb';
form1.ADOQuery1.open;
zdjd:=form1.ADOQuery1.Fieldbyname('d').AsInteger;
/////
TreeView1.Items.Clear;
form1.ADOQuery1.Close;
form1.ADOQuery1.SQL.Text:='select dwtydm,dwmc from dwqkb where (dm1='''')or(dm1 is null) order by dm1 desc';//or(jd='+inttostr(zdjd)+')';
form1.ADOQuery1.open;
n1:=form1.ADOQuery1.RecordCount;
/////
/////////
form1.ADOQuery1.First;
while not form1.ADOQuery1.Eof do
begin
application.ProcessMessages;
ss:=trim(ADOQuery1.fieldbyname('dwtydm').AsString)+'|'+trim(ADOQuery1.fieldbyname('dwmc').AsString);
txt.Add(ss);
txt2.Add(ss);
ADOQuery1.Next;
end;
txt2.SaveToFile('c:/jjbb.txt');
TreeView1.LoadFromFile('c:/jjbb.txt'); ///// 添加一级结点
while n1<>zdjd do
begin ////1
for i:=0 to n1-1 do //将树型结点循环一遍
begin ///2
application.ProcessMessages;
node1:=TreeView1.Items.Item;
s1:=TreeView1.Items.Item.Text;
if not AnsiContainsStr(txt1.Text,s1) then
begin ////3
p:=pos('|',s1);
str:=copy(s1,1,p-1);
form1.ADOQuery1.First;
form1.ADOQuery1.Close;
form1.ADOQuery1.SQL.Text:='select dwtydm,dwmc from dwqkb where (dm1='''+str+''')';//and(jd='+inttostr(j)+')';
form1.ADOQuery1.open;
if form1.ADOQuery1.RecordCount<>0 then
begin ///4
form1.ADOQuery1.First;
while not form1.ADOQuery1.Eof do
begin ///5
application.ProcessMessages;
ss:=trim(ADOQuery1.fieldbyname('dwtydm').AsString)+'|'+trim(ADOQuery1.fieldbyname('dwmc').AsString);
TreeView1.Items.AddChildFirst(node1,ss);
txt.Add(ss);
ADOQuery1.Next;
end; ///5
end; ///4
txt1.Add(s1);
end; ///3
end;//2
n1:=txt.Count;
end; //1
txt.Destroy;
txt1.Destroy;
txt2.Destroy;
t2:=time;
showmessage(timetostr(t2-t1));
end;
功能 可以实现,但数据多了太慢,请各前辈帮忙把程序优化一下,换程序也行,只要能实现在功能就行.在此先行谢过!!