如何使用记录集数据填充数组

时间:2010-03-08 22:18:37

标签: performance ms-access

我正在尝试将记录集中的数据直接移动到数组中。我知道这是可能的,但具体来说我想在VBA中这样做,因为这是在MS Access 2003中完成的。

通常我会做类似以下的事情来实现这个目标:

    Dim vaData As Variant 
    Dim rst As ADODB.Recordset

    ' Pull data into recordset code here...

    ' Populate the array with the whole recordset.
    vaData = rst.GetRows 

VB和VBA之间存在哪些差异使得这种操作不起作用?

性能问题如何?这是一项“昂贵”的行动吗?

4 个答案:

答案 0 :(得分:18)

以下代码适用于我:

Dim rst           As ADODB.Recordset
Dim vDat          As Variant

Set rst = CurrentProject.Connection.Execute("select * from tblTemp4")
vDat = rst.GetRows

进行调试编译,如上所述,这可能是引用问题。如上所述,有些人更喜欢DAO,但请记住,DAO要求你做一个movelast。 ADO没有。如今,ADO或DAO真正归结为您的优势,性能很少成为问题。 ADO往往对对象模型有点清晰,但无论你的熟人是什么,在大多数情况下都是最好的选择

答案 1 :(得分:2)

在Access中,您可以进行索引搜索。这是最快的方法,甚至比在数组中搜索更快。

int[] AnalyzerInts = new int[5];

如果你只是遍历整个表而不是数组真的是最快的。一个例外:理论上,如果你有一个数字主键,你可以将索引设置为数组中完全相同的位置,所以根本没有rs.find或rs.seek,你可以像数组(索引)一样访问它这真的很快。我没有对索引搜索进行基准测试,但可能会更快。

答案 2 :(得分:1)

您的示例无法正常工作的常见原因是尚未引用适当的ADO库(工具 - >参考,Microsoft ActiveX数据对象x.x库),否则,应该没问题。

答案 3 :(得分:1)

我同意它看起来确实可能是参考问题。

如果您要坚持使用access / jet,那么您可能需要考虑使用DAO,因为所有事情都相同,它会比ADO快。这是一个简单的例子

Public Sub Foo()
Dim aFoo As Variant
Dim db As DAO.Database
Dim rst As DAO.Recordset

Set db = DBEngine(0)(0)
Set rst = db.OpenRecordset("tblFoo")

With rst
    .MoveLast
    .MoveFirst
    aFoo = .GetRows(.RecordCount)
End With

rst.Close
db.Close

End Sub