Office中国论坛/Access中国论坛

标题: 浅谈ADO和DAO的记录集 [打印本页]

作者: roych    时间: 2023-4-2 18:06
标题: 浅谈ADO和DAO的记录集
很多版友在进阶学习时,可能都对ADO和DAO有些理解不到位的地方,经常在论坛上看到相关的提问。这次我尽量用一个帖子把它们讲清楚。
第1种情况:只引用Access(2003版本默认引用DAO 3.6)。

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

第2种情况,引用了ADO和DAO。一般来说,如果没注明,会根据优先级来使用,谁排在上面就用谁。
[attach]64494[/attach]
这种情况也是不会报错的。但调整顺序后将报错。
[attach]64495[/attach]
这时候应该怎么改呢?注明DAO就好了。
[attach]64496[/attach]
如果这时候想用ADO怎么办?可以注明,也可以不用注明。例如,这里不注明,也是不会报错的。
[attach]64492[/attach]
结论:
1、如果没有引入ADO,定义时可以不注明前缀。
2、如果引入ADO,不注明前缀时,根据优先级来使用Recorset。
为了避免错误,建议不管是否引入ADO,都应注明ADO或者DAO
当没有注明时,如何判断引入的是ADO或者DAO。
1、看代码块里是否使用new关键字。这个是ADO独有的,DAO无法使用new关键字。
2、看代码块里是否有OpenRecorset,这个是DAO独有的,ADO无法使用该方法。
大家学废了吗?

作者: yanwei82123300    时间: 2023-4-3 11:12
慢慢进阶,底子薄

作者: accben    时间: 2023-4-10 08:38
谢谢roych的分享。先前还不知道,不引用ADO或DAO也可以这样使用记录集。
当然,对应引用是最好的。
一般情况下:
1)能用ADO解决的,就优先使用ADO解决(如记录操作:增修改)。
2)其次再用DAO(如对象操作:表的字段名)。
3)还有一个ADOX也一定程度上可以替代DAO使用。

作者: huanghyd    时间: 2023-4-12 13:34
thanks!
作者: smileyoufu    时间: 2023-5-10 09:25
本帖最后由 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


作者: 人生好运    时间: 2023-11-28 08:00
学习了




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