Office中国论坛/Access中国论坛

标题: 请帮忙看一下这子程序错在哪里 [打印本页]

作者: su_xx    时间: 2008-1-21 11:10
标题: 请帮忙看一下这子程序错在哪里
我现在遇到问题是单击删除产品这个按钮,不删除产品,代码如下.请大家帮忙看一下,问题出在哪里



Private Sub Cmd_删除产品_Click()
On Error GoTo Err_Cmd_删除产品
Dim i As Integer
Dim Stemp As String
Dim Rs As ADODB.Recordset
Set Rs = New ADODB.Recordset
Stemp = "Select * From 物品资料表"
Rs.Open Stemp, CurrentProject.Connection, adOpenKeyset, adLockBatchOptimistic

     If Rs.RecordCount < 1 Then
        Exit Sub
     End If
   
        Rs.MoveFirst
        For i = 1 To Rs.RecordCount
     
            If Rs("产品代码") = Me![Frm_物品资料输入子窗体]![产品代码] Then
         
               Rs.Delete adAffectCurrent         
               Exit For
            Else
              Rs.MoveNext
            End If
        Next i
        MsgBox "产品代码:" & Me![产品代码] & "的资料已经删除完成!", vbOKOnly, "删除完成"
        Me![Frm_物品资料输入子窗体].Requery


Set Rs = Nothing
Exit_Cmd_删除产品:
    Set Rs = Nothing
    Exit Sub
Err_Cmd_删除产品:
    MsgBox Err.Description
    Resume Exit_Cmd_删除产品
End Sub
作者: rjacky    时间: 2008-1-21 11:36
应该是漏了个Rs.update吧

而且在这个例子中,用一个删除查询不是更方便么?即使一定用记录集,也不需要遍历记录的啊,数据多的话,速度慢不少了
作者: su_xx    时间: 2008-1-21 11:43
版主rs.update放在哪里?用删除查询如何做?
我现在是主窗体放一子窗体,子窗体的数据来自物品表,主窗体有子窗体相对应的未绑定的文本框.
删除的时候就是鼠标移到子窗体一条记录上,点删除,然后删除这条记录
作者: rjacky    时间: 2008-1-21 11:53
放在Rs.Delete下面

例如要删除物品表中所有等于子窗体[产品代码]的记录,可以使用这样的删除查询代码:

CurrentDb.Execute ("delete from 物品表名字 where 产品代码='" & me!子窗体名字!产品代码 & "'")
作者: su_xx    时间: 2008-1-21 12:02
Stemp = "DELETE 物品资料表.产品代码 FROM 物品资料表 WHERE (((物品资料表.产品代码)='" & Me.产品代码 & "'))"
                DoCmd.RunSQL Stemp

Private Sub Cmd_删除产品_Click()
On Error GoTo Err_Cmd_删除产品
Dim i As Integer
Dim Stemp As String
Dim Rs As ADODB.Recordset
Set Rs = New ADODB.Recordset
Stemp = "Select * From 物品资料表"
Rs.Open Stemp, CurrentProject.Connection, adOpenKeyset, adLockBatchOptimistic

     If Rs.RecordCount < 1 Then
        Exit Sub
     End If
   
        Rs.MoveFirst
        For i = 1 To Rs.RecordCount
     
            If Rs("产品代码") = Me![Frm_物品资料输入子窗体]![产品代码] Then
         
               ' Rs.Delete adAffectCurrent
              Stemp = "DELETE 物品资料表.产品代码 FROM 物品资料表 WHERE (((物品资料表.产品代码)='" & Me.产品代码 & "'))"
                DoCmd.RunSQL Stemp
         
               Exit For
            Else
              Rs.MoveNext
            End If
        Next i
        MsgBox "产品代码:" & Me![产品代码] & "的资料已经删除完成!", vbOKOnly, "删除完成"
        Me![Frm_物品资料输入子窗体].Requery


Set Rs = Nothing
Exit_Cmd_删除产品:
    Set Rs = Nothing
    Exit Sub
Err_Cmd_删除产品:
    MsgBox Err.Description
    Resume Exit_Cmd_删除产品
End Sub

改成以上的,就可以执行,我就是想不通,为什么用rs.delete删除不了当前记录,而用 docmd.runsql 可以
就是加了rs.update也没有用,点击后还是没有任何反映

同样用版主的CurrentDb.Execute ("delete from 物品资料表 where 产品代码='" & Me![Frm_物品资料输入子窗体]![产品代码] & "'")也能执行


版主能否说明一下我前面的错误在哪里?

[ 本帖最后由 su_xx 于 2008-1-21 12:06 编辑 ]
作者: rjacky    时间: 2008-1-21 12:23
不需要将删除查询加到记录集里面的呀,上传你的例子
作者: su_xx    时间: 2008-1-21 13:19
版主例子就是我1楼发的啊,我的删除查询加到记录集里是因为图方便发贴,我正式这边已经改掉用你的CurrentDB.Excute.

现在问题是为什么用RS.delete,就是把你所说的RS.update加上,程序还是不响应,不执行.




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3