程序不能退出!太奇怪了!

netsong 2001-08-31 12:26:51
我在程序中用query操纵数据库,简化代码如下:

在开始按钮中:

query.close;
query.sql.clear;
query.sql.add(sql);
query.open;
running:=true; // 全局布尔变量
while ((not query.eof) and (running)) do
begin
......
处理数据;
query.next;
end;

在退出事件中:
running:=false;
...全文
179 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
yangjiongyi 2001-09-07
  • 打赏
  • 举报
回复
不知道
xiamenuniversity 2001-09-07
  • 打赏
  • 举报
回复
要关闭TQuery为什么不直接写TQuery.Close;
应用程序关闭了,但是由于打开Query而在数据库上添加的进程并不会主动关闭阿!!!!
cszhz 2001-09-07
  • 打赏
  • 举报
回复

关键的代码没有帖!

Tense 2001-09-07
  • 打赏
  • 举报
回复
formclose和formclosequery的代码?
ilovedelphi 2001-09-07
  • 打赏
  • 举报
回复
关注
demand 2001-09-07
  • 打赏
  • 举报
回复
up
luxiaoban 2001-09-07
  • 打赏
  • 举报
回复
看看你在别的地方有没有用到query,
如果用了就有可能出问题的.
netsong 2001-09-07
  • 打赏
  • 举报
回复
怎么办?
cobi 2001-09-04
  • 打赏
  • 举报
回复
gz
ecgnis 2001-09-04
  • 打赏
  • 举报
回复
啊!错拉。让我再想想。
ecgnis 2001-09-04
  • 打赏
  • 举报
回复
试试这招:
可用timer实现上面功能timer.interval=40; 1000interval 对应 1秒:
dbclick timer:
procedure timer.ontimer;
begin
处理数据;//可能是个耗时操作。
end;

修改While循环如下就可以了:
first;
while ((not query.eof) do
begin
......
if not timer.enabled then Exit;
query.next;
end;
procedure button1.click;
begin
running:=一个布儿值;
timer.enabled:=running;
end;



netsong 2001-09-04
  • 打赏
  • 举报
回复
to kingron: 这招不灵呀
Kingron 2001-09-01
  • 打赏
  • 举报
回复
修改While循环如下就可以了:
while ((not query.eof) and (running)) do
begin
......
处理数据;
query.next;
application.ProcessMessages;
if not running then break;
end;

netsong 2001-09-01
  • 打赏
  • 举报
回复
???
netsong 2001-08-31
  • 打赏
  • 举报
回复
对了,加了Application.ProcessMessage了

triggerquery.Close;
triggerquery.sql.Clear;
triggerquery.Prepare;
triggerquery.Open;
triggerquery.First;
Running:=true;
while (not triggerquery.Eof) and (Running) do
begin
application.ProcessMessages;
key:=triggerquery.Fields[2].Asstring;
gjz:=triggerquery.Fields[4].Asstring;
APage:=GetAPageCfg(inipath, triggerquery.Fields[0].Asstring, key);
处理数据;
triggerquery.Next;
end;
end;
Michaelyfj 2001-08-31
  • 打赏
  • 举报
回复
改成如下:

query.close;
query.sql.clear;
query.sql.add(sql);
query.open;
running:=true; // 全局布尔变量
while ((not query.eof) and (running)) do
begin
......
处理数据;
Application.ProcessMessage; //增加这一行
query.next;
end;
enlightenment 2001-08-31
  • 打赏
  • 举报
回复

将就的法子:

循环中间加上Application.ProcessMessage;

退出时间中再加带有Application.ProcessMessage的循环延时。

enlightenment 2001-08-31
  • 打赏
  • 举报
回复

关键的代码没有帖!

netsong 2001-08-31
  • 打赏
  • 举报
回复
并且,程序可以响应form.close事件,但不能结束query
netsong 2001-08-31
  • 打赏
  • 举报
回复
但是单步挑试没有问题!
加载更多回复(2)

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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