急,请帮我!!1
一,我数据库中对应有字段推荐人手机和被推荐人手机号,一个推荐人可以对应多个推荐人,被推荐人也可以推荐多人,我写了一个递归过程对其实现,把它们的对应关系显示在TREEVIEE中,但是应该是访问服务器数据库时需要很多的时间,所以程序一直都反映不过来。我想问一下怎么样可以减少时间。
下面是我写的一个过程,应该没有问题:
procedure GetDirectories(Tree:TTreeView; introducer:string; Item:TTreeNode);
var
SearchRec: TSearchRec;
ItemTemp: TTreeNode;
begin
Tree.Items.BeginUpdate;
form1.ADOQuery1.SQL.Clear;
form1.ADOQuery1.SQL.Text:= 'select * from tagy_agency where introducer =:introducer and levelno=:level CONNECT BY PRIOR agencyId = fatherId ';
form1.ADOQuery1.Parameters.ParamByName( 'introducer ').value:=trim(introducer);
form1.ADOQuery1.Parameters.ParamByName( 'level ').Value:=10;
if not form1.ADOQuery1.Active then form1.ADOQuery1.Open;
if form1.ADOQuery1.recordcount> 0 then
begin
form1.ADOQuery1.First;
while not (form1.ADOQuery1.Eof) do
begin
Item := Tree.Items.AddChild(Item, form1.ADOQuery1.fieldbyname( 'agencyId ').value);
ItemTemp := Item.Parent;
GetDirectories(Tree, introducer, Item);
Item := ItemTemp;
Tree.Items.AddChild(Item, form1.ADOQuery1.fieldbyname( 'agencyId ').value);
form1.ADOQuery1.Next;
end;{loop end}
Tree.Items.EndUpdate;
end;
二:我怎么样把上面的实现以生成一幅图片的形式显示出来。
[解决办法]
1.这个问题,关键在于减少客户端和服务端交互次数。一个办法是,直接将表中所有数据都取到客户端中,然后再根据条件过滤处没一层次的记录。这样效率绝对可以提示很多。还有一些网站的方式,是延迟加载,比如,第一次知识加载第一层,这个方法适合于网站应用,或者数据量实在太大的时候。
2.图片的问题,你说得比较含糊
1)如果只是TreeVew转换到图片上,那么简单,TreeView的Canvas可以Copy到Bmp的Canvas上。
2)如果你要自己定义显示格式来画这个图的话。其实很简单,就是算好所有节点的位置,然后画就好了。复杂一点的就是,要做那种折叠效果:)