Private Sub Command1_Click()
  Dim MyCon As New ADODB.Connection
  Dim MyRs As New ADODB.Recordset
  Dim ConStr As String
  ConStr = "Provider=SQLOLEDB;Persist Security Info=False;User ID=sa;PassWord=zhangzs;DataBase=mytest"
  On Error GoTo Error:
  MyCon.ConnectionString = ConStr
  MyCon.CommandTimeout = 0
  MyCon.Open
  MyRs.CursorLocation = adUseClient
  MyRs.ActiveConnection = MyCon
  Dim MySqlStr As String
  MySqlStr = "select * from mat"
  MyRs.Open MySqlStr
  
  MyRs.MoveFirst
  Do While Not MyRs.EOF
   MsgBox MyRs("Material").Value  
   ---上面MSGBOX取出来的并非数据表中的值?而是上次的MyRs("Material") 
   MyRs("Material") = "A"
   MyRs.MoveNext
  Loop
  
  Set DataGrid1.DataSource = MyRs
  DataGrid1.Refresh
  DataGrid1.Columns(2).Width = 700
  Exit Sub
Error:
  MsgBox Err.Description, vbOKOnly, "error"
End Sub

解决方案 »

  1.   

    循环MyRs("Material") = "A"后,你没有保存进数据库,第二次取出当然还是原来的值啊
      

  2.   

    好象是更改了数据库内容了,我的目的只是想更改我的MyRs,不知道是否可以。
    好象加上
      MyRs.LockType = adLockOptimistic
      MyRs.CursorType = adOpenDynamic
    后在执行
    MyRs.MoveFirst
      Do While Not MyRs.EOF
       MyRs("Material") = "A"   
       MyRs.MoveNext
      Loop
    就会将表中的Material字段全部更改为A
      

  3.   

    放屁!MyRs只是個記錄集,不update不會改動數據庫的!
      

  4.   

    如果不加:
    MyRs.LockType = adLockOptimistic
    MyRs.CursorType = adOpenDynamic
    报错:当前记录不支持更新,这可能是提供程序的限制,也可能是选定锁定类型的限制。
    如果加上:
    MyRs.LockType = adLockOptimistic
    MyRs.CursorType = adOpenDynamic
    错误是没有了,但是数据表mat中的material字段的值,更改为了"A",
    也就是 MyRs("Material") = "A" 所造成的。请各位帮忙,由于特殊原因我只能更改数据集MyRs,而表的内容不可以修改。
      

  5.   

    MyRs.LockType = adLockBatchOptimistic  '改这句就正常了。
    MyRs.CursorType = adOpenDynamic
    下一步就是记录集汇总的问题:
    ID Material  Weight
    1   A        0.5
    1   A        1.6---》ID Material  Weight
    1   A        2.1该如何做呢?