delphi中用adotable1向SQL添加条目的怪现象。
在D7下,经测试。如果一个表的字段太多,就加不进去。报错。程序如下:adotable1.TableName:='dbo.cur_user';adotable1.Activ...
在D7下,经测试。如果一个表的字段太多,就加不进去。报错。程序如下:
adotable1.TableName:='dbo.cur_user';
adotable1.Active:=true;
adotable1.Open;
adotable1.Insert;
adotable1.Fields[0].Asstring:='0';
..........................
..........................
adotable1.Fields[56].Asstring:='0';
adotable1.post;
adotable1.Active:=false;
代码应该没问题,因为如果我只post十几二十条的fields就不会出错。一过30就爱出错了。过40基本就没有成功的时候。请问这是为什么?难倒向一个字段多的表(57个字段)就爱出错吗?
我解释一下我的问题状态.
有一个SQL数据库,库里有一个TABLENAME为cur_user.他有57个字段.我想用adotable的post新添一行数据.我发现如果添加的字段少(比如只加10几个,其它的不加默认为NULL就可以加进去.).如果把57个字段都指定了值,那么一定会报错.说多处出现错误.我指定的值不应该是错的,因为是按上一条的内容指定的(为了做试验).除了里面的流水号不一样,别的都一样.可是就是不行.郁闷ing..
试了楼下两位大哥的方法,还是不行.哎~我现在的暂时解决办法是.先post五个主要字段进表,然后用query的update分三次再把别的内容加进去.不过我的这个解决办法说明我的语法没错.很有可能还是因为字段太多引起的.但是一:没超过900字节,二:zzluo说了他60多个字段都可以导,我才57个呀.
三:这个表是人家pubwin的表,我只是想导进去点什么,他的字段一定没问题.出错的在我,不在表和数据类型. 展开
adotable1.TableName:='dbo.cur_user';
adotable1.Active:=true;
adotable1.Open;
adotable1.Insert;
adotable1.Fields[0].Asstring:='0';
..........................
..........................
adotable1.Fields[56].Asstring:='0';
adotable1.post;
adotable1.Active:=false;
代码应该没问题,因为如果我只post十几二十条的fields就不会出错。一过30就爱出错了。过40基本就没有成功的时候。请问这是为什么?难倒向一个字段多的表(57个字段)就爱出错吗?
我解释一下我的问题状态.
有一个SQL数据库,库里有一个TABLENAME为cur_user.他有57个字段.我想用adotable的post新添一行数据.我发现如果添加的字段少(比如只加10几个,其它的不加默认为NULL就可以加进去.).如果把57个字段都指定了值,那么一定会报错.说多处出现错误.我指定的值不应该是错的,因为是按上一条的内容指定的(为了做试验).除了里面的流水号不一样,别的都一样.可是就是不行.郁闷ing..
试了楼下两位大哥的方法,还是不行.哎~我现在的暂时解决办法是.先post五个主要字段进表,然后用query的update分三次再把别的内容加进去.不过我的这个解决办法说明我的语法没错.很有可能还是因为字段太多引起的.但是一:没超过900字节,二:zzluo说了他60多个字段都可以导,我才57个呀.
三:这个表是人家pubwin的表,我只是想导进去点什么,他的字段一定没问题.出错的在我,不在表和数据类型. 展开
展开全部
是不是表关系冲突?或者数据类型错误
字段多了,容易犯晕,注意查看它的异常信息,把sql在查询分析器里执行执行,说不定小毛病导致了大问题呢
如果你有写存储过程,要注意一下了,也有可能是这里面的参数类型不小心写错了,这里面的错误还只能在查询分析器里面看得到,小心把这个问题给遗漏啦
我用access数据库做的一个桌面应用程序,动态生成60多个字段的表单,然后批量插入数万条数据都没出过问题,sqlserver不可能比access弱吧 :>
补充:我今天试了试,Sqlserver 表字段支持8kb,如int类型占4字节,smallint占1个字节
当我使用轻份量的数据类型创建表单如int,smallint,varchar(1) 字段数200多个都没问题,并可以插入
所以你要注意的就是你的表字段类型,是不是varchar(X)(其中X的数值比较大最大8000,1就是占1字节,8000就是8k了)这种字段有很多,这种表结构设置就有很大问题了,如果要保存大量字符,还是建议使用text类型(text支持2G,放心用)
你查查看他的表是不是有这个问题,软件难免会有BUG的,才不管它是不是pubwin,Windows还那么多漏洞呢
PS:我的60多个字段插入数据,那是因为字段所占的字节数都很小
你把这段在查询分析器里执行看看:
------------
Create Table DDD
(
B1 varchar(8000),
B2 varchar(8000)
)
------------
就能看到问题了
:)
字段多了,容易犯晕,注意查看它的异常信息,把sql在查询分析器里执行执行,说不定小毛病导致了大问题呢
如果你有写存储过程,要注意一下了,也有可能是这里面的参数类型不小心写错了,这里面的错误还只能在查询分析器里面看得到,小心把这个问题给遗漏啦
我用access数据库做的一个桌面应用程序,动态生成60多个字段的表单,然后批量插入数万条数据都没出过问题,sqlserver不可能比access弱吧 :>
补充:我今天试了试,Sqlserver 表字段支持8kb,如int类型占4字节,smallint占1个字节
当我使用轻份量的数据类型创建表单如int,smallint,varchar(1) 字段数200多个都没问题,并可以插入
所以你要注意的就是你的表字段类型,是不是varchar(X)(其中X的数值比较大最大8000,1就是占1字节,8000就是8k了)这种字段有很多,这种表结构设置就有很大问题了,如果要保存大量字符,还是建议使用text类型(text支持2G,放心用)
你查查看他的表是不是有这个问题,软件难免会有BUG的,才不管它是不是pubwin,Windows还那么多漏洞呢
PS:我的60多个字段插入数据,那是因为字段所占的字节数都很小
你把这段在查询分析器里执行看看:
------------
Create Table DDD
(
B1 varchar(8000),
B2 varchar(8000)
)
------------
就能看到问题了
:)
参考资料: 抓虫经验
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询