飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

楼主: 飘云

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

[复制链接]
  • TA的每日心情
    难过
    7 天前
  • 签到天数: 11 天

    [LV.3]偶尔看看II

     楼主| 发表于 2007-1-26 22:58:04 | 显示全部楼层
    原帖由 caterpilla 于 2007-1-26 15:29 发表
    我贴一个,旨在交流,不要见笑!!!!!!:hug: :handshake :hug:
    算法中主要用到了一个栈,用于记录父结点指针,整个程序一次扫描数据库,大约为O(N),数据库表查询,需以BH字段升序排列(SELECT * FROM  ...


    恩,速度不错!~~~16001 和 16001是一回事,后面的001是下级编号而已,前面的代表大分类~ 嘿嘿~~ 只要按照我的截图那样列出就算OK

    当然我读取的是list1表,用的流的方式~~ 看看大家读取list2表速度~~
    PYG19周年生日快乐!
    回复

    使用道具 举报

    该用户从未签到

    发表于 2007-1-26 23:57:36 | 显示全部楼层
    原帖由 飘云 于 2007-1-26 22:58 发表


    恩,速度不错!~~~16001 和 16001是一回事,后面的001是下级编号而已,前面的代表大分类~ 嘿嘿~~ 只要按照我的截图那样列出就算OK

    当然我读取的是list1表,用的流的方式~~ 看看大家读取list2表速度~~

    我考虑是的如果16001下还有下级的情况,能有个统一的方式定义格式更好些。毕竟生成编号比程序处理要容易,呵呵!

    "要按照我的截图那样列出就算OK"

    具体是什么样?能否说明一下?是说图标的问题,还是节点间虚线,还是其它的问题?

    [ 本帖最后由 caterpilla 于 2007-1-27 00:02 编辑 ]
    PYG19周年生日快乐!
    回复

    使用道具 举报

  • TA的每日心情
    难过
    7 天前
  • 签到天数: 11 天

    [LV.3]偶尔看看II

     楼主| 发表于 2007-1-27 02:01:47 | 显示全部楼层
    原帖由 caterpilla 于 2007-1-26 23:57 发表

    我考虑是的如果16001下还有下级的情况,能有个统一的方式定义格式更好些。毕竟生成编号比程序处理要容易,呵呵!

    "要按照我的截图那样列出就算OK"

    具体是什么样?能否说明一下?是说图标的问 ...



    你的差不多合乎规范,谢谢参与,其他人继续,,  既然是赛事,就大家都加入~~~

    这个数据库是些好东西啊~~~   内版已经发布了网络电视~~
    PYG19周年生日快乐!
    回复

    使用道具 举报

    该用户从未签到

    发表于 2007-1-27 10:35:21 | 显示全部楼层
    特来学习~~
    PYG19周年生日快乐!
    回复

    使用道具 举报

    该用户从未签到

    发表于 2007-1-27 17:31:57 | 显示全部楼层
    原帖由 caterpilla 于 2007-1-26 18:08 发表


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

    BH字段如果能在设 ...


    你说的有道理
    我是这么做的 呵呵!~ 可能是太罗嗦了点
    多线程线程代码
    unit Unit2;

    interface

    uses
       Classes,SysUtils,ADODB,
       ComCtrls;

    type
      TLoadin = class(TThread)
      private
        tname:string;
        ADOQuery1:TADOQuery;
        { Private declarations }
      protected
      procedure Execute; override;
      public
      constructor Create(const tabname:string);
      destructor Destroy; override ;
      end;

    implementation
        uses
          Unit1;
    { Important: Methods and properties of objects in visual components can only be
      used in a method called using Synchronize, for example,

          Synchronize(UpdateCaption);

      and UpdateCaption could look like,

        procedure Loadin.UpdateCaption;
        begin
          Form1.Caption := 'Updated in a thread';
        end; }

    { Loadin }

    constructor TLoadin.Create(const tabname: string);
    begin

    tname:=tabname;
    ADOQuery1:=TADOQuery.Create(nil);
    ADOQuery1.Connection:=Form1.ADOConnection1;
    inherited Create(True);
    end;

    destructor TLoadin.Destroy;
    begin
    ADOQuery1.Free;
    inherited Destroy;
    end;

    procedure TLoadin.Execute;
    var
    str,t1,n1:string;
    i,j,k,bh:Integer;
    Node,root,node1:TTreeNode;
    begin
      { Place thread code here }
      root:=form1.TreeView1.Items.Add(nil,tname);
    for j:=0 to 9 do
    begin
      for k:=0 to 9 do
      begin
          t1:=IntToStr(j)+IntToStr(k);
          ADOQuery1.Close;
          ADOQuery1.SQL.Clear;
          str:='SELECT * FROM '+tname+' WHERE bh LIKE ''' + t1 + '%''' ;
          ADOQuery1.SQL.Add(str);
          ADOQuery1.Open;

          ADOQuery1.Sort:= 'bh'+' ASC';
            for i:=0 to ADOQuery1.RecordCount -1  do
                begin
                n1:=ADOQuery1.fieldbyname('cname').AsString;
                bh:= ADOQuery1.fieldbyname('bh').AsInteger;


                if (bh>0) and (bh<99) then
                Node := form1.TreeView1.Items.AddChild(root,IntToStr(bh)+ n1) ;

                if ((bh>99) and (bh<99999)) then
                Node1 :=form1.TreeView1.Items.AddChild(Node,IntToStr(bh)+n1);

                if (bh>99999)  then
                form1.TreeView1.Items.AddChild(node1,IntToStr(bh)+n1);

                ADOQuery1.Next;
                end;
            end;
    end;
    end;

    end.

    test.rar

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

    评分

    参与人数 1威望 +120 收起 理由
    飘云 + 120 【DELPHI赛事】速度大比拼中,给你嘉

    查看全部评分

    PYG19周年生日快乐!
    回复

    使用道具 举报

    该用户从未签到

    发表于 2007-1-27 18:10:00 | 显示全部楼层
    原帖由 ww-jack 于 2007-1-27 17:31 发表


    你说的有道理
    我是这么做的 呵呵!~ 可能是太罗嗦了点
    多线程线程代码
    unit Unit2;

    interface

    uses
       Classes,SysUtils,ADODB,
       ComCtrls;

    type
      TLoadin = class(TThread)
      priv ...

    感觉上好象只能处理三级,BH的结构特点应该利用一下。多线程并非总能提高效率,而且在每个线程内都创建数据库连接,有点浪费(如果是在处理多个表,那还可以)。说错勿怪!!!:handshake

    [ 本帖最后由 caterpilla 于 2007-1-27 18:14 编辑 ]
    PYG19周年生日快乐!
    回复

    使用道具 举报

    该用户从未签到

    发表于 2007-1-27 19:18:20 | 显示全部楼层
    这也是一个问提 我已经发现 问题出在数据库的BH上面(也是我没处理好的地方)他不是统一规格的

    多线程就是同时处理多表。这样速度一定比单线程要快 特别数据库条目比较多 判断比较多的情况下,呵呵!~10线程内 处理速度还是有点优势的
    PYG19周年生日快乐!
    回复

    使用道具 举报

    该用户从未签到

    发表于 2007-1-27 19:29:56 | 显示全部楼层
    补充一句
    希望老大能多举办这样的活动呵呵!~
    不过可以不要限制编程语言这样大家都可以参与 VC VB C# DELPHI 。。。。
    PYG19周年生日快乐!
    回复

    使用道具 举报

  • TA的每日心情
    难过
    7 天前
  • 签到天数: 11 天

    [LV.3]偶尔看看II

     楼主| 发表于 2007-1-27 22:50:14 | 显示全部楼层
    原帖由 ww-jack 于 2007-1-27 19:29 发表
    补充一句
    希望老大能多举办这样的活动呵呵!~
    不过可以不要限制编程语言这样大家都可以参与 VC VB C# DELPHI 。。。。


    别急,先从DELPHI开始~
    PYG19周年生日快乐!
    回复

    使用道具 举报

    该用户从未签到

    发表于 2007-2-7 09:22:24 | 显示全部楼层
    麻烦飘云把树型界面中的那个书打开和关闭的图标传上来可好?谢谢!!!:hug: :handshake :hug:
    PYG19周年生日快乐!
    回复

    使用道具 举报

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

    本版积分规则

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