各位:
        我在数据库中用delete命令删除一条记录后,会出现一个对话框,内容为:  "行句柄引用了一个已被删除的行或标识为删除的行",我的部分代码如下:        if msgbox("sure delete?",vbyesno+vbinformation)=vbyes then
               dataReceipt.Delete
               DataReceipt.MovePrevious
               If DataReceipt.BOF = True Then
                  DataReceipt.MoveNext
               End If
         Else
            Exit Sub
         End If
         DataGrid1.Refresh    请大家帮帮小弟,急,在线等待

解决方案 »

  1.   

    应该是在你执行dataReceipt.Delete时,不是在eof上就在bof上
      

  2.   

    但是把这段代码写在一command控件中,就没有问题了,真奇怪!
      

  3.   

    还是平时的删除代码是这样写的
           if msgbox("sure delete?",vbyesno+vbinformation)=vbyes then
                   dataReceipt.Delete
                   DataReceipt.Movenext
                   If DataReceipt.EOF = True Then
                      DataReceipt.MoveLast
                   End If
             Else
                Exit Sub
             End If
             DataGrid1.Refresh
      

  4.   

    if msgbox("sure delete?",vbyesno+vbinformation)=vbyes then
                   dataReceipt.Delete
                   DataReceipt.MovePrevious
                   If DataReceipt.BOF = True Then
                      DataReceipt.Requery
                   End If
             Else
                Exit Sub
             End If
             DataGrid1.Refresh
      

  5.   

    我也遇到过这样的问题,原因没弄清楚,后来用了一个很笨的方法:在删除记录之前,先把DataGrid绑定到另外一个记录(例如:DataReceipt2),删完以后,再绑定DataReceipt,然后DataReceipt.Update。实在不行,你也不妨试试看。
      

  6.   

    .delete 
    后要.movenext就是要把记录集移动一下,
    不然记录集还会停留在已被删除的记录上,就会出现你所遇到的错误。
      

  7.   

    if msgbox("sure delete?",vbyesno+vbinformation)=vbyes then
                   dataReceipt.Delete
                   DataReceipt.MovePrevious
                   If DataReceipt.BOF = True Then
                      DataReceipt.MoveNext
                   End If
             Else
                Exit Sub
             End If
             DataGrid1.Refresh这样的代码你不写在一个控件中,你写在什么地方?????我真怀疑你这个程序是想怎么做~~~~如果是别的话,也许要用SQL语句进行操作,你最好说清楚一些在解决吧~
      

  8.   

    wdwd05:
        我这段代码如放在TOOLBAR中,就会出现错误,但如果是把这段代码放在一个COMMAND控件中,就不会出错了,请帮忙!谢谢!
      

  9.   

    小弟也正为此问题而头痛,如果哪位大哥能解决,小弟愿100分酬谢.
    小弟的代码如下:(在工具条上)
    select case
      case "del"
      If Not (set_reg_c1.BOF Or set_reg_c1.EOF) Then
         set_reg_c1.Delete
         set_reg_c1.MoveNext
         set_reg_c1.UpdateBatch
       End If
      ............
    end select
      

  10.   

    "If DataReceipt.BOF = True Then
                      DataReceipt.MoveNext"
    应该改为:
    “If DataReceipt.BOF = True Then
                      DataReceipt.Movefirst”
    不是下一条记录,而是第一条记录
    还应该加上这条语句:
    If DataReceipt.eof = True Then
                      DataReceipt.Movelast
      

  11.   

    if msgbox("sure delete?",vbyesno+vbinformation)=vbyes then
                   dataReceipt.Delete
                   DataReceipt.MoveNext
                   If DataReceipt.EOF Then DataReceipt.MovePrevious
                   If DataReceipt.BOF Then DataReceipt.Refresh
             Else
                Exit Sub
             End If
             DataGrid1.Refresh
      

  12.   

    “这段代码如放在TOOLBAR中,就会出现错误,但如果是把这段代码放在一个COMMAND控件中,就不会出错了”:楼主你的TOOLBAR在什么地方?是不是和你的Command在同一个窗体,如果是在其它窗体中,请在一个模块中将dataReceipt定义为全局变量
      

  13.   


    dataReceipt.Delete
    DataGrid1.Refresh
    两句前各加一句
    on error resume next
    或者用调试菜单,逐句运行,在出错的前面加上面的语句试试,看行不行。我平常就是这样做的,要不这样,EOF、BOF、指针什么的很难协调控制,只能这样将就着做了。