并且,程序可以响应form.close事件,但不能结束query

解决方案 »

  1.   


    将就的法子:循环中间加上Application.ProcessMessage;退出时间中再加带有Application.ProcessMessage的循环延时。
      

  2.   

    改成如下: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;
      

  3.   

    对了,加了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;
      

  4.   

    但是你的代码里好像没有将Running设定为False的代码的?
      

  5.   

    修改While循环如下就可以了:
    while ((not query.eof) and (running)) do
    begin
        ......
        处理数据;
        query.next;
        application.ProcessMessages;
        if not running then break;
    end;
      

  6.   

    试试这招:
    可用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;
      

  7.   

    看看你在别的地方有没有用到query,
    如果用了就有可能出问题的.
      

  8.   

    formclose和formclosequery的代码?
      

  9.   

    要关闭TQuery为什么不直接写TQuery.Close;
    应用程序关闭了,但是由于打开Query而在数据库上添加的进程并不会主动关闭阿!!!!