For i = 1 To MSHFlexGrid1.Rows - 1
conn.Execute "UPDATE class set  [班号]= '" & MSHFlexGrid1.TextMatrix(i, 1) & "' where  [班号]<> '" & MSHFlexGrid1.TextMatrix(i, 1) & "'"
Next i
这是保存代码,为什么我保存后它把每个字段都变成一样的,我应该如何改?

解决方案 »

  1.   

    条件问题吧,在循环中设置断点,然后在立即窗口中:?"UPDATE class set  [班号]= '" & MSHFlexGrid1.TextMatrix(i, 1) & "' where  [班号]<> '" & MSHFlexGrid1.TextMatrix(i, 1) & "'"看看每次循环的 sql 语句
      

  2.   

    我说的是每个字段那一列一样,那一列都与同列最下面一行一样.=================所以才要你调试!如果 [班号]<> '" & MSHFlexGrid1.TextMatrix(i, 1) & "'" 内容不准确,数据库中所有的 [班号] 都不等于 MSHFlexGrid1.TextMatrix(i, 1),那么最后一次执行这句时,全部的记录就都变成 MSHFlexGrid1.TextMatrix(i, 1) 了。那么也就产生了你某个字段全部的记录都一样的结果!
      

  3.   

    这句SQL语句的本意为“将class表中所有[班号]不同于MSHFlexGrid1.TextMatrix(i, 1)中的,修改为MSHFlexGrid1.TextMatrix(i, 1)中的班号”,所以修改后的班号自然相同。
      

  4.   

    这个问题我也遇到过^_^
    原句在每次循环中都会对每条记录进行一次修改,就是说你上一次的对所有的记录都修改了
    ,下一次又对所有的记录又都改了一遍,所以会出都一样的情况了
    一般来讲,你的目的是一次循环修改一条记录,所以你该限定该修改记录,建议在sql条件中再写上 and [班号]= …… 
    只要让sql找出单一的一条对应记录就可以了
      

  5.   

    允许我 -_-b 一下举个最简单的例子
    假如有1,2,3,4,5
    where a <> 2 则有 1,3,4,5四种情况也就是说你每更新一次都会把不符合where的纪录全部更新掉......
    于是数据库的所有字段就都变成了最后一次更新的值
      

  6.   

    我的表是这样的
    班号 届别 班主任 备注
    41024 2004 刘斯0  10
    41025 2002 刘斯1  20
    41026 2003 刘斯2  30
    是用MSHFLEXGRID控件的,我的用意是把修改的表格保存到数据库中去~~
      

  7.   

    建议在原表中建立一个Auto_Id字段,即变成
    Auto_Id 班号 届别 班主任 备注
    1       41024 2004 刘斯0  10
    2       41025 2002 刘斯1  20
    3       41026 2003 刘斯2  30在修改后的表里也有对应的Auto_Id字段
    这时可把代码改成这样即可
    For i = 1 To MSHFlexGrid1.Rows - 1
    conn.Execute "UPDATE class set  [班号]= '" & MSHFlexGrid1.TextMatrix(i, 2) & "' where [Auto_Id]='"& MSHFlexGrid1.TextMatrix(i, 1) &"' and  [班号]<> '" & MSHFlexGrid1.TextMatrix(i, 2) & "'"
    Next i
      

  8.   


    又有个新问题,
    上面的AUTO_ID不能连续从1开始排列,好像ACCESS删除一行后,不是按连续的排列的?
      

  9.   

    ID删除后是会跳号的,这很正常,sql server 也如此。
    没什么的,只要保证其唯一性就可以了。
      

  10.   

    因为这个 SQL 语句是对所有记录有效的。假定记录集 rs 打开了你的表:
    rs.movefirst
    For i = 1 to MSHFlexGrid1.Rows - 1
    rs!班号 = MSHFlexGrid1.TextMatrix(i, 1)
    rs.update
    rs.movenext
    if rs.eof exit for
    Next i