用dbgrid显示使用adoquery查询出来的结果,希望在dbgrid中能修改某些字段,但不希望能新增记录,能实现吗?

解决方案 »

  1.   

    有意思,你不写新增纪录的代码不就得了?如果你用了DBNavigator,设一下visiblebuttons属性,隐藏insert和delete按钮。再在Datasource的Onupdatedata时间里写上
    if AdoQuery1.isempty 
      then Adoquery1.cancel;
      

  2.   

    但是,如果本来查询出两条记录,当光标在最后一条记录的最后一个字段时,再按了TAB键,光标自动跑到了下一条记录(即给我新增了记录!),我希望光标不能跑到下一条记录!行吗?
      

  3.   

    在onkeypress事件中判断,如果adoquery1.eof and key in [] then 
    key:=#0;
    tab、left、down键值我忘记了,你自己查一下
      

  4.   

    在onkeypress事件中判断,如果已经到表尾并且按下tab,left,down等键泽取消
    if adoquery1.eof and (key in []) then
    key:=#0;
    具体键值忘记了,自己查一下
      

  5.   

    在AdoQuery中的BeforeInsert BeforeAppend 事件中处理
      

  6.   

    ADOQuery的beforeInsert中加一句
      raise exception.create('对不起,不能插入新的记录');
      

  7.   

    在GBGrid里面按一下下箭头就能增加,通过屏蔽按键意义不大。用该从数据集的 BeforeInsert 事件写代码,加一句
      Abort; 就行了。
      

  8.   

    to :pazee:
    我按你的方法试了,是可以,但是如果我想能动态控制,不知能否实现?因为在某些情况下,我是允许它新增的!谢谢!
      

  9.   

    ADOQuery的beforeInsert中加一句
      raise exception.create('对不起,不能插入新的记录');
    hi,你好!
    我按你的说法,在before insert事件中写了代码,结果运行时出错了
    回复:如果用Raise的话你在DELPHI的调试模式下就会接受我在上面写的那个异常,从而中断程序的运行,你编译完了运行就会发现这是由用户控制的一个异常,是正常的!如果想动态控制的话,也很简单的呀,你用一个boolean变量就行了声明 :  private
         IsCanInsert :Boolean;
    在一个按钮的单击事件中写:
     IsCanInsert := not IsCanInsert;在beforeinsert事件中写:if not IsCanInsert then
      raise exception.create('对不起,不能插入新的记录');
      //或者用楼上说的Abort;也行
      

  10.   

    那就在BEFORE INSERT 时做判断,什么时候可以,是么时候不可以。不就可以吗?