飘云 发表于 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表速度~~

caterpilla 发表于 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 编辑 ]

飘云 发表于 2007-1-27 02:01:47

原帖由 caterpilla 于 2007-1-26 23:57 发表

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

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

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


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

这个数据库是些好东西啊~~~   内版已经发布了网络电视~~

黑夜彩虹 发表于 2007-1-27 10:35:21

特来学习~~

ww-jack 发表于 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 -1do
            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.

caterpilla 发表于 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 编辑 ]

ww-jack 发表于 2007-1-27 19:18:20

这也是一个问提 我已经发现 问题出在数据库的BH上面(也是我没处理好的地方)他不是统一规格的

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

ww-jack 发表于 2007-1-27 19:29:56

补充一句
希望老大能多举办这样的活动呵呵!~
不过可以不要限制编程语言这样大家都可以参与 VC VB C# DELPHI 。。。。

飘云 发表于 2007-1-27 22:50:14

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

别急,先从DELPHI开始~

caterpilla 发表于 2007-2-7 09:22:24

麻烦飘云把树型界面中的那个书打开和关闭的图标传上来可好?谢谢!!!:hug: :handshake :hug:
页: 1 [2] 3
查看完整版本: 【已结束】[悬赏:DELPHI赛事]--速度大比拼!