设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

[ADO/DAO] 浅谈ADO和DAO的记录集

[复制链接]
跳转到指定楼层
1#
发表于 2023-4-2 18:06:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
很多版友在进阶学习时,可能都对ADO和DAO有些理解不到位的地方,经常在论坛上看到相关的提问。这次我尽量用一个帖子把它们讲清楚。
第1种情况:只引用Access(2003版本默认引用DAO 3.6)。


这种情况下,无需注明DAO,但也无法使用ADO。一旦使用了ADO,将报错:


第2种情况,引用了ADO和DAO。一般来说,如果没注明,会根据优先级来使用,谁排在上面就用谁。

这种情况也是不会报错的。但调整顺序后将报错。

这时候应该怎么改呢?注明DAO就好了。

如果这时候想用ADO怎么办?可以注明,也可以不用注明。例如,这里不注明,也是不会报错的。

结论:
1、如果没有引入ADO,定义时可以不注明前缀。
2、如果引入ADO,不注明前缀时,根据优先级来使用Recorset。
为了避免错误,建议不管是否引入ADO,都应注明ADO或者DAO
当没有注明时,如何判断引入的是ADO或者DAO。
1、看代码块里是否使用new关键字。这个是ADO独有的,DAO无法使用new关键字。
2、看代码块里是否有OpenRecorset,这个是DAO独有的,ADO无法使用该方法。
大家学废了吗?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
发表于 2023-4-3 11:12:17 | 只看该作者
慢慢进阶,底子薄
3#
发表于 2023-4-10 08:38:50 | 只看该作者
谢谢roych的分享。先前还不知道,不引用ADO或DAO也可以这样使用记录集。
当然,对应引用是最好的。
一般情况下:
1)能用ADO解决的,就优先使用ADO解决(如记录操作:增修改)。
2)其次再用DAO(如对象操作:表的字段名)。
3)还有一个ADOX也一定程度上可以替代DAO使用。
4#
发表于 2023-4-12 13:34:16 | 只看该作者
thanks!
回复

使用道具 举报

点击这里给我发消息

5#
发表于 2023-5-10 09:25:41 | 只看该作者
本帖最后由 smileyoufu 于 2023-5-10 09:33 编辑

一个好的使用习惯是,使用关键字,指定是DAO还是ADO,这样就不容易出错:【ADO】
Function ShowSchema()
'列出表
    '目的:使用ADO列出表。
    Dim cn As ADODB.Connection
    Dim rs As ADODB.Recordset
    Dim i As Integer
    Set cn = CurrentProject.Connection
    Set rs = cn.OpenSchema(adSchemaTables, Array(Empty, Empty, Empty, "TABLE"))
    For i = 0 To rs.Fields.Count - 1
        Debug.Print rs.Fields(i).Name
    Next
    Do While Not rs.EOF
        Debug.Print rs.Fields("TABLE_NAME").Value
        rs.MoveNext
    Loop
    rs.Close
    Set rs = Nothing
    Set cn = Nothing
End Function



【DAO】
Function ShowFields(strTable As String)
    '目的:如何读取表的字段。
    '用法:调用显示字段(“表1”)
    Dim db As DAO.Database
    Dim tdf As DAO.TableDef
    Dim fld As DAO.Field

    Set db = CurrentDb()
    Set tdf = db.TableDefs(strTable)
    For Each fld In tdf.Fields
        Debug.Print fld.Name, FieldTypeName(fld)
    Next

    Set fld = Nothing
    Set tdf = Nothing
    Set db = Nothing
End Function

6#
发表于 2023-11-28 08:00:40 | 只看该作者
学习了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 08:14 , Processed in 0.094752 second(s), 30 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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