很奇怪的问题,通过sql读取数据,写入recordset,但是只要sql查询中有order by (排序),就无法对读取的数据进行更改,但我程序中需要先排序然后再对数据进行操作,有选择的更新,那该怎么办啊?
Set rs = New adodb.Recordset
sql = "SELECT dbo_09311_S.chi_TH, dbo_09311_S.gxhs, dbo_滴_s.GXhst, dbo_09311_S.rdate,dbo_09311_S.bj FROM dbo_09311_S, dbo_滴_s where  dbo_09311_S.gxhs=dbo_滴_s.GXhs order by dbo_09311_S.chi_TH,dbo_滴_s.GXhst"
(sql后面如果如果没有order by ,程序能正常运行,有的话就会报错:错误为 “当前记录集不支持更新,这可能是提供程序的限制,也可能是选中锁定类型的限制”)
rs.Open sql, conn, adOpenKeyset, adLockOptimistic
rs.MoveFirst
Do While Not rs.EOF
rs.Fields("bj").Value = 5
rs.MoveNext
Loop

解决方案 »

  1.   

    sql = "update dbo_09311_S set dbo_09311_s.bj=5 FROM dbo_09311_S, dbo_滴_s where  dbo_09311_S.gxhs=dbo_滴_s.GXhs " 
    conn.execute sql
      

  2.   

    我的问题是能不能有order by 的情况下,用rs来进行数据修改!上面的rs只是个例子,我实际操作要不这个复杂很多。请了解的人多帮帮忙吧!
      

  3.   

    加一句试试
    rs.CursorLocation = adUseClient
      

  4.   

    recordset.locktype=adLockOptimistic试试改变锁定模式呢
      

  5.   

    你说的 情况 建议你用  update的sql语句来进行实现
      

  6.   

    我怀疑是你的连接有问题如adModeReadWrite连接模式设置,然后看看数据库有没有另一个进程锁表现象。
      

  7.   

    好象你的数据库没有唯一ID的字段,order by 后,recoderset无法对应写回数据库.你增加一个唯一ID字段(也就是说这个字段下不能有重复内容),然后试试~~~~~~~~比如你个以建个MM字段,类型长整,自动增长,步长为1,再用order by ,再修改记录,再更新.......