在数据库中我建立了一个表,其中关键字[detail_key] [int] IDENTITY (1, 1) NOT NULL,自动增长的;现在我是用TDatabase连接SQL数据库,在程序中新增一条记录,如果用TQuery控件来提交,后台数据库中关键字detail_key是自动增长,但在前台(程序)中,这个字段却没有改变,这时我如果要删除这条记录,就会提示失败,因为关键字不正确,一定要重新打开这个表才能正确显示.如果改用TAdoquery控件来提交,就一点问题没有,这是为什么呢?现在我的整个程序中都是继承的TQuery,不可能全部换成TAdoquery,哪位大虾来帮我这个忙啊.急.....

解决方案 »

  1.   

    TQuery有其局限性;try
      ... insert record
      ... find maximum of recordcount 
      ... display maximum + 1  
    except
    end;    // 不处理任何异常,即把任何异常当作正常
    或者只在局部使用一个临时的 TADOQuery 实例,用完后抛弃
      

  2.   

    BDE问题,楼上的第二种方法可以考虑
      

  3.   

    如果使用BDE时,最好不用自动增长的字段做搜索字段。
      

  4.   

    设置TTable里有个属性,叫什么忘了,很久没有用delphi了.
      

  5.   

    TQuery增加记录之后不能刷新,会提示错误 "Table does not support this operation because it is not uniquely indexed"  怎样解决这个问题呢
      

  6.   

    用中间表(临时表)中转一下。也就是重新取数据到临时表。 将临时表的DataSet付给Dbgrid.DataSource.DataSet就可以了。
      

  7.   

    这个是自动变量字段的一个产生值的时间问题,当数据完全提交进入数据库时才由数据库产生相应的自动编号,你在删除时,由于自动编号未能反映到数据集中来,所以找不到关键字段,删除报错!
    解决办法是post之后刷新!
      

  8.   

    如果你担心不能定位到该记录,可以记下临近的RecNo,刷新后通过移动指针到该记录!
      

  9.   

    post之后刷新!
    怎样刷新啊
    TQuery增加记录之后不能刷新,会提示错误 "Table does not support this operation because it is not uniquely indexed"  怎样解决这个问题呢