各位大侠:
    我使用的环境是D7+DBGRIDEH4,界面中有一主表查询,下面有一子表查询,主表adoquery有AfterScroll事件,在此事件中用于查询并打开子表内容。
    现有这么一个问题,当用户在主表对应的dbgridEH中按CTRL+F查询时,子表查询在不能的刷新打开,速度很慢,请问有没有办法解决这个问题,让主表对应的DBGRIDEH按CTRL+F的时候关闭主表adoquery的afterscroll事件?查找到后再打开呢?
    dbgrideh

解决方案 »

  1.   

    1、用这个试试:
    self.ADOQuery1.DisableControls;
    self.ADOQuery1.EnableControls;
    2、如果不行的话,再用这个试试
    self.ADOQuery1.AfterScroll :=nil;
    self.ADOQuery1.AfterScroll:=ADOQuery1AfterScroll;
    3、这个方法应该可以用
    在self.ADOQuery1.AfterScroll事件代码中加一个变量用来判断是否打开子表,你只要改变这个变量就能控制是否打开子表。
    都没有试过,楼主试过了,告诉大家。                       
      

  2.   

    ADOQuery1.AfterScrol是不是没有被触发
      

  3.   


    感谢回复,只是我在主表的afterscroll加的代码,用来根据主表中的不同值来打开和查询子表值明细,因为业务系统操作过程中有很多人是直接用键盘上下移动主表的记录,用这种方式是保证鼠标点击或者键盘移动时子表都能马上打开,我所说的问题是当用户在主表对应的dbgrideh上按“CTRL+F”后,出来一个查询对话框,查找时感觉主表应该是在不停的向下移动(在查找内容),此时子表也会在不同的关闭并打开,这样的话速度很慢,想解决这个问题,主要是想在用户按“CTRL+F”时把主表对应的afterscroll改为nil,找到后再加上,这样就可以了,只是不知道“CTRL+F”是哪个事件?同时你提供的几种方式里不知道加在哪个触发事件里比较好?
      

  4.   


    就是因为在“CTRL+F”后被不停的触发了,所以感觉慢,现在的想法就是在主表被“CTRL+F”时不被触发,“CTRL+F”完成后再触发,只是不知道在哪里去写这个afterscoll=nil的代码!
      

  5.   

    CTRL+F是DBGRIDEH提供的一种快捷查询方法。它的触发应该可以在keydown中捕获。
    详细键值可参考一下这个网址:
    http://blog.sina.com.cn/s/blog_9e2e84050101800a.html
    还有另一个方法。别用热键了,放一个按纽,在事件里写
        self.ADOQuery1.DisableControls;
        Keybd_Event(VK_CONTROL,Byte(0),0,0);
        Keybd_Event(Byte(70),Byte(0),0,0);
        Keybd_Event(Byte(70),Byte(0),KeyEventF_KEYUP,0);
        Keybd_Event(VK_CONTROL,Byte(0),KeyEventF_KEYUP,0);
        self.ADOQuery1.EnableControls;
    没有测试,楼主试试
      

  6.   


    用了第一种方法,在ONKEYPRESS时判断CTLR+F时把adoqueryafterscroll=nil,这样查找时快多了,但是查找完了没办法把adoqueryafterscroll改回来,呵呵,只好在mousedown里加上这么一条了。