gpt4 book ai didi

对 VBA 数组的 SQL 查询

转载 作者:行者123 更新时间:2023-12-04 12:50:52 24 4
gpt4 key购买 nike

正如标题所示,我正在研究将查询内容存储到数组中的不同方法。我一直在尝试不同的方法来做这件事,但似乎这些方法中的大多数在它们的输出中都是正确的。这当然是因为我对如何适本地完成这一点缺乏了解,所以经过一段时间的实验,我决定问什么是最好的方法?到目前为止,我将与您分享我的一些方法,您可以看到我的调查在哪里找到了我。

Dim MyArray() As Variant
MyArray = rst.GetRows(rst.RecordCount)

这没关系,但它垂直而不是水平存储所有信息。有没有办法翻转它?那会是通过使用 ReDim 吗?或者这是因为行存储在数组维度中,因此它们自然是垂直的?
        Index = 0
Do While Not rst.EOF
ReDim Preserve MyArray(1, Index)
MyArray(0, Index) = CStr(rst.Fields(0).Value)

'Safety check to make sure the value isn't null (was having problems before)
If rst.Fields(1).Value <> vbNullString Then
MyArray(1, Index) = CStr(rst.Fields(1).Value)
End If
Index = Index + 1
rst.MoveNext
Loop

sheet.Range("a1:ba10000").Value = MyArray

这再次垂直存储了东西,但没有正确输出记录,实际上只提取每条记录的前两列信息,其余的输出为#N/A#。我认为我更接近我最初的方法,但我决定进行实验可能会让我找到某个地方。

你有什么建议或者可以指出我正确的方向吗?

最佳答案

我认为使用以下方法将结果转储到工作表会更快:

Sheet1.Range("A1").CopyFromRecordset rst
然后将该转储的结果(来自范围)存储到一个数组中。如果它不像您喜欢的那样垂直或水平,则快速复制/粘贴特殊转置将非常快速地完成它,然后再将其放回数组中。
我只是建议,因为您的记录集似乎相当大(2x10000),所以像您一样进行迭代将非常耗时,将结果转储到工作表,操作并重新拾取它们应该非常很快。

更新(多年后)。看起来可以转储到数组中。就像是:
Dim arr
rst.MoveFirst
arr = rst.GetRows
这将允许在将数据发送到工作簿之前对记录集(在数组中)进行编程操作。

关于对 VBA 数组的 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38874815/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com