注册 登录
Office中国论坛/Access中国论坛 返回首页

leolong的个人空间 http://www.office-cn.net/?155046 [收藏] [复制] [分享] [RSS]

日志

DAO(4)

已有 2019 次阅读2009-4-28 19:04 |个人分类:VB相关|

5)缺省的记录集类型

DAO 能够根据记录集的数据源类型,以及打开记录集的方式,自动地设置缺省的记录集类型。因此,一般不需要指定记录集类型。然而,可以在 OpenRecordset 方法中指定 type 参数,以取消缺省的类型。
按照打开记录集的方式,下表中列出了可用的类型和缺省的类型。
■    使用 Database 对象的 OpenRecordset 方法:
    Set rstNew = dbs.OpenRecordset("Data Source")
   
    如果 Data Source 为数据库中的本地表,那么可以用表类型、动态集、快照和动态类型的 Recordset 对象,缺省的记录集类型为表类型。如果 Data Source 为其它类型,那么只能使用动态集和快照类型的 Recordset 对象,动态集类型为缺省的类型。
■    使用 TableDef 对象的 OpenRecordset 方法。
    Set rstNew = tdfTableData.OpenRecordset
   
    如果 tdfTableData 指的是 Microsoft Jet 数据库 (.mdb) 中的表,或者直接打开的 ISAM 数据库,那么所有的五种类型都是可用的,表类型的记录集为缺省的类型。如果 tdfTableData 在 ODBC 数据库中,或者是外部数据库中的链接表,那么只能用动态集和快照类型的 Recordset 对象,动态集类型为缺省类型。
■    使用 QueryDef 对象的 OpenRecordset 方法:
    Set rstNew = qdfQueryData.OpenRecordset
   
    只能使用动态集和快照类型的 Recordset 对象,动态集类型为缺省的类型。
■    使用现有的 Recordset 对象的 OpenRecordset 方法:
    Set rstNew = rstExisting.OpenRecordset
   
    只能使用动态集和快照类型的 Recordset 对象。缺省的类型为现有的记录集的类型,在上例中,即 rstExisting 的类型。

6)具体创建Recordset对象的例子

在下面的例子中可能用到一些还未讲到的东西,但由于使用的比较简单,相信大家还是能够理解。
①以表为基础创建记录集
用基本表创建 Recordset 对象的方法,取决于该表对于当前数据库是本地表,还是位于另一个数据库中的链接表。
   
用本地 Microsoft Jet 数据库中的表创建记录集
下列程序代码使用 OpenRecordset 方法为一个表创建了表类型的 Recordset 对象:
Dim dbs As Database, rstCustomers As Recordset

Set dbs = OpenDatabase("Northwind.mdb")
Set rstCustomers = dbs.OpenRecordset("Customers")
   
请注意,创建表类型的记录集时无需使用 dbOpenTable 常数。如果省略了 type 常数,DAO 将根据数据源和用来创建记录集的对象的类型,选择最适当的 Recordset 对象类型。当从本地表打开记录集时,可以使用表类型的记录集,DAO 将使用它。
②用其它数据库格式的链接表创建记录集
下列程序段为链接的 Paradox 3.x 表创建了一个动态集类型的 Recordset 对象。当从非 Microsoft Jet 数据库中的链接表打开记录集时,表类型是不能使用的,因此,DAO 的使用效率仅次于它的动态集类型。
Dim dbs As Database
Dim tdfNonJetLinked As TableDef
Dim rstTableData As Recordset

' 打开数据库并创建 TableDef。
Set dbs = OpenDatabase("Northwind.mdb")
Set tdfNonJetLinked = dbs.CreateTableDef("PDXAuthor")

' 连接到名为 Author 的 Paradox 表,该表位于数据库
' C:\PDX\Publish。
tdfNonJetLinked.Connect = _
    "Paradox 3.X;DATABASE=C:\PDX\Publish"
tdfNonJetLinked.SourceTableName = "Author"

' 链接该表。
dbs.TableDefs.Append tdfNonJetLinked

' 为该表创建动态集类型的记录集。
Set rstTableData = tdfNonJetLinked.OpenRecordset()
   
如果先打开 Paradox 数据库,则可直接打开 Paradox 表。

③以查询为基础创建记录集
也可以基于存储的选择查询来创建 Recordset 对象。在下例中,“Current Product List”是保存在当前数据库中的一个选择查询。
Dim dbs As Database, rstProducts As Recordset

Set dbs = OpenDatabase("Northwind.mdb")
Set rstProducts = dbs.OpenRecordset _
    ("Current Product List")
   
如果当前并不存在存储的选择查询,OpenRecordset 方法允许使用 SQL 字符串代替查询名。上例可以改写为以下程序段:
Dim dbs As Database, rstProducts As Recordset
Dim strQuerySQL As String

Set dbs = OpenDatabase("Northwind.mdb")
strQuerySQL = "SELECT * FROM Products " _
    & "WHERE Discontinued = No " _
    & "ORDER BY ProductName;"
Set rstProducts = dbs.OpenRecordset(strQuerySQL)
   
这种方法的缺点在于,每次运行时都需要先编译查询字符串,而存储的查询只是在首次保存时编译一次,所以性能较佳。
注意 如果在 Microsoft Jet 中用 SQL 字符串或者存储的查询创建 Recordset 对象,那么,在查询返回了记录集的第一行以后,程序才会继续运行。在查询运行的时候,最好在状态栏中显示出适当的消息。如果使用 ODBCDirect,可以指定 dbRunAsync,它使查询在后台执行,应用程序能够继续执行其它语句。

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

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

GMT+8, 2024-11-25 08:46 , Processed in 0.061923 second(s), 17 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

返回顶部