我正在尝试将记录集中的数据直接移动到数组中。我知道这是可能的,但具体来说我想在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之间存在哪些差异使得这种操作不起作用?
性能问题如何?这是一项“昂贵”的行动吗?
答案 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