ADOQuery读取数据库数据有时不成功?

精锐掷矛手 2010-02-24 10:28:09
我在一个线程中循环读取数据库4个表的数据,
例如:

tempStr:='exec Read_Call_Order '+inttostr(maxid1);
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add(tempStr);
ClientDataSet1.Close;
clientdataset1.Open;
order3:= clientdataset1.RecordCount;

//没有则退出
if(clientdataset1.RecordCount >0) then
begin
while not ClientDataSet1.Eof do
begin
is_new:=ClientDataSet1.FieldByName('well_is_new').AsBoolean;
ReadRealdata(ClientDataSet1,is_new); //发送读取数据功能
ClientDataSet1.Next;
sleep(1);
Application.ProcessMessages;
end;
maxid1:=Clientdataset1.fieldbyname('gprs_data_id').AsInteger;
end;

//发送命令
tempStr:='exec Read_CheckClock_Order '+inttostr(maxid2);
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add(tempStr);
ClientDataSet1.Close;
clientdataset1.Open;
order1:=clientdataset1.RecordCount;

//没有则退出
if(clientdataset1.RecordCount >0) then
begin
while not ClientDataSet1.Eof do
begin
is_new:=ClientDataSet1.FieldByName('is_new').AsBoolean;
CheckClock(ClientDataSet1,is_new); //发送校时功能
ClientDataSet1.Next;
sleep(1);
Application.ProcessMessages;
end;
maxid2:=Clientdataset1.fieldbyname('gprs_set_date_id').AsInteger;
end;

开始运行正常,过一段时间大概七八天后(不确定),从所有的order(order1,order2...)的值(固定不变了)看出,这段代码已经不执行了,adoquery不再读取数据库数据了。
ps:Read_CheckClock_Order等为存储过程。
...全文
200 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
精锐掷矛手 2010-02-24
  • 打赏
  • 举报
回复
CPU挺高的,数据库数据大200多万条
林石公 2010-02-24
  • 打赏
  • 举报
回复
有没看内存占用高不高?
你最好加点日志操作
精锐掷矛手 2010-02-24
  • 打赏
  • 举报
回复
运行环境:Windows2003,装有delphi
数据库在其他服务器上
精锐掷矛手 2010-02-24
  • 打赏
  • 举报
回复
引用 4 楼 dd_zhouqian 的回复:
ADOQuery1.Close;
  ADOQuery1.SQL.Clear;
  ADOQuery1.SQL.Add(tempStr);

1.这个有什么用,没看到再哪个地方用到。
2.你看下服务端有没有你的clientdataset的请求

ADOQuery与Clientdataset用DataSetProvider关联在一起的
dd_zhouqian 2010-02-24
  • 打赏
  • 举报
回复
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add(tempStr);

1.这个有什么用,没看到再哪个地方用到。
2.你看下服务端有没有你的clientdataset的请求
精锐掷矛手 2010-02-24
  • 打赏
  • 举报
回复
引用 2 楼 shuangyan 的回复:
你的这个adoquery以及adoconnection是否这个线程专用?

shuangyan 2010-02-24
  • 打赏
  • 举报
回复
你的这个adoquery以及adoconnection是否这个线程专用?
精锐掷矛手 2010-02-24
  • 打赏
  • 举报
回复
自己顶顶回复内容太短了!
精锐掷矛手 2010-02-24
  • 打赏
  • 举报
回复
引用 10 楼 sonicer 的回复:
先看一下是否有内存泄露
判断一下,有没有可能clientdataset与datasetprovider之间的关系断掉了(或者provider与adoquery之间的关系断掉了),假设是这样的话, 那么每次你打开cds时,肯定是最后一次成功取得的数据集
所以,在你每次open clientdataset前,全部手动设置一下query - provider - cds之间的联系,然后再测试一下程序

我试验几天,一定结贴!
精锐掷矛手 2010-02-24
  • 打赏
  • 举报
回复
我试一下,感谢回复!
林石公 2010-02-24
  • 打赏
  • 举报
回复
先看一下是否有内存泄露
判断一下,有没有可能clientdataset与datasetprovider之间的关系断掉了(或者provider与adoquery之间的关系断掉了),假设是这样的话, 那么每次你打开cds时,肯定是最后一次成功取得的数据集
所以,在你每次open clientdataset前,全部手动设置一下query - provider - cds之间的联系,然后再测试一下程序
精锐掷矛手 2010-02-24
  • 打赏
  • 举报
回复
顶起来顶起来顶起来顶起来顶起来

2,496

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧