Office中国论坛/Access中国论坛

标题: 对书中的做法,我很疑惑!关于删除表中记录的问题 [打印本页]

作者: 123xiaoniu    时间: 2011-6-10 12:35
标题: 对书中的做法,我很疑惑!关于删除表中记录的问题
书中的做法    Private Sub 删除_Click()
          Dim STemp As String
         Dim Rs As ADODB.Recordset
         Set Rs = New ADODB.Recordset
   
          STemp = "DELETE * From 预定记录"
            DoCmd.RunSQL STemp

         Set Rs = Nothing
                End Sub

但为什么我不要那么多的代码,只要其中的两行也可以呢?如 只要这样:
我的做法           Private Sub 删除_Click()
                 STemp = "DELETE * From 预定记录"
                DoCmd.RunSQL STemp
                      End Sub
书中的做法和我的做法二的实质是一样的吗?
书中的做法中 Dim Rs As ADODB.Recordset Set Rs = New ADODB.Recordset 这些代码是否多余了?
为什么我的做法没有创建(定义)一个记录集,也能进行对表的操作呢?是否是隐式还是什么原因呢?
请帮我解疑 谢谢!

作者: roych    时间: 2011-6-10 13:16
本帖最后由 roych 于 2011-6-10 13:17 编辑

书中既然定义了记录集,理论上后续工作会有打开和相关操作的步骤。——如果没有这些后续工作,则没有定义记录集的必要性。
直接执行RunSQL没错,也可以打开记录集后再用delete方法来操作。

作者: caoguangyao    时间: 2011-6-10 13:34
如果说,单纯是删除表记录,你的做法是对的,更为直接的是,变量也无需定义,如:
作者: caoguangyao    时间: 2011-6-10 13:35
Private Sub 删除_Click()
DoCmd.RunSQL "DELETE * From 预定记录"
End Sub

作者: zhuyiwen    时间: 2011-6-10 21:11
不错,就是要这样读书,可以增强自己的判断能力,写出优质的代码。
“尽信书,不如无书”
呵呵。
作者: zhuyiwen    时间: 2011-6-10 21:34
不妨我在这里讲讲,在Access中执行SQL语句的几种方法:
1. Docmd.RunSQL
这是最常见的运行动作查询(定义、删除、更新)的方法,这种方法,不会返回结果集(数据),默认情况下,Access会先提示或警告,它是Access的内置方法。
2.通过ADO对象执行SQL语句
这种方法,通常需要先引用ADO,然后利用ADO连接对象来执行SQL语句。Access有这样一个内置对象的ADO连接对象CurrentProject.Connection,我们可以通过它执行SQL语句或者存储过程,方法如下:
a.有结果集的SQL语句
Dim sSQL As String
sSQL = "SELECT * FROM SomeTable"
Dim rs As ADODB.Recordset
Set rs = CurrentProject.Connection.Execute(sSQL)
结果集保存在名为rs的ADO记录集对象中。这样的结果是只读的,通常用来查找特定的数据。

b.执行动作查询(定义、删除、更新)
Dim sSQL As String
sSQL = "UPDATE TABLE SomeTable SET Field1 = Field1 + 1000, Field2 = 'Sometime update data' WHERE ID > 1000"
Dim n As Long
CurrentProject.Connection.Execute sSQL, n
MsgBox "本次更新了 " & n & " 条记录"
这种操作与Docmd.RunSQL极为类似,但不会有提示和警告。
3.除了可以使用ADO对象执行SQL语句外,DAO对象也可以,使用方法与ADO类似,就不在这重述。
作者: jxjawlh    时间: 2011-6-12 10:14
书有一定的误导,但要认真分析,学习了




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