请问为什么我在更新数据库时有时会出现“键列信息不足或不正确。更新影响到过多的行。”错误?
例如:
sql = "SELECT T_Schedule.Default " & _
"FROM T_Schedule " & _
"WHERE T_Schedule.ID=1" With AdoTime
.CommandType = adCmdText
.RecordSource = sql
.Refresh
End With With AdoTime.Recordset
If Not (.BOF And .EOF) Then
.MoveFirst
.Fields("Default").Value = True
.Update
End If
End With
在执行到Update处就会出现上述错误。
其中:T_Schedule是数据库中的一个表,ID字段是无重复自增的主键,Default是一个布尔类型的字段,其余不相关字段没有列出。AdoTime是一个Adodc控件,都已经做好初始化工作。
例如:
sql = "SELECT T_Schedule.Default " & _
"FROM T_Schedule " & _
"WHERE T_Schedule.ID=1" With AdoTime
.CommandType = adCmdText
.RecordSource = sql
.Refresh
End With With AdoTime.Recordset
If Not (.BOF And .EOF) Then
.MoveFirst
.Fields("Default").Value = True
.Update
End If
End With
在执行到Update处就会出现上述错误。
其中:T_Schedule是数据库中的一个表,ID字段是无重复自增的主键,Default是一个布尔类型的字段,其余不相关字段没有列出。AdoTime是一个Adodc控件,都已经做好初始化工作。
"FROM T_Schedule " & _
"WHERE T_Schedule.ID=1"
应为
sql = "SELECT T_Schedule.Default " & _
"FROM T_Schedule " & _
"WHERE T_Schedule.ID=‘1’"
----注意1要加引号
是指表中某2行数据完全一样吗?应该不会吧,至少ID字段不一样。
Default字段也不能重复吗?不会吧。
如:开始你的表T(a,b)没有主键,往里插入了两条一样的数据
2,3
2,3
可是后来你改变了表结构,将a设为主键,这样表中就会存留有旧的同样的两条数据,
当你操作时就会出现以上问题
To:subzero
你的SQL语句非常正确,如果换到我的sql变量中肯定不行。
To:yoki
你的说法非常正确,可是我没有插入2条同样的数据,也没有改表的结构。
To:taosihai1only
在问题中我已经说明我的ID字段根本就不是字符串类型的。
To:大家
我的SELECT子句有问题,没有包括ID字段,即选择出来的表没有主键,但是原来的表中有唯一主键。将SELECE子句改为SELECT T_Schedule.*即可。