我想在dagagrid中直接输入(或修改)数据以求快捷,但比如在第6行输入(或修改)某一个或几个字段的数据时,鼠标先指定这个字段,输入数据后要立即保存这第6行的数据就必须将鼠标指定到dagagrid中的其它任意行,而不能是第6行,缺了这一步数据就不能保存了!我想在一个“命令按钮”编写代码来实现保存数据的功能,那如何获取此第6行字段的行和列号,保存数据的方法我偿试了好久未能成功,请各位楼主有空帮我想想吧,麻烦你们了。最好能粘上详细的代码,因为我是菜鸟。谢谢了!

解决方案 »

  1.   

    将鼠标移到其他地方是因为你修改的数据在内存中间,需要一个update操作使数据从内存读向数据库。按你的想法,个人觉得没有必要增加这个功能,你可以在datagrid失去焦点的事件中间写一个rs.update,就会将最后一笔数据更新进数据库。当然你要一个保存按钮也是可以的,但是这个保存按钮,不是修改以后就保存,而是全部修改完成以后确定保存,我觉得没必要修改你的问题:)
      

  2.   

    daisy8675(莫依),谢谢你,但“datagrid失去焦点的事件”具体是哪一个英文,是dragover吗?
      

  3.   

    我这样写了,仍然不对,怎么会事?
    Private Sub dagd1_LostFocus()
      Dim mrc As New ADODB.Recordset
      txtsql = "select * from zb1 order by 日期时间 desc"
      Set mrc = exesql(txtsql)‘取得记录集
      mrc.Update
      Set mrc = Nothing
    End Sub 
    没有出错,就是数据未能更新,当我用鼠标点窗口中的其它功能按钮时,datagrid中原来的旧的数据又代替了新数据!
      

  4.   

    Private Sub dagd1_LostFocus()
      Dim mrc As New ADODB.Recordset
      txtsql = "select * from zb1 order by 日期时间 desc"
      Set mrc = exesql(txtsql)‘取得记录集
      mrc.Update
      Set mrc = Nothing
    End Sub 
    我发现上面的代码并没有把新数据更新到数据库中,如何写这段更新代码呢?
      

  5.   

    从来就不用datagrid垃圾。因为它实在是不方便。
      

  6.   

    从来就不用datagrid垃圾。因为它实在是不方便。
    =========================
    这是我见到的指责datagrid的理由中最好笑的一个。。
      

  7.   

    Private Sub dagd1_LostFocus()
      Dim mrc As New ADODB.Recordset
      Dim i As Integer
      txtsql = "select * from zb1 order by 日期时间 desc"
      Set mrc = exesql(txtsql)'获取记录集
      If mrc.RecordCount > 0 Then
         mrc.MoveFirst
         Do While Not mrc.EOF()
            If dagd1.Columns(0).Value = mrc.Fields("日期时间") And dagd1.Columns(1).Value = mrc.Fields("值别") Then
                For i = 2 To 8
                    mrc.Fields(i) = dagd1.Columns(i).Value
               Next i
             Else
               'Print dagd1.Columns(0).Value, dagd1.Columns(1).Value, mrc.Fields(0), mrc.Fields(1)
     “上面的打印语句显示dagd1.Columns(0).Value和mrc.Fields(0)、dagd1.Columns(1).Value和mrc.Fields(1)有相同值,即表中有这条记录。”
               mrc.MoveNext
            End If
         Loop
      Else
        MsgBox "表中无历史记录!你可以设置条件后、添加记录。"
      End If
      mrc.MovePrevious
      mrc.Update
      Set mrc = Nothing
    End Sub
    上面就是我的程序,执行时没有语法错误,但就是不能找到对应的记录,不知为何!      mrc.Fields("日期时间")字段为日期型;
    mrc.Fields("值别")字段为字符型。
    如果我把if语句改为:If str$(dagd1.Columns(0).Value) = str$(mrc.Fields("日期时间")) And str$(dagd1.Columns(1).Value) = str$(mrc.Fields("值别")) Then
    或者
    If dagd1.Columns(0).Value = str$(mrc.Fields("日期时间")) And dagd1.Columns(1).Value = mrc.Fields("值别") Then
    或者
    If cdate(dagd1.Columns(0).Value) = cdate(mrc.Fields("日期时间")) And dagd1.Columns(1).Value = mrc.Fields("值别") Then
    就会显示类型不匹配,估计问题出在日期时间比较上面,你们帮我看看吧!谢谢!
      

  8.   

    为什么要单保存啊,我觉得一起保存也不错啊.
    本人发表一下自己的看法,仅是自己通常这样做,不代表权威.
    一般在表格中的使用程序,要看表格中的数据量的多少来定,
    如果你的表格中数据量很大,就不要在表格中直接修改保存,你可以单做一个显示某条记录明细的窗体或者放在一个frame或者picture里,每个textbox对应一个单元格,这样改完之后,点个按钮让这些textbox里的数据update,然后让textbox消失掉就行了呗
    如果数据量不是很大的话,你直接在grid里修改,然后在grid失去焦点的时候,或者你单做个按钮,
    将原来的记录在数据库里全删掉,然后再全加上.:)很方便 速度也不会很慢,因为其实存一条和存十条是差不多的时间的.以上是我软件设计中的经验,望对你有用处,并且希望高手指点我的不是!
      

  9.   

    新问题,请各位楼主帮我看看吧!谢谢了!
    Private Sub dagd1_LostFocus()
      Dim mrc As New ADODB.Recordset
      Dim i As Integer
      txtsql = "select * from zb1 order by 日期时间 desc"
      Set mrc = exesql(txtsql)'获取记录集
      If mrc.RecordCount > 0 Then
         mrc.MoveFirst
         Do While Not mrc.EOF()
            If dagd1.Columns(0).Value = mrc.Fields("日期时间") And dagd1.Columns(1).Value = mrc.Fields("值别") Then
                For i = 2 To 8
                    mrc.Fields(i) = dagd1.Columns(i).Value
               Next i
             Else
               'Print dagd1.Columns(0).Value, dagd1.Columns(1).Value, mrc.Fields(0), mrc.Fields(1)
     “上面的打印语句显示dagd1.Columns(0).Value和mrc.Fields(0)、dagd1.Columns(1).Value和mrc.Fields(1)有相同值,即表中有这条记录。”
               mrc.MoveNext
            End If
         Loop
      Else
        MsgBox "表中无历史记录!你可以设置条件后、添加记录。"
      End If
      mrc.MovePrevious
      mrc.Update
      Set mrc = Nothing
    End Sub
    上面就是我的程序,执行时没有语法错误,但就是不能找到对应的记录,不知为何!      mrc.Fields("日期时间")字段为日期型;
    mrc.Fields("值别")字段为字符型。
    如果我把if语句改为:If str$(dagd1.Columns(0).Value) = str$(mrc.Fields("日期时间")) And str$(dagd1.Columns(1).Value) = str$(mrc.Fields("值别")) Then
    或者
    If str$(dagd1.Columns(0).Value) = str$(mrc.Fields("日期时间")) And dagd1.Columns(1).Value = mrc.Fields("值别") Then
    或者
    If cdate(dagd1.Columns(0).Value) = cdate(mrc.Fields("日期时间")) And dagd1.Columns(1).Value = mrc.Fields("值别") Then
    就会显示类型不匹配,估计问题出在日期时间比较上面,你们帮我看看吧!谢谢!
      

  10.   

    上面的问题已经解决,那再请问datagrid如何实现翻页功能呢?谢谢指点!