请问为什么我在更新数据库时有时会出现“键列信息不足或不正确。更新影响到过多的行。”错误?
例如:
    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控件,都已经做好初始化工作。

解决方案 »

  1.   

    sql = "SELECT T_Schedule.Default " & _
              "FROM T_Schedule " & _
              "WHERE T_Schedule.ID=1"
    应为
    sql = "SELECT T_Schedule.Default " & _
              "FROM T_Schedule " & _
              "WHERE T_Schedule.ID=‘1’"
    ----注意1要加引号
      

  2.   

    To:wea1978什么是“表中已经存在相同的数据”?
    是指表中某2行数据完全一样吗?应该不会吧,至少ID字段不一样。
    Default字段也不能重复吗?不会吧。
      

  3.   

    update T_Schedule set default=1 where id=1
      

  4.   

    表中存有相同的数据,(正常情况当你又主键的时候不会有重复值,但是如下操作会引起)
    如:开始你的表T(a,b)没有主键,往里插入了两条一样的数据
    2,3
    2,3
    可是后来你改变了表结构,将a设为主键,这样表中就会存留有旧的同样的两条数据,
    当你操作时就会出现以上问题
      

  5.   

    非常感谢大家的解答,我从别的地方得到了答案,大家说的都有道理,可是都不是解决我的问题的关键。
    To:subzero
    你的SQL语句非常正确,如果换到我的sql变量中肯定不行。
    To:yoki
    你的说法非常正确,可是我没有插入2条同样的数据,也没有改表的结构。
    To:taosihai1only
    在问题中我已经说明我的ID字段根本就不是字符串类型的。
    To:大家
    我的SELECT子句有问题,没有包括ID字段,即选择出来的表没有主键,但是原来的表中有唯一主键。将SELECE子句改为SELECT T_Schedule.*即可。