ADO, DAO, DoCmd.RunSQL 三种方式用哪一种?

对ACCESS来进行操作,特别是SQL语句的执行,ACCESS中提供了多种手段。 ADO, DAO 以及 docmd.runsql

以下摘自 Microsoft Access 2003 Help
在 Microsoft Access 2002 和更高版本中使用 ActiveX 数据对象

Microsoft Access 2002 提供了三种对象模型,用于通过使用 Visual Basic 来创建、维护和管理 Access 2002 数据库及其相关数据。
Microsoft ActiveX 数据对象 (ADO)ADO 包含了在给定数据源中创建、维护和删除记录所需的对象。
Microsoft ADO Ext. for DDL and Security (ADOX)ADOX 除了提供管理安全性所需的对象之外,还提供了新建数据库及其所含对象所需的“数据定义语言 (DDL)”对象。
Microsoft Jet and Replication Objects 2.5 Library (JRO)
因为 ADO 对象是为了与 Microsoft Jet 数据库以及其他许多数据库一起使用而设计的,所以 Jet 所特有的功能被分解到 JRO 库中。
下表列出每个对象模型所提供的功能并与 DAO 相比较。
功能DAOADO1ADOX2JRO
(仅限于 MDB)
创建记录集XX  
编辑“启动”属性XX**  
支持 ANSI92 SQL*** XX 
创建表X X 
新建数据库X X* 
编辑现有表属性X X 
创建表关系X X* 
新建用户/组X X 
编辑安全设置X X* 
对新的 Jet 4.0 Decimal 数据类型的支持  X 
对列数据的“压缩”属性的支持  X 
编辑已保存、基本 SQL 查询或视图X X* 
创建只能通过代码访问的永久查询。  X* 
创建通过数据库容器/UI 和代码访问的查询。X   
压缩/编码数据库X  X4
刷新缓存X  X
使得数据库可同步复制X  X3
制作数据库副本X  X3
使副本同步X  X3
编辑数据库属性X   
创建自定义数据库属性X   
编辑表列属性X   

* 仅当使用 Microsoft Access 数据库 (.mdb) 时才可用。以后的 SQL 提供程序版本可能会在 Microsoft Access 项目 (.adp) 中提供该功能。
** 仅当使用 Access 项目时才可用。
*** 尽管 Jet 支持某些 ANSI 92 SQL,但它仍然不能完全遵守 ANSI92。
1 使用 Connection 对象来引用数据库
2 使用 Catalog 对象来引用数据库
3 使用 Replica 对象来引用数据库
4 使用 JetEngine 对象来引用数据库
注释  与 DAO 不同,ADO 和 ADOX 对象可以在非 Jet 数据库中执行所标出的操作(只要这些数据库的提供程序支持该操作)。
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
帮我优化以下代码,不使用ADO ,然后每次导出不同的10000条记录至新的EXECL文件中:Dim strSQL As String Dim strFileName As String Dim i As Long Dim batchSize As Long '每批次导出的记录数 Dim batchCount As Long '批次计数器 Dim exportCount As Long '导出计数器 '设置导出文件路径和文件名 strFileName = "C:\Users\icd\Desktop\流水分割\" batchSize = 10000 '每批次导出的记录数 DoCmd.SetWarnings False '暂时关闭Access的警告信息 DoCmd.RunSQL "SELECT 导出数据.* INTO ExportData FROM 导出数据" '将表导入临时表ExportData DoCmd.SetWarnings True '重新开启Access的警告信息 Set rs = CurrentDb.OpenRecordset("SELECT * FROM ExportData", dbOpenSnapshot) '打开临时表ExportData '循环导出数据 Do While Not rs.EOF If exportCount Mod batchSize = 0 Then '每批次导出到一个新的文件 If exportCount <> 0 Then DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, "ExportData", strFileName & Format(batchCount, "000000") & ".xlsx", True End If batchCount = batchCount + 1 End If exportCount = exportCount + 1 rs.MoveNext Loop '导出最后一份文件 If exportCount Mod batchSize <> 0 Then DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, "ExportData", strFileName & Format(batchCount, "000000") & ".xlsx", True End If rs.Close Set rs = Nothing DoCmd.SetWarnings False '暂时关闭Access的警告信息 DoCmd.RunSQL "DROP TABLE ExportData" '删除临时表ExportData DoCmd.RunSQL "DELETE 导出数据.* FROM 导出数据" '删除导出数据内容 DoCmd.SetWarnings True '重新开启Access的警告信息
最新发布
06-09
以下是优化后的代码,使用了Recordset来处理数据,同时每次导出10000条记录到新的Excel文件中: Dim strSQL As String Dim strFileName As String Dim i As Long Dim batchSize As Long '每批次导出的记录数 Dim batchCount As Long '批次计数器 Dim exportCount As Long '导出计数器 Dim rs As Recordset '设置导出文件路径和文件名 strFileName = "C:\Users\icd\Desktop\流水分割\" batchSize = 10000 '每批次导出的记录数 '将表导入临时表ExportData DoCmd.SetWarnings False '暂时关闭Access的警告信息 DoCmd.RunSQL "SELECT 导出数据.* INTO ExportData FROM 导出数据" DoCmd.SetWarnings True '重新开启Access的警告信息 'SQL语句,使用Recordset来处理数据 strSQL = "SELECT * FROM ExportData" Set rs = CurrentDb.OpenRecordset(strSQL, dbOpenSnapshot) '循环导出数据 Do While Not rs.EOF If exportCount Mod batchSize = 0 Then '每批次导出到一个新的文件 If exportCount <> 0 Then DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, "ExportData", strFileName & Format(batchCount, "000000") & ".xlsx", True End If batchCount = batchCount + 1 End If exportCount = exportCount + 1 rs.MoveNext Loop '导出最后一份文件 If exportCount Mod batchSize <> 0 Then DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, "ExportData", strFileName & Format(batchCount, "000000") & ".xlsx", True End If '关闭Recordset和删除临时表ExportData rs.Close Set rs = Nothing DoCmd.SetWarnings False '暂时关闭Access的警告信息 DoCmd.RunSQL "DROP TABLE ExportData" '删除临时表ExportData DoCmd.RunSQL "DELETE 导出数据.* FROM 导出数据" '删除导出数据内容 DoCmd.SetWarnings True '重新开启Access的警告信息
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值