飘云
发表于 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: