用ado连接数据库
实现对数据库的每条记录与条件进行比较
主要代码如下:
   timer1的处理代码 间隔为1秒  while not adotable1.eof do
     adotable1.first;
    if 条件 then
     begin
      条件处理代码
     adotable1.next;
     end
     else
     adotable1.next;
所需要的功能已经实现
但是,adotable对应的dbgrid在显示时
每一秒高亮条都从第一行到最后一行出现一次
右侧的滚动条从上到下滚动一次
使的程序执行起来看着很不美观
试过固定行
但效果仍不好
对某条记录进行编辑也无法选中(选中后马上到下一个周期的循环扫描了)
不知有没有让dbgrid的高亮在表面上看不出现,
但后台能与数据库保持同步的方法 ~~~~

解决方案 »

  1.   

    你在While循环前面加上一句adotable1.DisableControls,然后在循环结束后加上adotable1.EnableControls就行了,这两句话的作用就是对数据库操作控制进行管理,使首先使DBGrid不能访问Table,循环结束时再恢复就行了。
      

  2.   

    同意楼上的,
      adotable1.DisableControls
       .
       .
       .
      adotable1.EnableControls
      

  3.   

    呵, 还想要啊, 那你再拉个adoTable来打开表, 你那个在处理时就让数据源指向这个新的adoTable好了,完了再置换回来, 呵呵,反正现在内存大了是不是。
      

  4.   

    方法一:用
      DisableControls  EnableControls方法二:设置它的DefaultDrawing 为FALSE,在OnDrawColumnCell中写如下代码:
      if (gdSelected in state) and (not dbgrid1.Focused) then 
      begin
        dbgrid1.canvas.brush.color:=clwhite;
        dbgrid1.Canvas.font.Color:=clblack;
      end;
      

  5.   

    不行啊!!
    在循环体内还要对adotable进行字段值的读取
    我是把adotable的字段值与一个值比较
    这样以来就不能实现了
    是否可以用dbgrid的属性进行操作
    另外,用
      DisableControls
    .......
      EnableControls高亮总是在最后一个记录
    想对其他记录操作时,选中后1秒后(我的timer间隔为一秒)
    又回到最后一条记录了
    来不及作出选择~~
      

  6.   

    另外,如用dbgrid时,有没有控制其指针移动到下一个记录的语句!!~~
    循环中要用~~
      

  7.   

    能不能把你想要做什么说清楚点。选择的时候不让滚动,只要这时把timer1关掉就行了,但不知是否影响你的其他功能
      

  8.   

    我是用timer定时对adotable进行循环扫描
    我是把adotable的字段值与一个变量比较
    进行分支判断
    我试过了
    功能可以实现
    只是用
      DisableControls
    .......
      EnableControls高亮总是在最后一个记录
    想对其他记录操作时,如删除,选中后1秒后(我的timer间隔为一秒)
    又回到最后一条记录了
    来不及作出选择~~
    不知有何方法~~
      

  9.   

    我的理解:你的目的是不是将表中某字段值与第三者比较,真或假时分别执行不同操作?
    能否运用QUERY通过SQL语句批量进行,提高效率。