Cn.Excute "Delect * From UserData Where OwnerId='" & westwin & "'"

解决方案 »

  1.   

    if not rsUserData.eof then 
    这句话有点问题
    如果要查是否有记录,应该用
    if not rsUserData.Eof and not rsUserData.Bof then 
      

  2.   

    westwin 是变量用
    rsUserData.Filter = "OwnerId='" & westwin & "'"
    westwin 是常数
    rsUserData.Filter = "OwnerId='westwin'"
      

  3.   

    dbcontrols说的westwin是变量用....,这个我知道,然后执行SQL语句删除记录我也知道,我就是不明白为什么adodb recordset的delete方法会出错!
    baoxiang说的检查是否有记录,不是产生错误的原因,就算我不检查,也会出这样的错误的.......呵呵,问题还是没有得到解决,gz
      

  4.   

    另外,如果我只简单的使用rsUserData.delete来删除当前记录是正确的,而使用rsUserData.delete adAffectGroup删除filter过滤的所有记录,就会出错
      

  5.   

    你用 UPDATEBATCH
    试一下
      

  6.   

    re debontrols:数据库中没有完全相同的两条记录,我设了关键字的
    re vb_support:早就试过了,没用的
    实在搞不明白,难道和我打开数据库的方式有关系,还是......?
    Dim cn as New ADODB.Connection
    Dim StrCon As String
        StrCon = " Provider = Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\db.mdb" & ";Persist Security Info=False"
        cn.Open StrCon
      

  7.   

    用 comand命令是一下
    dim cmd as new adodb.command
    cmd.activeconnection = cn
    cmd.commandtext = "delete * from table where ... "
    cmd.excutive
    .
    .
      

  8.   

    vb_support,用command和用execute执行sql语句都应该没问题,而我用的是ado
    的delete,为什么就不可以,困惑!!
      

  9.   

    其实是可以的
    但是我不知道具体的原因,我用 ado的delete 也可以的呀
    不知道你在什么地方出现错误的你可以把整个类的代码发给我
    我来看看
    [email protected]
      

  10.   

    rst.delete() 这样可以吗?
      

  11.   

    直接用CONN对象执行SQL语句算了
      

  12.   

    VB_support:我已经把全部代码发到你那了,多谢了.......
    希望下班之前能搞定
      

  13.   

    rsUserData.Update
    这一句去掉!!!如果你要用批次更新的话
    那么加上rsUserData.UpdateBatch
      

  14.   

    VB_Support:忘记说了,我用的是vb中文版本
      

  15.   

    Delete 方法范例
    该范例使用 Delete 方法从 Recordset 删除指定的记录。Public Sub DeleteX()   Dim rstRoySched As ADODB.Recordset
       Dim strCnn As String
       Dim strMsg As String
       Dim strTitleID As String
       Dim intLoRange As Integer
       Dim intHiRange As Integer
       Dim intRoyalty As Integer   ' 打开 RoySched 表。
          strCnn = "Provider=sqloledb;" & _
          "Data Source=srv;Initial Catalog=pubs;User Id=sa;Password=; "
       Set rstRoySched = New ADODB.Recordset
       rstRoySched.CursorLocation = adUseClient
       rstRoySched.CursorType = adOpenStatic
       rstRoySched.LockType = adLockBatchOptimistic
    ====================================================================
       rstRoySched.Open "SELECT * FROM roysched " & _
          "WHERE royalty = 20", strCnn, , , adCmdText   ' 提示删除记录。
       strMsg = "Before delete there are " & _
          rstRoySched.RecordCount & _
          " titles with 20 percent royalty:" & vbCr & vbCr
       Do While Not rstRoySched.EOF
          strMsg = strMsg & rstRoySched!title_id & vbCr
          rstRoySched.MoveNext
       Loop
       strMsg = strMsg & vbCr & vbCr & _
          "Enter the ID of a record to delete:"
       strTitleID = UCase(InputBox(strMsg))   ' 移到记录并保存数据以使其可被恢复。
       rstRoySched.Filter = "title_id = '" & strTitleID & "'"
       intLoRange = rstRoySched!lorange
       intHiRange = rstRoySched!hirange
       intRoyalty = rstRoySched!royalty   ' 删除记录。
       rstRoySched.Delete
       rstRoySched.UpdateBatch
    ================================================
       ' 显示结果。
       rstRoySched.Filter = adFilterNone
       rstRoySched.Requery
       strMsg = ""
       strMsg = "After delete there are " & _
          rstRoySched.RecordCount & _
          " titles with 20 percent royalty:" & vbCr & vbCr
       Do While Not rstRoySched.EOF
          strMsg = strMsg & rstRoySched!title_id & vbCr
          rstRoySched.MoveNext
       Loop
       MsgBox strMsg   ' 恢复数据,因为这只是演示。
       rstRoySched.AddNew
       rstRoySched!title_id = strTitleID
       rstRoySched!lorange = intLoRange
       rstRoySched!hirange = intHiRange
       rstRoySched!royalty = intRoyalty
       rstRoySched.UpdateBatch   rstRoySched.CloseEnd Sub
      

  16.   

    ferrytang(ferry) :rsUserData.Delete 只能删除单条记录
    而我的目的是想通过rsUserData.Delete adAffectGroup删除所有filter过滤的记录,如果用rsUserData.Delete(后面不加adAffectGroup),只会删除单条记录,不会出错........(呵呵,不想用循环删)
      

  17.   

    你看上面的例子不就清楚了吗!
    如果你用乐观锁定的话,delete就把记录删除,
    再用update一定会出错!
      

  18.   

    你用乐观锁定的时候delete就是删除纪录,不用 update操作的
    所以,你要偷懒的话只能用批次更新了
      

  19.   

    hehe,怎么能够不出错,和乐观锁定有关吗?
      

  20.   

    忘乐最重要的
    请看参数说明
    adAffectGroup 删除满足当前 Filter 属性设置的记录。使用该选项须将 Filter 属性设置为有效的预定义常量之一。 
    ===================================================AdFilterNone 删除当前筛选条件并恢复查看的所有记录。 
    AdFilterPendingRecords 允许只查看已更改且尚未发送到服务器的记录。只能应用于批更新模式。 
    AdFilterAffectedRecords 允许只查看上一次 Delete、Resync、UpdateBatch 或 CancelBatch 调用所影响的记录。 
    AdFilterFetchedRecords 允许查看当前缓冲区中的记录,即上一次调用从数据库中恢复记录的结果。 
    AdFilterConflictingRecords 允许查看在上一次批更新中失败的记录。 
    只有以上的常量才能删除一个集合的数据
    否则,你只能一条一条删!
      

  21.   

    ferrytang(ferry)的意思是不是不用乐观锁定,用其他的锁定方式,可以一次性删除,望赐教!
      

  22.   

    简单试了一下,把rsUserData.Filter=AdFilterNone  
    然后的delete ad...........照样出错
    受不了了,555
      

  23.   

    dim  rsUserData  as  New  ADODB.RecordSet
      If  rsUserData.State  =  adStateOpen  Then
                                        rsUserData.Close
                                Else
                                        rsUserData.Open  "select  *  from  UserData where OwnerId='"  &    "westwin"  &    "'  ",  cn,  adOpenStatic,  adLockOptimistic
                              End  If
                              if  not  rsUserData.eof  then
                                        rsUserData.Filter=AdFilterNone  
                                        rsUserData.Delete  adAffectGroup
                              end  if
                              rsUserData.Close
    这样呢?
      

  24.   

    改位:
    rsUserData.UpdateBacth
      

  25.   

    [email protected]
    给我你的代码,我给你试试
      

  26.   

    Dim a As New ADODB.Recordset
        a.Open "select * from tb", con, adOpenStatic, adLockBatchOptimistic, adCmdText
        a.Filter = adFilterFetchedRecords
        a.Delete adAffectGroup
        a.UpdateBatch
    已经通过的代码!!
      

  27.   

    ferrytang,你所说的这些代码我全都试过了,没用的,还是只删除一条记录,我把代码发到你信箱里,帮我看看,如何?
      

  28.   

    发好了,你可以去看看先,thx
      

  29.   

    我也遇到过类似的问题,答案是:adodb.recordset 不支持 delete,create,drop 之类的命令,只支持select 命令,其他方法要用connect.execute 等方式执行,这是微软在msdn上早就说明了的。
    不然的话,也用不着为ADO设置那么多对象,只要一种不就可以了吗。
      

  30.   

    adode.recordset不支持delete??????
    是不是有点搞笑?那怎么用delete删除单条纪录可以