小弟做个产品类别下载的功能,根据本地选中的类别名称去orcale上取回数据,同时取回类别属性(类别名称和类别属性是2张表)
但是类别非常多,每次下载系统都会变得非常慢(已经用了多线程了),不知道有什么办法可以解决?
但是类别非常多,每次下载系统都会变得非常慢(已经用了多线程了),不知道有什么办法可以解决?
解决方案 »
- delphi中什么控件显示摄像头拍摄的内容
- 高分大讨论:关于向另一个程序发送文本的问题!
- 奇怪 高分求解
- 为什么 IdFTP1.Put(.. 上传文件时使用IdFTP1.Abort;中断老是会出现 Connection Closed Gracefully,但IdFTP1.Get(.. 时中断却不会这样?
- TCP/UDP隐藏IP
- 如何编写程序来避开Proxy防火墙(急............呀!)
- 怎样用程序在windows注册一个OCX?暂给50,如解决必赠重分。
- 请问我怎么才能Up一个帖子????——改版后我也没见过‘帖子提前连接’!
- 取百分比?
- 问一个C++调用delphi编写的dll的问题。麻烦有空的看看。
- 求助,希望有delphi7的兄弟帮个忙
- ExpressQuantumGrid3.22有没有汉化文件
先查找本地数据,如果已经下载,则删除掉再下载(服务器经常更新类别)
接着 循环数据集 一条 一条的往数据集插入sql语句
这样的效率非常低下
procedure chanpinxiazai.exteriorwork;
var
i:Integer;
currNode: TTreeNode;
strsql : string;
amyQuery:tmyquery;
Item: TTVItem;
begin
//产品类别树
for i:=0 to Fmcplbxz.tv1.Items.Count-1 do
begin
currNode := Fmcplbxz.tv1.Items.Item[i];
item.mask := TVIF_HANDLE;
item.hItem := currNode.ItemId;
TreeView_GetItem(Fmcplbxz.tv1.Handle, item);
item.mask := TVIF_HANDLE or TVIF_STATE;
if item.state = (item.state or $2000) and (not $1000) then
begin
//0 是根节点
//先查找本地数据
qry.Close;
qry.SQL.Clear;
qry.SQL.Add('select * from T_PROTYPE where t_proclassid = '
+ QuotedStr(PNodeData(Fmcplbxz.tv1.Items.Item[i].Data)^.Index));
qry.Open;
if not qry.IsEmpty then
begin
//类别属性要先删除
amyQuery:=tmyquery.create(nil );
with amyQuery do
try
connection:=qry.Connection;
sql.Clear;
sql.Add('select T_TYPEID from T_ATTRIBUTE where T_PROCLASSID = '
+ QuotedStr(PNodeData(Fmcplbxz.tv1.Items.Item[i].Data)^.Index));
open;
while not eof do
begin
ExecuteSQL(dm.Con,'delete from T_ATTRIBUTE where T_TYPEID = '
+ QuotedStr(fieldbyname('T_TYPEID').AsString));
next;
end;
finally
free;
end;
ExecuteSQL(dm.Con,'delete from T_PROTYPE where t_proclassid = '
+ QuotedStr(PNodeData(Fmcplbxz.tv1.Items.Item[i].Data)^.Index));
end;
//开始插入数据
//dm.AstaClientSocket1.Active := false;
dm.AstaClientSocket1.Active := True;
if dm.AstaClientSocket1.Active = false then
begin
showmessage('gan');
exit;
end;
application.ProcessMessages;
AstaClientDataSet2.Close;
AstaClientDataSet2.SQL.Clear;
AstaClientDataSet2.SQL.Add('select * from T_PROTYPE where proclassid = '
+ QuotedStr(PNodeData(Fmcplbxz.tv1.Items.Item[i].Data)^.Index));
AstaClientDataSet2.Open;
sleep(1000);//停1秒
strsql := 'INSERT INTO T_PROTYPE (t_proclassid,t_cmpid,t_proclassname,'
+ 'T_PROFCLASSID,T_PROISLAST,T_PROINDEX,T_PROISPUBLIC,T_PROSHOWTYPE'
+ ') VALUES ('
+ QuotedStr(AstaClientDataSet2.fieldbyname('proclassid').AsString) + ','
+ QuotedStr(AstaClientDataSet2.fieldbyname('companyID').AsString) + ','
+ QuotedStr(AstaClientDataSet2.fieldbyname('proclassname').AsString) + ','
+ QuotedStr(AstaClientDataSet2.fieldbyname('PROFCLASSID').AsString) + ','
+ QuotedStr(AstaClientDataSet2.fieldbyname('PROISLAST').AsString) + ','
+ QuotedStr(AstaClientDataSet2.fieldbyname('PROINDEX').AsString) + ','
+ QuotedStr(AstaClientDataSet2.fieldbyname('PROISPUBLIC').AsString) + ','
+ QuotedStr(AstaClientDataSet2.fieldbyname('PROSHOWTYPE').AsString)
+ ')';
ExecuteSQL(dm.Con,strsql);
//类别属性也要下载下来
AstaClientDataSet3.Close;
AstaClientDataSet3.SQL.Clear;
AstaClientDataSet3.SQL.Add('select * from t_attribute where proclassid = '
+ QuotedStr(PNodeData(Fmcplbxz.tv1.Items.Item[i].Data)^.Index));
AstaClientDataSet3.Open;
while not AstaClientDataSet3.eof do
begin
strsql := '';
strsql := 'INSERT INTO t_attribute (T_TYPEID,T_PROCLASSID,T_PARENTID,'
+ 'T_ATTNAME,T_ATTORDER,T_ATTSTYLE,T_ATTSIGN,t_ATTINDEX'
+ ') VALUES ('
+ QuotedStr(AstaClientDataSet3.fieldbyname('TYPEID').AsString) + ','
+ QuotedStr(AstaClientDataSet3.fieldbyname('PROCLASSID').AsString) + ','
+ QuotedStr(AstaClientDataSet3.fieldbyname('typefclassid').AsString) + ','
+ QuotedStr(AstaClientDataSet3.fieldbyname('ATTNAME').AsString) + ','
+ QuotedStr(AstaClientDataSet3.fieldbyname('ATTORDER').AsString) + ','
+ QuotedStr(AstaClientDataSet3.fieldbyname('ATTSTYLE').AsString) + ','
+ QuotedStr(AstaClientDataSet3.fieldbyname('ATTSIGN').AsString)+ ','
+ QuotedStr(AstaClientDataSet3.fieldbyname('ATTINDEX').AsString)
+ ')';
ExecuteSQL(dm.Con,strsql);
AstaClientDataSet3.next;
end;
end;
end;
FmProType1.ds1.DataSet.Refresh;
FmProType1.ds2.DataSet.Refresh;
FmProType1.FormInit;
showmessage('下载成功!');
Fmcplbxz.close;
end;
不知道有没有办法通过xml来加载树?