请教如何用SQL语句取消字段默认值

时间:2021-11-01 10:03:19
为了解决程序中偶尔出现的“无法为更新定位行。一些值可能已在最后一次读取后已更改”问题,
先是用 CursorLocation:=clUseServer,但出现无数不明错误,只好放弃。

于是打算按一些帖子所述的,表里不设默认值来解决,因为程序已经分发,所以需要做个更新程序自动修改表,请教如何用SQL语句取消某个字段的默认值?

或者有没有更简单的方法取消所有的默认值?

17 个解决方案

#1


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

#2


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

#3


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

#4


SQL SERVER 我查到 alert …… drop 需要约束名,可ACCESS没有约束名的

另外,设为NULL  那么 数字类型,也是吗,新建一个ACCESS表时,数字类型自动就有一个默认值0,怎么办,会影响“无法为更新定位行。一些值可能已在最后一次读取后已更改” 吗?

#5


打開表一個個的去改

#6


以前经常碰到这个问题,后来表结构设置都带主键,这个问题就没有再碰到过

#7


我的表是都有主键的

#8


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

#9


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

#10


引用 8 楼  的回复:
你用到了DataSetProvider吧!DataSetProvider1.UpdateMode := upWhereKeyOnly;即可.


没有用到DataSetProvider

#11


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


我不是新增记录

#12


晕晕地,你用到了什么控件,属于什么程序先说说吧,是三层吧。

#13


不是三层

dbgrid +ado+access

#14


删除表,然后重建一个。

#15


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

#16


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

#17


引用 16 楼  的回复:
CursorLocation:=clUseServer  改成 CursorLocation:=clUseClient,详细请看http://blog.csdn.net/yxp200401


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

#1


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

#2


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

#3


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

#4


SQL SERVER 我查到 alert …… drop 需要约束名,可ACCESS没有约束名的

另外,设为NULL  那么 数字类型,也是吗,新建一个ACCESS表时,数字类型自动就有一个默认值0,怎么办,会影响“无法为更新定位行。一些值可能已在最后一次读取后已更改” 吗?

#5


打開表一個個的去改

#6


以前经常碰到这个问题,后来表结构设置都带主键,这个问题就没有再碰到过

#7


我的表是都有主键的

#8


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

#9


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

#10


引用 8 楼  的回复:
你用到了DataSetProvider吧!DataSetProvider1.UpdateMode := upWhereKeyOnly;即可.


没有用到DataSetProvider

#11


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


我不是新增记录

#12


晕晕地,你用到了什么控件,属于什么程序先说说吧,是三层吧。

#13


不是三层

dbgrid +ado+access

#14


删除表,然后重建一个。

#15


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

#16


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

#17


引用 16 楼  的回复:
CursorLocation:=clUseServer  改成 CursorLocation:=clUseClient,详细请看http://blog.csdn.net/yxp200401


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