多线程!每个线程里打开一个数据集。(100分)

  • 主题发起人 主题发起人 sunrainwang
  • 开始时间 开始时间
S

sunrainwang

Unregistered / Unconfirmed
GUEST, unregistred user!
我有一个信息输入界面,里边涉及很多内容。有十几个表,而且每个表都有上万条记录。现在打开界面时如果在create事件里逐个open,打开界面的时间会很长,现在我为每个表建立一个线程,每个线程里写一句open语句。然后在界面的create事件里逐个创建线程。可是这样会有错误,不知为何?
 
线程部分代码
uses U_datamodule;
procedure ThreadOpenGdazb.Execute;
begin
{ Place thread code here }
freeonterminate:=true;

synchronize(OpenDataset);

end;

procedure ThreadOpenGdazb.OpenDataset;
begin
CustomerData.CDS_Gdazb.Open;
end;
 
我认为你这个想法就不好
十几个表,每个有上万条记录?有必要吗?
做程序要尽量减少网络传输呀.
 
呵呵. 要让数据和界面无关..
 
调用部分代码:
create ////
......
CustomerData.CDS_Gdfbb.close;
CustomerData.CDS_Gdfbb.Open;//这条语句放到下边线程创建之后运行就出错
ThreadOpenGdfbb1 :=ThreadOpenGdfbb.create(false);//只此一句后面的不要不会出错
ThreadOpenGdkpb1 :=ThreadOpenGdkpb.create(false);
ThrdOpenWtggb1:=ThrdOpenWtggb.create(false);
.....
 
是这样,主表有上万条记录,从表10几个,是采用三层结构做的。客户为了方便输入用pagecontrol逐页分开的。本来在点击相应页面的时候打开数据集,可是这样停顿比较厉害。客户不同意。
 
to itren,
怎么样让数据和界面无关?help me
 
既然是录入数据,就不要从后台取数据出来呀.
你又不是查询.
 
现在不是讨论这个问题的时候了。东西都已经在用了。现在是改进。补救。想想我提的这个问题吧。谢谢
 
具体方法你可以去多线程那里问。
别管自己是多少层结构,你的做法就是把数据库的东西一下子全部保存到本地数据集里对吧。如果数据多,就算你开多线程一样会有延迟的。而且,如果你采用的是一次集中下,你又怎么保证数据的统一性呢??
你看看这样的方法可以不可以:你显示的时候只是取要用到的那一部分数据。
这个时候你会说:是啊,原来我就是这么做的,但,在PAGE切换的时候,有延迟,用户乱点还会死机。。。一个PAGE里要提供显示用的数据不会很多的,当然如果你里面有个DBGRID而表里有10000000000条记录,你一次全取过来,那慢是谁的错??取个10个就够了,要那么多做什么呢,你看得来,用户也烦啊。
一句话,物尽其用!
 
另外开一个线程也就够了,没有必要开那么多啊
 
一飞冲天:
我就是这样做的packetrecords=10
lich:
开一个线程延时长一些,我想多开几个线程,加快数据打开速度。但是这么多数据集在一个线程里边一起打开是不会出错的,在多个线程里边打开就会出错
 
后退
顶部