MS Access - ADO 记录集,使用 SQL 语句检索数据和建表

Posted

技术标签:

【中文标题】MS Access - ADO 记录集,使用 SQL 语句检索数据和建表【英文标题】:MS Access - ADO recordset, using with SQL statement to retrieve data and build table 【发布时间】:2011-05-04 15:53:53 【问题描述】:

假设我有一些如下代码可以从另一个访问文件中提取数据:

Sub ADO_Recordset_OpenTable()
Dim rs As ADODB.Recordset
Dim cn As ADODB.Connection
Dim MyPath As String
MyPath = CurrentProject.Path

Set cn = New ADODB.Connection     
cn.Provider = "Microsoft Jet 4.0 OLE DB Provider"

cn.ConnectionString = "Data Source=C:\Users\Justin\Desktop\ExampleFile.mdb"
cn.Open

Set rs = New ADODB.Recordset
rs.Open "Schedule", cn, adOpenDynamic, adLockReadOnly, adCmdTable

' I would like to at this point build a table within the currentdb file 
'  with the data in the recordset. Either some kind of create table or
'  SQL INSERT?? Just trying to learn how to work with the data set

所以在示例中是我的 cmets。基本上想知道如何从记录集中包含的数据中创建一个表。我想创建一个tabledef?但这是 DAO 对吧?而且我真的不能在例行程序中同时使用 DAO 和 ADO 对吗?

谢谢 贾斯汀

【问题讨论】:

【参考方案1】:

您可以在同一过程中将 ADO 和 DAO 用于不同的对象

您可以创建 DAO.TableDef 并检查记录集的 Fields 集合,创建与每个 rs.Fields(i).Name 和 rs.Fields(i).Type 匹配的新 TableDef 字段

创建表结构 (TableDef) 后,您可以循环遍历记录集行以构建和执行 INSERT 语句以将行值存储在新表中。

但这对我来说似乎工作太多了。我更喜欢 Raj 的 SELECT INTO 建议。但是,由于您已经知道 MDB 的表名和路径,我将首先访问 DoCmd.TransferDatabase,并仅将 ADO 用于 DAO 根本无法执行或无法执行的任务像 ADO 一样方便。

最后,如果您对此的主要兴趣是探索可能性,请查看记录集的 Save 方法。您可以使用adPersistXML 保存,然后将保存的 XML 作为新表导入当前数据库中。见Save Method (ADO)

【讨论】:

哦哇......所以是的,谢谢汉斯!我实际上只是在问,因为我正在玩 ADO 的东西,只是开始使用它,因为我以前使用过 DAO。在工作中,我并没有真正需要将表从一个访问数据库转移到另一个数据库,只是尝试不同的东西来进一步学习 ADO。我喜欢循环的想法,即使你指出可能有更好的方法。所以我必须知道表的确切属性、所有字段和数据类型才能正确完成这项工作?因为我会先建桌子? INSERT 只是复制那里的内容,但是.. 我假设使用记录集将其拉入与将两个对象放在同一个数据库中是不同的,因为 currentdb 会知道所有这些属性,因此使 INSERT INTO 方法可行?这有意义吗? 在哪里可以查看 XML 传输的保存方法?你知道有这样一个例子的资源吗?一如既往地感谢....我也没有忘记仪表板。只要我有时间制作一份空白副本,我就会想办法把它交给你,因为我可以听取你的建议! 是的,我怀疑你在“探索”。 :-) 我为记录集添加了一个链接 .Save Raj 的 SELECT INTO 建议和我的 DoCmd.TransferDatabase 的吸引人之处在于,您不必先构建表结构来保存要导入的数据——它会自动为您完成。我提到的第一种方法需要您检查记录集中的每个字段,并在当前数据库的目标表中创建一个兼容的字段。太努力了,IMO!【参考方案2】:

我做了这个丑陋的方式-解析传入的ADO记录集,构建CREATE TABLE语句并执行它,然后RBAR通过ADO数据集插入到本地表中。

您还可以创建一个直通查询,然后您可以将其用于SELECT * INTO MyNewTable FROM MyPassThroughQuery

【讨论】:

【参考方案3】:

你可以试试ADOX。

【讨论】:

以上是关于MS Access - ADO 记录集,使用 SQL 语句检索数据和建表的主要内容,如果未能解决你的问题,请参考以下文章

如何从 ADO 记录集字段将图片加载到 MS-Access Image 控件中?

MS Access ADO 记录集和二维数组

MS Access/ADO AddNew 方法不附加记录

获取从 PHP ADO 连接返回到 MS-Access DB 的 JSON

将完整的 ADO 记录集插入现有的 ACCESS 表而不使用循环

为啥 ADO 记录集返回的记录比基础 Access 查询多