我执行删除是的常用代码,给你参考With adoRs
    If .RecordCount = 0 Then MsgBox "无记录!", vbInformation, "操作提示": Exit Sub
    If .BOF Or .EOF Or (.Status And adRecDeleted) <> 0 Or (.Status And adRecDBDeleted) <> 0 Then
        MsgBox "请先选择要删除的记录!", vbInformation, "操作提示"
        Exit Sub
    End If
    .Delete
    If (.Status And adRecDeleted) <> 0 Or (.Status And adRecDBDeleted) <> 0 Then
        DataGrid1.ReBind
        .MoveNext
    End If
    If .EOF And .RecordCount > 0 Then .MoveLast
End With

解决方案 »

  1.   

    .Status属性可以判断是否引用了有效的行
      

  2.   

    建议用标准 SQL 语句操作试试
    dim cmd as new adodb.commandcmd.activeconnection=cnn
    cmd.commandtype=adcmdtext
    cmd.commandtext="delete from tab1 where fld1=10"
    cmd.execute
      

  3.   

    我处理数据都是用标准SQL语句执行完成的
      

  4.   

    建议用标准 SQL 语句操作试试
    dim cmd as new adodb.commandcmd.activeconnection=cnn
    cmd.commandtype=adcmdtext
    cmd.commandtext="delete from tab1 where fld1=10"
    cmd.execute
    删除是的常用代码,给你参考With adoRs
        If .RecordCount = 0 Then MsgBox "无记录!", vbInformation, "操作提示": Exit Sub
        If .BOF Or .EOF Or (.Status And adRecDeleted) <> 0 Or (.Status And adRecDBDeleted) <> 0 Then
            MsgBox "请先选择要删除的记录!", vbInformation, "操作提示"
            Exit Sub
        End If
        .Delete
        If (.Status And adRecDeleted) <> 0 Or (.Status And adRecDBDeleted) <> 0 Then
            DataGrid1.ReBind
            .MoveNext
        End If
        If .EOF And .RecordCount > 0 Then .MoveLast
    End With
      

  5.   

    On Error GoTo DeleteErr
        
      If adoPrimaryRS.EOF Then Exit Sub
      With adoPrimaryRS
        .Delete
        If Not .EOF Then
          .MoveNext
        End If
      End With
      Exit Sub
    DeleteErr:
      MsgBox Err.Description
      

  6.   

    不会呀,我刚刚尝试了,没有任何问题呀!没有任何错误提示呀?是不是你的ADO和DataGrid设置或则是数据库的问题?
      

  7.   

    也许是数据库的问题。你的数据库是ACCESS还是DBF。
      

  8.   

    toolbar按纽获得焦点的时候似乎form其他区域的lostfocus不能正常触发,
    不知你的问题是否出自这里。这种情况建议如楼上所说:
    回复人: zhangy_0221(狼) (  ) 信誉:100  2002-04-16 00:15:00  得分:0  
     
      在窗口中放置一个图片框,再在图片框中放一堆图片按钮,用这种方法做toolbar是多么简单啊!这和普通标准按钮是一样的,不就什么问题也没了,呵呵! 
     
      

  9.   

    不要用datagrid,这个控件很不好用,而且差劲,建议你用listview吧。
      

  10.   

    答fuxc(Michael) :
    我用了你的方法,还是不行。一样的报错。
      

  11.   

    答gxingmin(小高):
    绝对没有删除,我先移动记录后再点按钮就会出现错误提示。但同样的代码放在标准命令按钮的事件中就不会出错。
      

  12.   

    答jdsbjcailei(基度山伯爵) :
    我把上述删除记录的代码放在标准按钮的事件里也不会出错。放在ToolsBar的事件才出错。或将上述代码定义成子过程,在Toolbar事件中引用也出错。
      

  13.   

    将Private Sub Toolbar_ButtonClick(ByVal Button As MSComctlLib.Button)中的
    Case Is = "Delete"
          cmdDelete_Click
    改为
    Case Is = "Delete"
          sendkeys "{Tab}",true
          cmdDelete_Click
    试试
      

  14.   

    你试试看,在Toolbar_ButtonClick开头把控件焦点移出datagrid
    比如你的Form上有text1,那你就
    Private Sub Toolbar_ButtonClick(ByVal Button As MSComctlLib.Button)
      text1.setfocus
      With adoPrimaryRS
    ....看看是否还出错
      

  15.   

    答fuxc(Michael):
    我现在查到出错时adoPrimaryRs.status=262400
    查MSDN,查是哪个原因呢?大佬,帮我一把呀!
    adRecCantRelease  0x400  指示由于现有记录被锁定,因此未保存新记录。
    adRecDBDeleted  0x40000  指示已经从数据源中删除了该记录。  
    adRecSchemaViolation  0x20000  指示由于记录违反基本数据库的结构,因此未保存该记录。 
    adRecMaxChangesExceeded  0x2000  指示由于存在过多挂起的更改,因此未保存该记录。
      

  16.   

    toolbar控件不具有焦点,因此它不能引发类似Validate,LostFocus等事件,也无法使DateGrid退出编辑状态,但按照你说的情况,只是移动,没有编辑,应该不是这个问题,你可以用用datagrid的CurrentCellModified 属性来判断,如果是Ture,那表明datagrid是处于编辑状态。
    而且,据我所知,这个问题也不会引起你所说地问题,一般会导致这样的情况:
    用户编辑了datagrid的单元格,但没有按回车,就直接去点toolbar保存数据,这样实际保存的是没有修改过的数据。如果确认是上面的情况
    你可以这样处理:
    象我上面说的,把焦点移开或者
    用sendkeys发送一个回车给Tdbgrid或者
    在datagrid的BeforeColEdit事件中,设置Toolbar1.Enabled=False,防止用户在编辑期间按按钮,然后在AfterColEdit事件中设置Toolbar1.Enabled=Ture或者
    设置datagrid1.CurrentCellModified=False,这样相当于按Esc键取消编辑
      

  17.   

    答fuxc(Michael):
    您是我的偶像!我要拜你为师!
    我用移开焦点的方法,终于搞定了。看来是Toolbar不能获得焦点的原因,因为我用标准按钮来执行同样的代码不会出错。
    你等着,我另外开贴,给你加分!你去领分吧!其他参与此问题的人,都给10分以上!我太高兴了!谁要分呀,大把送上!
    我爱CSDN! I Love U!
      

  18.   

    Private Sub cmdDelete_Click()
      On Error GoTo DeleteErr
      With adoPrimaryRS
        if not .eof and .bof then
        .Delete
        .MoveNext
        .refresh
        If .EOF Then .MoveLast
      End With
      Exit Sub
    DeleteErr:
      MsgBox Err.Description
    End Sub
      

  19.   

    if not .eof and not .bof then