我在窗体中用了DBGrid和ADOTable控件,我希望在DBGrid控件上修改数据后,调用
ADOTable的refresh方法刷新一下数据库,但是每次程序运行到此处就出现如下错误:
   Project MyPrj.exe raised exception clas EOLeException with message
'缺少更新或刷新的键列信息'.Process Stopped.

解决方案 »

  1.   

    我没多少代码,就在一个按钮按下时调用AdoTable.fresh方法,我怀疑是不是我设置ADOConnecton和ADOTable或者DBGrid的问题,但我不知道哪儿出错的,该查看的地方我都查看了,好像没错呀
      

  2.   

    AdoTable.Close();
    AdoTable.Open();试试
      

  3.   

    1、要Refresh的表必须要建立唯一主索引,即使Access/SQL2000也如此
    2、没有必要不要使用Refresh,因为它效率太差了,通过
       ADOTable.Close;
       ADOTable.Open;
       //然后根据需要是否返回到指定行
       ADOTable.Locate();
       //或者
       ADOTable.RecNo:=X;
      

  4.   

    用的什么操作系统?我在windowsxp中也遇到过
      

  5.   

    TO:EVOLUOP,Hank
       我试过了,但是我在DBrid上改参数值,虽然单击“ 保存”按钮没问题,可是数据库中的数据没变呀。
       你们说我是不是哪个控件的参数设置的有问题呀。
        我也是过在DBGrid上修改数据后,然后ADOTable.refresh,还可以,不过修改DBGrid单元上的数据使用DBGrid自带的下拉列表实现。
        问题是我现在在DBGrid上修改数据是直接在单元上输入。
      

  6.   

    close;
    open;
    用AdoQuery比较好
      

  7.   

    输入后有没有adotable.post ?????
      

  8.   

    adotable1.refresh=====adotable1.close;adotable1.open;
      

  9.   

    to tetsuya:
       你说我运行时是在DBGrid的单元中输入的,我只在DBGrid的onkeypressdown事件中加入了只能输入数字的判断,我应该把ADOTable.post放在哪儿?
       Post方法是什么意思?
      

  10.   

    1、数据库中建立主索引
    2、不要通过Refresh保存,通过Post;
    3、通过Close然后Open刷新数据比ReFresh不仅效率高而且极少出错!
      

  11.   

    我推荐用 adoquery
    并用 adoquery.requery  来刷新数据。