设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 1148|回复: 6
打印 上一主题 下一主题

[ADO/DAO] 请帮忙看一下这子程序错在哪里

[复制链接]
跳转到指定楼层
1#
发表于 2008-1-21 11:10:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我现在遇到问题是单击删除产品这个按钮,不删除产品,代码如下.请大家帮忙看一下,问题出在哪里



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
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
发表于 2008-1-21 11:36:46 | 只看该作者
应该是漏了个Rs.update吧

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

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

CurrentDb.Execute ("delete from 物品表名字 where 产品代码='" & me!子窗体名字!产品代码 & "'")
5#
 楼主| 发表于 2008-1-21 12:02:09 | 只看该作者
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 编辑 ]
6#
发表于 2008-1-21 12:23:18 | 只看该作者
不需要将删除查询加到记录集里面的呀,上传你的例子
7#
 楼主| 发表于 2008-1-21 13:19:41 | 只看该作者
版主例子就是我1楼发的啊,我的删除查询加到记录集里是因为图方便发贴,我正式这边已经改掉用你的CurrentDB.Excute.

现在问题是为什么用RS.delete,就是把你所说的RS.update加上,程序还是不响应,不执行.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-5-2 13:29 , Processed in 0.099398 second(s), 30 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表