vb6 datagrid新增一行时,报错:无法将null值......

psukk 2008-06-04 11:09:23
vb6 datagrid
AllowAddNew = True
AllowDelete = True
AllowUpdate = True

数据源是一sql表A,其中有主键列1,是自增列
运行,datagrid
新增一行时,报错:无法将null值列1......,
不明的是那一些明明是自增列?
而且即使我想在datagrid中输入那一列的值,程序也不允许,请大侠救我




...全文
202 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
CathySun118 2008-06-05
  • 打赏
  • 举报
回复
你用绑定方式Addnew的话,默认是要增加所有列的,所有会提示错误,你改为insert语句插入吧
Tiger_Zhao 2008-06-05
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 psukk 的回复:]
2.如果不行,数据源改用表名试试能不能用自增列,可是那样服务器的负担太大,因为将来makordmx表的行数会很多 [/Quote]
因为没用过自增列绑定,所以用表名试试是否支持该功能,如果可以,那么 SELECT 方式应该时其它什么属性没设置好,可以再尝试,否则就只能选方案 3 了。
yangao 2008-06-05
  • 打赏
  • 举报
回复

如果表名是makordmx 的话
那你这个查询就是错的
select mm,ord,pron,qu,jhd,wcd,memo from makordmx where makordid=" & makordid
应该是
select mm,ord,pron,qu,jhd,wcd,[memo] from makordmx where [id]=" & makordid
你这表里没有[makordid]这个字段
psukk 2008-06-05
  • 打赏
  • 举报
回复
不好意思,打错字了,不知为何不能修改贴子,在这里说明了
表名还是makordmx

makordmx表中有以下字段

id int 主键 自增列
mm char(10)
ord char(10)
pron vchar(50)
qu int
jhd smalldatetime
wcd smalldatetime
memo vchar(50)
yangao 2008-06-05
  • 打赏
  • 举报
回复

你现在查询的表和你贴出来的表不是一个表啊
不知道你到底要干什么
psukk 2008-06-05
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 Tiger_Zhao 的回复:]
到还从来不用自增列参与绑定,那么试试:
1、数据源中指定 CursorType = adOpenKeySet
2、如果不行,数据源改用表名试试能不能用自增列
3、实在不行,取消默认的新增事件,自己用 INSERT 语句添加纪录。
[/Quote]

我把sqlstr改为 select mm,ord,pron,qu,jhd,wcd,memo from makordmx where makordid=" & makordid
这样是没有绑定自增列id,但还是一样的报错

1、数据源中指定 CursorType = adOpenKeySet,这个已经是了
2.如果不行,数据源改用表名试试能不能用自增列,可是那样服务器的负担太大,因为将来makordmx表的行数会很多
3.实在不行,取消默认的新增事件,自己用 INSERT 语句添加纪录。这个肯定是可以,但是那样要重新做,工作量有点大
psukk 2008-06-05
  • 打赏
  • 举报
回复
makordid表中有以下字段

id int 主键 自增列
mm char(10)
ord char(10)
pron vchar(50)
qu int
jhd smalldatetime
wcd smalldatetime
memo vchar(50)

Dim sqlstr As String
Dim rs As New ADODB.Recordset
sqlstr=select * from makordmx where makordid=" & makordid 'makordid为一变量,是要修改的单号

'数据是否已连接
If (cn.State = 0) Then
linkdate '连接数据库的public sub
End If

rs.Open sqlstr, cn, adOpenKeyset, adLockOptimistic, adCmdText

'dg2是一datagrid

Set dg2.DataSource = rs
dg2.AllowAddNew = True
dg2.AllowDelete = True
dg2.AllowUpdate = True



yangao 2008-06-05
  • 打赏
  • 举报
回复
我这里用的没问题啊
把代码贴上来看看
paullbm 2008-06-05
  • 打赏
  • 举报
回复
用sql中的insert into ... values...

结合 Data1.Database.Execute 方法


就行啦....

方便省事!!!


如:
Dim strSQL as String
strSQL = "insert into from_name(字段1,字段2,...字段N) values (值1,值2,...值N)"
Data1.Database.Execute strSQL

===========
自己注意组合字符串strSQL,VB中要用到的sql语句和实际的sql语句有点小差别!!
Tiger_Zhao 2008-06-05
  • 打赏
  • 举报
回复
到还从来不用自增列参与绑定,那么试试:
1、数据源中指定 CursorType = adOpenKeySet
2、如果不行,数据源改用表名试试能不能用自增列
3、实在不行,取消默认的新增事件,自己用 INSERT 语句添加纪录。
迈克揉索芙特 2008-06-05
  • 打赏
  • 举报
回复
把select语句贴上来
psukk 2008-06-05
  • 打赏
  • 举报
回复
补允一下,数据源不是一个表,是一个select语句
Tiger_Zhao 2008-06-05
  • 打赏
  • 举报
回复
既然已经有了 makordid,就不需要自增列 id 了。
psukk 2008-06-05
  • 打赏
  • 举报
回复
表名是makordmx

makordmx表中有以下字段

id int 主键 自增列
makordid int
mm char(10)
ord char(10)
pron vchar(50)
qu int
jhd smalldatetime
wcd smalldatetime
memo vchar(50)

1,217

社区成员

发帖
与我相关
我的任务
社区描述
VB 数据库(包含打印,安装,报表)
社区管理员
  • 数据库(包含打印,安装,报表)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧