我想实现这样一种功能:
    将数据库中符合查询条件的所有记录显示在MSFlexGrid空间中(MSFlexGrid每行对应数据库中的一条记录),然后选择其中任意一条,点击窗口中的修改按钮,这时弹出一个新窗口,被选中那条记录的所有字段值都显示在这个窗口中,这时能够对其进行修改,修改完成后点击保存按钮,这时将刚才输入的数据替换之前保存在数据库中的那条记录。本人是初学者,还请各位慷慨作答。

解决方案 »

  1.   

    呵呵 正好我刚做完这个你看看
    Private Sub cmdModify_Click()
    '取得选中的哪行的Id
            
        If myFlexGrid.RowSel = 1 Then
            MsgBox "请选中要修改的行", vbOKOnly + vbInformation, "提示"
        Else
        
            
            txtStuSQL = "select * from student_Info where student_ID='" & myFlexGrid.TextMatrix(myFlexGrid.RowSel, 0) & "'"
            frmModifyStudentInfo.Show
        End If
        
    'conn.Execute "   delete   from   tablename   where   编号= ' " & flexgrid.TextMatrix(flexgrid.RowSel, 0) & " ' "
    '    If myFlexGrid.RowSel = 1 Then
    '        MsgBox "请选择要修改的数据", vbOKOnly + vbExclamation, "警告"
    '        Exit Sub
    '    Else
            
            
    '    End If
        
    End Sub那个RowSel表示你的选择行
    修改时弹出另一个窗体 ,你只要记录查询的语句就好了,传给另一个窗体
      

  2.   

    1、模组中定义:
    Option ExplicitPublic LoadSql As String
    Public ConnSql As String
    Public LoadRs As New ADODB.Recordset
    Public SqlConn As New ADODB.Connection2、主窗体:
    Option Explicit
    'Dim LoadSql As String
    'Dim ConnSql As String
    'Dim LoadRs As New ADODB.Recordset
    'Dim SqlConn As New ADODB.ConnectionPrivate Sub cmdLoadData_Click()
    On Error GoTo eNext:
        If SqlConn.State = 1 Then SqlConn.Close
        ConnSql = "Provider=sqloledb;Data Source=IQMS-PETERPAN;Initial Catalog=AideSolar_BarCodeMIS;User Id=SA;Password=lovelyh;"
        SqlConn.ConnectionString = ConnSql
        SqlConn.Open
        
        LoadSql = "SELECT *  FROM [AideSolar_BarCodeMIS].[dbo].[tabPowerRange]"
        If LoadRs.State = 1 Then LoadRs.Close
        LoadRs.Open LoadSql, SqlConn, adOpenKeyset, adLockOptimistic
        
        If Not LoadRs.EOF Then
            Set MSHFlexGrid1.DataSource = LoadRs
        Else
            'Your function code
        End If
        Exit Sub
    eNext:
        MsgBox Err.Description, vbCritical, Err.Number
    End SubPrivate Sub MSHFlexGrid1_Click()
        Call LoadData(MSHFlexGrid1.TextMatrix(MSHFlexGrid1.Row, 1))
    End SubPublic Function LoadData(ByVal strID As String)
        Dim LoadSql As String
        Dim LoadRs As New ADODB.Recordset
        
        If LoadRs.State = 1 Then LoadRs.Close
        LoadSql = "SELECT * FROM tabPowerRange where id=" & Trim(strID)
        LoadRs.Open LoadSql, SqlConn, adOpenKeyset, adLockOptimistic
        
        If Not LoadRs.EOF Then
            LoadRs.MoveFirst
            With frmEditData
                .txtID.Text = LoadRs!id
                .txtRatedPower.Text = LoadRs!ratedpower
                .txtRatedV.Text = LoadRs!ratedv
                .Show 1
            End With
            
        End If
        
    End FunctionPublic Function ReLoadData()
        Call cmdLoadData_Click
    End Function3、编辑窗体
    Option ExplicitPrivate Sub cmdCancel_Click()
        Unload Me
    End SubPrivate Sub cmdSave_Click()
        Dim UpdateSql As String
        Dim UpdateCommand As New ADODB.Command
    On Error GoTo eNext:
        UpdateSql = "update tabPowerRange set " + _
                    "RatedPower=" + Trim(txtRatedPower.Text) + "," + _
                    "Ratedv=" + Trim(txtRatedV.Text) + " where id=" & Trim(txtID.Text)
        UpdateCommand.ActiveConnection = SqlConn
        UpdateCommand.CommandType = adCmdText
        UpdateCommand.CommandText = UpdateSql
        UpdateCommand.Execute
        
        Call frmMain.ReLoadData
        MsgBox "Update Success...", vbInformation, App.Title
        
        Unload Me
    eNext:
        MsgBox Err.Description, vbCritical, Err.Number
    End Sub
      

  3.   

    补充图片1:
    http://hi.erp100.com/data/attachment/album/201008/24/2114239cla91k1qqlzvccc.jpg
      

  4.   

    If LoadRs.State = 1 Then LoadRs.Close请问这句话有什么意义?原本就是关闭的再关一次?
      

  5.   


    判定 LoadRs 是否已经打开,若已经打开,您再次打开,就会出错,若打开,先关闭,然后再重新打开。
      

  6.   

    LoadRs.State = 1    是表示closed还是open?