飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 9249|回复: 22

【已结束】[悬赏:DELPHI赛事]--速度大比拼!

[复制链接]
  • TA的每日心情
    开心
    2024-12-1 11:04
  • 签到天数: 12 天

    [LV.3]偶尔看看II

    发表于 2007-1-25 14:58:48 | 显示全部楼层 |阅读模式
    100飘云币
    DELPHI玩家来玩玩~~ 关于数据库的,以读取速度快慢作为评判标准!结贴时间:2007.2.8
    奖励说明:
    A.100点积分全部送个“最佳答案”
    B.对参与者,根据实际情况奖励20、30、50积分不等~~~
    数据库结构大概如下:
    01
      0101
         010101
    ..................

    以此类推(你也可以将它看成最多4层结构),试用DELPHI编写代码使其在TreeView中按照结构显示出来(编号也要显示出来),并打包上传最优源码!

    示意图:

    数据库结构

    数据库结构

    最终效果示例

    最终效果示例

    test.rar

    84.98 KB, 下载次数: 11, 下载积分: 飘云币 -2 枚

    数据库

    最佳答案

    查看完整内容

    我贴一个,旨在交流,不要见笑!!!!!!:hug: :handshake :hug: 算法中主要用到了一个栈,用于记录父结点指针,整个程序一次扫描数据库,大约为O(N),数据库表查询,需以BH字段升序排列(SELECT * FROM LIST2 ORDER BY BH ASC)。 程序中只处理了LIST2表,做为演示。 另外数据库的数据格式,级与级间的的格式最好统一,要不程序不好处理。 如:01 0101 010101 每级间字符串长度差为2,即每一级项最多为01 ...
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2007-1-25 14:58:49 | 显示全部楼层
    我贴一个,旨在交流,不要见笑!!!!!!:hug: :handshake :hug:
    算法中主要用到了一个栈,用于记录父结点指针,整个程序一次扫描数据库,大约为O(N),数据库表查询,需以BH字段升序排列(SELECT * FROM LIST2 ORDER BY BH ASC)。
    程序中只处理了LIST2表,做为演示。
    另外数据库的数据格式,级与级间的的格式最好统一,要不程序不好处理。
    如:01
          0101
          010101
    每级间字符串长度差为2,即每一级项最多为01-99。目前库中有些格式不统一,比如16001, 为五位了,这可能是取值范围超出100的原因,这样如果有下级的话,会增加计算。

    最好给出一个明确的级与级间区分的说明。

    unit PrgTree;

    interface

    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, ComCtrls, DB, ADODB, Grids, DBGrids, Contnrs, ImgList;

    type
      TForm1 = class(TForm)
        TreeView1: TTreeView;
        Button1: TButton;
        ADOQuery1: TADOQuery;
        ImageList1: TImageList;
        procedure FormCreate(Sender: TObject);
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;

    var
      Form1: TForm1;

    implementation

    {$R *.dfm}

    procedure TForm1.Button1Click(Sender: TObject);
    var
      root, parenttn, lasttn: TTreeNode;
      count: integer;
      bhtitle: string;
      tl: TStack;
      len, i: integer;
      tt:tdatetime;
    begin
      root := TreeView1.Items.AddChild(nil, 'Root');
      count := 0;
      tl := TStack.Create;
      parenttn := nil;
      lasttn := root;
      TreeView1.Items.BeginUpdate;
      while not ADOQuery1.Eof do
      begin
        bhtitle := ADOQuery1.FieldByName('bh').AsString;
        len := length(bhtitle);
        bhtitle := bhtitle + ADOQuery1.FieldByName('cname').AsString;
        if (len > count) then
        begin
          tl.Push(parenttn);
          parenttn := lasttn;
          parenttn.ImageIndex := 2;
          lasttn := TreeView1.Items.AddChild(parenttn, bhtitle);
          lasttn.ImageIndex := 1;
          count := len;
        end
        else if (len = count) then
        begin
          lasttn := TreeView1.Items.AddChild(parenttn, bhtitle);
          lasttn.ImageIndex := 1;
        end
        else if (len < count) then
        begin
          for i := 0 to (count - len) div 2 - 1 do
            parenttn := TTreeNode(tl.Pop);
          parenttn.ImageIndex := 2;
          lasttn := TreeView1.Items.AddChild(parenttn, bhtitle);
          lasttn.ImageIndex := 1;
          count := len;
        end;
        ADOQuery1.Next;
      end;
      TreeView1.Items.EndUpdate;
      tl.Free;//呵呵,原来没释放TL,丢内存了,最好用TRY。。FINNALLY括起来,打包的源程序中也得改下,下载的朋友自己改下吧
    end;

    procedure TForm1.FormCreate(Sender: TObject);
    begin
      ADOQuery1.Open;
    end;

    end.

    [ 本帖最后由 caterpilla 于 2007-1-27 00:07 编辑 ]

    PygTree.rar

    380.33 KB, 下载次数: 5, 下载积分: 飘云币 -2 枚

    建树程序

    PYG19周年生日快乐!
    回复

    使用道具 举报

  • TA的每日心情

    2016-6-2 20:34
  • 签到天数: 10 天

    [LV.3]偶尔看看II

    发表于 2007-1-25 17:26:13 | 显示全部楼层
    不懂Delphi,支持这样的活动
    PYG19周年生日快乐!
    回复

    使用道具 举报

    该用户从未签到

    发表于 2007-1-25 18:30:38 | 显示全部楼层
    老大是不是把什么程序的 网络电视的数据库搞下来了?
    准备自己做个啊
    数据库下来看看 呵呵!~
    PYG19周年生日快乐!
    回复

    使用道具 举报

    该用户从未签到

    发表于 2007-1-25 18:35:54 | 显示全部楼层
    我比较菜,还是搞不了
    PYG19周年生日快乐!
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2024-12-1 11:04
  • 签到天数: 12 天

    [LV.3]偶尔看看II

     楼主| 发表于 2007-1-25 18:48:15 | 显示全部楼层
    原帖由 ww-jack 于 2007-1-25 18:30 发表
    老大是不是把什么程序的 网络电视的数据库搞下来了?
    准备自己做个啊
    数据库下来看看 呵呵!~



    无尽想象ing......
    PYG19周年生日快乐!
    回复

    使用道具 举报

    该用户从未签到

    发表于 2007-1-25 21:58:12 | 显示全部楼层
    没学过DELPHI只能帮顶。。支持活动。。:lol:
    PYG19周年生日快乐!
    回复

    使用道具 举报

    该用户从未签到

    发表于 2007-1-26 11:07:16 | 显示全部楼层
    原帖由 飘云 于 2007-1-25 18:48 发表



    无尽想象ing......


    哎刚看见题目连编号也要显示 ,修改完成了
    老大请收EMAIL [email protected]

    [ 本帖最后由 ww-jack 于 2007-1-26 11:26 编辑 ]
    PYG19周年生日快乐!
    回复

    使用道具 举报

    该用户从未签到

    发表于 2007-1-26 17:21:08 | 显示全部楼层
    问题捆饶了我

    [ 本帖最后由 ww-jack 于 2007-1-26 18:08 编辑 ]
    PYG19周年生日快乐!
    回复

    使用道具 举报

    该用户从未签到

    发表于 2007-1-26 18:08:58 | 显示全部楼层
    原帖由 ww-jack 于 2007-1-26 17:21 发表

    其实楼上想到了 SQL 语句 想到了排序 为什么不想到SQL 模糊查询呢?在排序 那么 01 and 01xxx的都可以被找到 在排序那么效率是不是要快很多并且也不要那么多语句.
    还有注意 BH 字段 他是用01 xx xx xx 作为每 ...


    用模糊查询?不太理解你的意思。
    程序中是一次把所有记录读进来直接处理了,因为字段BH的内容已经体现出了大体层次结构,排序后就已经接近树型了,只要按照层次加到TREEVIEW就可以了。

    BH字段如果能在设计时考虑到后序的程序设计,设计出规律就更好了。在程序中采用计数是可以做到,但要增加很多判断和处理。这个小程序,以空间换时间还是合适的。
    PYG19周年生日快乐!
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表