Access 2007中的数据集,虚拟或内存表

时间:2011-08-10 14:53:36

标签: ms-access ms-access-2007 access-vba

有没有办法将数据(例如从XML)加载到数据集 - 临时内存表/记录集,可以链接(绑定)到表单进行预览?我知道.NET有数据集,但Access 2007怎么样?

可以使用XML文件中的数据填充菜单/列表控件,但它不会像连续表单那样扩展。

3 个答案:

答案 0 :(得分:1)

不,Access不知道数据集 但您可以将数据集转换为ADODB.Recordset。 Access知道这一点,您可以将其直接绑定到连续表单。

以下是将数据集转换为ADODB.Recordsets(反之亦然)的代码段:
http://dotnet-snippets.de/dns/ado-recordset-converter-SID525.aspx

代码中的页面和注释都是德语,但即使您不懂德语,代码本身也很容易使用。
您只需要引用Microsoft ActiveX Data Objects 2.8,然后您只需要调用此方法:

public static ADODB.Recordset ConvertDataTableToRecordset(DataTable table)

答案 1 :(得分:1)

以A2000开头的访问表单允许将代码中汇编的记录集分配给表单的记录集,并且包括ADO记录集。因此,如果您从XML文件中打开了ADO记录集,那么您应该能够将其分配给表单。

然而,请注意,这不是我曾经做过的事情,因为我不需要它,而且我知道ADO与DAO记录集存在问题以及人们在执行此类操作时遇到的各种不兼容性事情。

答案 2 :(得分:1)

以下是基于此示例的解决方案:Create In-Memory ADO Recordsets    - 记得在Tools>中首先添加一个引用参考,找到最新的Microsoft ActiveX数据对象

Public Sub createDataSet(mekeNewSet As Boolean)
'requires reference addedd **Microsoft ActiveX Data Object**

Dim rs As ADODB.Recordset
Dim fld As ADODB.Field

Set rs = New ADODB.Recordset
With rs
    .Fields.Append "EmployeeID", adInteger, , adFldKeyColumn
    .Fields.Append "FirstName", adVarChar, 10, adFldMayBeNull
    .Fields.Append "LastName", adVarChar, 20, adFldMayBeNull
    .Fields.Append "Email", adVarChar, 64, adFldMayBeNull
    .Fields.Append "Include", adInteger, , adFldMayBeNull
    .Fields.Append "Selected", adBoolean, , adFldMayBeNull
    .CursorType = adOpenKeyset
    .CursorLocation = adUseClient
    .LockType = adLockPessimistic
    .Open
End With

With rs
    .AddNew
    .Fields(0) = 777
    .Fields(1) = "John"
    .Fields(2) = "Smith"
    .Fields(3) = "john.smith@something.com"
    .Fields(4) = 1
    .Fields(5) = True
    .Update
End With


Set Me.Recordset = rs

End Sub

还可以在VBA中创建一个新类,然后按照本教程构建一个Collection:Using Custom Collections in Microsoft Access

有关如何下载XML数据并将其输入记录器的完整解决方案,请在此处查看: Access VBA - how to download XML file and enter its data into a recordset