Office中国论坛/Access中国论坛

标题: 为何:命令或操作"DeleteRecord"当前不可用? [打印本页]

作者: 紫风    时间: 2011-7-21 12:26
标题: 为何:命令或操作"DeleteRecord"当前不可用?
本帖最后由 紫风 于 2011-7-21 12:33 编辑

如题,为什么在cmdDel单击后出现错误提示呢?
代码如下:
Docmd.RunCommand accmdDeleteRecord

补充一下,如果单独打开这个窗体时,是可以删除记录的,但是当它作为子窗体时,就删除不了记录。

作者: 轻风    时间: 2011-7-21 13:16
本帖最后由 轻风 于 2011-7-21 13:24 编辑

发上实例

作者: todaynew    时间: 2011-7-21 17:49
紫风 发表于 2011-7-21 12:26
如题,为什么在cmdDel单击后出现错误提示呢?
代码如下:
Docmd.RunCommand accmdDeleteRecord

需先让子窗体控件获得焦点。比如:

me.子窗体.SetFocus
Docmd.RunCommand accmdDeleteRecord


作者: 紫风    时间: 2011-7-21 20:27
感谢轻风和today new 版主的帮忙,问题解决了,不过我用的是delete * from tblxxx where id = ![id]

作者: todaynew    时间: 2011-7-21 20:40
紫风 发表于 2011-7-21 20:27
感谢轻风和today new 版主的帮忙,问题解决了,不过我用的是delete * from tblxxx where id = !

可以尝试用Docmd.RunCommand accmdDeleteRecord方法试试,开辟一条新途径。注意:凡是用Docmd.RunCommand 对子窗体的记录进行删除、跳转等操作,都需要先将焦点移到子窗体控件上。

作者: 紫风    时间: 2011-7-21 21:02
todaynew 发表于 2011-7-21 20:40
可以尝试用Docmd.RunCommand accmdDeleteRecord方法试试,开辟一条新途径。注意:凡是用Docmd.RunCommand ...

哦……原来是这样,明白了!
谢谢版主!!
不过,为什么有这么简单的方法,我们还要用DELETE呢?还是说区别在于:如果用DELETE的话,不用先把焦点放到子窗体上?
作者: todaynew    时间: 2011-7-21 21:12
本帖最后由 todaynew 于 2011-7-21 21:17 编辑
紫风 发表于 2011-7-21 21:02
哦……原来是这样,明白了!
谢谢版主!!
不过,为什么有这么简单的方法,我们还要用DELETE呢?还是说 ...


No!

用操作查询(包括删除查询、更新查询、追加查询等)是用SQL直接对数据表进行操作;用AOD或DAO进行删除、更新、追加也是直接对数据表进行操作。但用Docmd.RunCommand 则不然,它操作的对象是窗体,也就说通过窗体来间接的操作数据表。

因此上,对数据表的操作大体可以分为直接和间接的两种方法,这两种方法各有其优劣。对数据表的直接操作,运算速度要快些。但对窗体的操作有一个好处,就是不必知道表或查询是谁,于是在代码上就简单一些,代码的通用性也会好一些。总体来说,需要针对具体问题来考虑采用什么方法。

由于sql是针对表的操作,与窗体无关,所以窗体是否具有焦点不影响操作。而Docmd.RunCommand 是针对窗体的,所以必须先要有焦点,也就是告诉Access我将对哪个窗体进行操作。此外Docmd.RunCommand 对记录的操作对应于窗体的快捷键中的操作。



作者: 紫风    时间: 2011-7-22 08:36
todaynew 发表于 2011-7-21 21:12
No!

用操作查询(包括删除查询、更新查询、追加查询等)是用SQL直接对数据表进行操作;用AOD或DAO进 ...

谢谢版主的耐心!原来是这样!
作者: yanghua1900363    时间: 2011-7-28 11:29
谢谢 先收集了




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