表中有自增长字段tID,为什么我在程序里面增加内容,老是提示Field tID must hava a value我没有用任何代码,只用DBNavigator控件和DBGrid控件测试,我一按DBNavigator控件的“钩”,就出现这种情形了,我还没有用ApplyUpdate呢。但我换成用ADO连接,却不会出现这样的问题。诚心求教各位!

解决方案 »

  1.   

    是不是表中存在NOT NULL(非空)字段呀?你再仔细检查检查。
      

  2.   

    tID是自增长标识,肯定是非空的啦。 为什么会这样阿
      

  3.   

    1 選擇tID字段,將ProvidersFlag
      pfInUpdate設為False以下為說明
    ProviderFlags is only relevant for fields that appear in the data packets supplied to a provider component event handlers. This property is a set of flags that determine how the field is used when applying updates or resolving update errors.
      

  4.   

    你双击你的数据集组件,看看是否添加了field,如果添加了,那么看看pk字段的属性设置,是否正确,
    这种情况应该不是数据库在检测,而是你的数据集组件设置了检测
      

  5.   

    用了TUpdateSQL没,如果用了记得把AutoInc字段从Insertsql、updatesql中去掉。
      

  6.   

    JonnySun() 的說法接近了, 你應該如他說的設置 tID 字段, 增加記錄時, 隨機給 tID 一個值, 這樣就可以
      

  7.   

    我在google搜索,大富翁论坛也有个人问这个问题,也解决不了
    http://www.delphibbs.com/delphibbs/dispq.asp?lid=2056609有没有高手啊?
      

  8.   

    >>怎样给它一个值? 那是自增长的ID啊不管它是不是自增长的,你給它個值就行xxx.FieldByName('tid').asinteger:=gettickcount;
    這樣做是種欺騙行為, 它不會保存這個數的.
      

  9.   

    dbexpress在取原数据的时候不是十分的好
    同意 JonnySun的意见
      

  10.   

    如果数据库是 ACCESS 或 SQL Server ,JonnySun()的做法是可行的
      

  11.   

    >>>這麼久還沒解決????選擇tID字段,將ProvidersFlag  pfInUpdate設為False!!!procedure TForm1.Query1NewRecord(DataSet: TDataSet);
    begin
      //這樣做是種欺騙行為, 它不會保存這個的.因為 pfInUpdate設為False@!!
      Query1.FieldByName('tid').asinteger:=gettickcount; 
    end;
      

  12.   

    或將Required設為False. 根據這個方案自己多去試試, 答案十不离九了.
      

  13.   

    查到问题了,ID字段居然不能用bigint,奇怪。改成别的就没有问题了。