用vsFlexGrid控件对Access数据库的编辑、保存?   
    
          本人过去对数据库编辑、保存,常用控件MSFlexGrid、vsFlexGrid   7.0绑定处理来完成,但后来发现许多不便、许多功能不能实现。现干脆不用绑定,改为直接从数据库表中全部读出并写入vsFlexGrid控件,在编辑好了以后,再全部写回数据库表。现在的问题是:vsFlexGrid控件表经过编辑处理后,与原表记录的对应关系发生了变化,怎么回写较好?难道必须先删除原表的所有记录,然后再全部添加进来吗?   
          我希望的是,对原记录进行覆盖(已有的记录)、新添加的作追加处理。
  有网友提出"在相关事件中(AfterRowColChange ,AfterEdit),分别用变量记录添加和修改数据的ROW值。在保存数据的时候,根据变量判断应该添加还是修改数据。"
我觉得其切实可行,怎么实现却没有底 ,还望各个高手赐教!附上代码(保存)
    Private Sub Cmd_save_Click()
If VS1.TextMatrix(VS1.Row, 1) <> "" And VS1.TextMatrix(VS1.Row, 2) <> "" Then
Dim str As String
str = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\rqwl.mdb;Persist Security Info=False"
Dim cnn   As New ADODB.Connection
 cnn.Open str
 Dim rs     As New ADODB.Recordset
  Set rs = New ADODB.Recordset
  mysql = "select * from wlryszb "
 rs.Open mysql, cnn, adOpenKeyset, adLockOptimistic
 Set VS1.DataSource = rs
  For i = 1 To VS1.Rows - 1
 VS1.TextMatrix(i, 0) = i
Next
VS1.DataRefresh
For rowc = 1 To VS1.Rows - 1
          With rs
             If rs.State = adStateOpen Then rs.Close
              rs.Open mysql, cnn, adOpenKeyset, adLockOptimistic
              .AddNew
              .Fields("xm") = VS1.TextMatrix(rowc, 1)
            .Fields("xb") = VS1.TextMatrix(rowc, 2)
             .Fields("spm") = VS1.TextMatrix(rowc, 3)
            .Fields("fl") = VS1.TextMatrix(rowcs, 4)
            .Fields("szdw") = VS1.TextMatrix(rowc, 5)
            .Fields("bm") = VS1.TextMatrix(rowc, 6)
           .Fields("dwdh") = VS1.TextMatrix(rowc, 7)
            .Fields("jldh") = VS1.TextMatrix(rowc, 8)
            .Fields("sjhm") = VS1.TextMatrix(rowc, 9)
            .Fields("zz") = VS1.TextMatrix(rowc, 10)
            .Update
             End With
       Next
Else: MsgBox "不能为空!"
End If
End Sub

解决方案 »

  1.   

    设为可编辑:
        VSFlexGrid.Editable = flexEDKbdMouse
    设为更新:
        VSFlexGrid.DataMode = flexDMBoundImmediate
        VSFlexGrid.DataRefresh这样修改后失去焦点会自动保存
      

  2.   

    不行啊 兄台 保存时问题依旧
    VSFlexGrid.DataMode = flexDMBoundImmediate
      

  3.   

    附上我的添加代码:
    Private Sub Command1_Click()
    '实现添加
    Set VS1.DataSource = rs
    VS1.AddItem Row
     VS1.Refresh
    For i = 1 To VS1.Rows - 1
    VS1.TextMatrix(i, 0) = i
    Next
    End Sub
    在form_load下加了VSFlexGrid.Editable = flexEDKbdMouse