为了解决程序中偶尔出现的“无法为更新定位行。一些值可能已在最后一次读取后已更改”问题,
先是用 CursorLocation:=clUseServer,但出现无数不明错误,只好放弃。于是打算按一些帖子所述的,表里不设默认值来解决,因为程序已经分发,所以需要做个更新程序自动修改表,请教如何用SQL语句取消某个字段的默认值?或者有没有更简单的方法取消所有的默认值?

解决方案 »

  1.   

    补充一下,数据库是ACCESS的,用的D7
      

  2.   

    SQL SERVER的话可以通过修改syscolumns,CDefault为0即可。
      

  3.   

    刚提交就变了,发一个我的意思,用ADOCONNECTION获取到所有的表,循环打开所有表,取得每个表的字段名,再用ALTER语句去设置DEFAULT为null
      

  4.   

    SQL SERVER 我查到 alert …… drop 需要约束名,可ACCESS没有约束名的另外,设为NULL  那么 数字类型,也是吗,新建一个ACCESS表时,数字类型自动就有一个默认值0,怎么办,会影响“无法为更新定位行。一些值可能已在最后一次读取后已更改” 吗?
      

  5.   

    你用到了DataSetProvider吧!DataSetProvider1.UpdateMode := upWhereKeyOnly;即可.
      

  6.   

    我一般都是这样做的,基本上没有遇到过。
    新增记录,不管是append,还是insert赋值完成后,及时post并requery后再修改。或用SQL语句插入后再requery过来修改。尤其是主从关系需要主表主键的,这样做就更有必要。
      

  7.   

    我想知道的是,ACCESS表里,如何用SQL语句去掉字段的默认值。
      

  8.   

    CursorLocation:=clUseServer  改成 CursorLocation:=clUseClient,详细请看http://blog.csdn.net/yxp200401
      

  9.   


    用的就是 CursorLocation:=clUseClient ,现在咨询如何去掉字段默认值