我使用ADO连接了数据表 a,连接是conn对象。并且rs对象是a中的所有记录的记录集。现在,我想物理删除和更新一些记录。
    比如,删除使用这样的语句可以吗?
          rs.filter="name='李明'"
          rs.delete  adAffectGroup
          rs.UpdateBatch adAffectGroup
       这些满足条件的记录物理上能够被删除吗?
如果是更新,该如何写语句???

解决方案 »

  1.   

    a.Execute "DELETE* FROM 表名 WHERE 条件(如:ID=*)"我不会用  记录集 的 不知这种方法 可否合你呢a.Execute "DELETE * FROM 表名 WHERE "name='李明'"  '删除
    ===================
    Cn.Execute "UPDATE 表名SET 字段名 = 字段值 WHERE 条件(如:ID=*),"'修改字段值
    ***********a.Execute "UPDATE 表名SET name= '李日月' WHERE name='李明'" '修改字段值
      

  2.   

    直接使用sql语句进行删除和修改而且在有几个删除或者更新需要同时进行的时候最好使用事务BeginTrans、CommitTrans 和 RollbackTrans 方法范例
    该范例更改数据库的 Titles 表中所有心理学书籍的书籍类型。在 BeginTrans 方法启动事务将所有对 Titles 表的更改隔离后,CommitTrans 方法将保存更改。可使用 Rollback 方法撤销用 Update 方法保存的更改。Public Sub BeginTransX()   Dim cnn1 As ADODB.Connection
       Dim rstTitles As ADODB.Recordset
       Dim strCnn As String
       Dim strTitle As String
       Dim strMessage As String   ' 打开连接。
          strCnn = "Provider=sqloledb;" & _
          "Data Source=srv;Initial Catalog=pubs;User Id=sa;Password=; "
       Set cnn1 = New ADODB.Connection
       cnn1.Open strCnn   ' 打开 Titles 表。
       Set rstTitles = New ADODB.Recordset
       rstTitles.CursorType = adOpenDynamic
       rstTitles.LockType = adLockPessimistic
       rstTitles.Open "titles", cnn1, , , adCmdTable
       
       rstTitles.MoveFirst
       cnn1.BeginTrans   ' 在记录集中循环并询问是否想要更改指定标题的类型。
       Do Until rstTitles.EOF
          If Trim(rstTitles!Type) = "psychology" Then
             strTitle = rstTitles!Title
             strMessage = "Title: " & strTitle & vbCr & _
             "Change type to self help?"         ' 更改指定雇员的标题。
             If MsgBox(strMessage, vbYesNo) = vbYes Then
                rstTitles!Type = "self_help"
                rstTitles.Update
             End If
          End If         rstTitles.MoveNext
       Loop   ' 询问用户是否想提交以上所做的全部更改。
       If MsgBox("Save all changes?", vbYesNo) = vbYes Then
          cnn1.CommitTrans
       Else
          cnn1.RollbackTrans
       End If   ' 打印记录集中的当前数据。
       rstTitles.Requery
       rstTitles.MoveFirst
       Do While Not rstTitles.EOF
          Debug.Print rstTitles!Title & " - " & rstTitles!Type
          rstTitles.MoveNext
       Loop   ' 恢复原始数据,因为这只是演示。
       rstTitles.MoveFirst
       Do Until rstTitles.EOF
          If Trim(rstTitles!Type) = "self_help" Then
             rstTitles!Type = "psychology"
             rstTitles.Update
          End If
          rstTitles.MoveNext
       Loop   rstTitles.Close
       cnn1.CloseEnd Sub
      

  3.   

    conn.begintrans
        set rst.activeconnection=conn
        rst.UpdateBatch
        set rst.activeconnection=nothing
    conn.committrans
      

  4.   

    conn.execute "delete from a where name='李明'"
      

  5.   

    同意 yoki(小马哥--鬓微霜,又何妨)
      

  6.   

    不推荐使用ADO提供的方法,效率不高,因为其内部也是将你设置的条件转换成SQL语句再执行,所以肯定不如直接执行SQL语句快!!
    不过即使用方法,你写的也不对!!cn.execute "delete from tablename where name='李明'"
      

  7.   

    李洪根先生原话”如果你只是为了添加,可以用:cn.execute "insert into booktable1(number,name,addres) value ('" & Text1.Text & "','" & Text2.Text & "','" & Text3.Text & "')"  如果你还要从表中读取记录集,一般打开Rs,再Rs.addnew      当然,最终都是转换成sql insert语句。     另外,Rs.addnew 比较严谨,但是开销比insert into 大,因为要返回Rs到客户端。      Rs.addnew 不会受恶意攻击,自己拼凑sql语句易受恶意攻击“
    本人对李先生这句话有点不明白,拼凑SQL语句易受恶意攻击?受什么攻击?请大家踊跃指教
      

  8.   

    同意cuizm(射天狼)的,建议直接写SQL