首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

急请帮小弟我!1

2012-02-11 
急,请帮我!!1一,我数据库中对应有字段推荐人手机和被推荐人手机号,一个推荐人可以对应多个推荐人,被推荐人

急,请帮我!!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)如果你要自己定义显示格式来画这个图的话。其实很简单,就是算好所有节点的位置,然后画就好了。复杂一点的就是,要做那种折叠效果:)

热点排行