【问题标题】:Passing current ADO Record to another function将当前 ADO 记录传递给另一个函数
【发布时间】:2013-03-17 13:05:48
【问题描述】:

也许我在 .NET 中花费了太多时间,但我无法轻松地将 ADO RecordSet 的当前 Record 传递给另一个方法,这似乎很奇怪。

Private Sub ProcessData(data As ADODB.Recordset)
    While (Not data.EOF)
        ProcessRecord ([data.CurrentRecord]) ' <-- There is no CurrentRecord property.
        data.MoveNext        
    Wend
End Sub

Private Sub ProcessRecord(singleRecord As ADODB.Record)
    ' Do stuff.
End Sub

我在该主题上找到的少量信息说要传递整个 RecordSet 或创建一个新记录并手动将每个字段复制到它。

StackOverflow,有没有更好的方法?

【问题讨论】:

  • 记录不是记录集,您可以选择单个记录作为记录集,也可以将记录集中的一条或多条记录作为数组 (GetRows) 或字符串 (GetString) 传递。

标签: vba vb6 adodb


【解决方案1】:

就个人而言,我会将整个记录集传递给 ProcessRecord 子例程。记录集总是通过引用传递,因此传递记录集没有开销(性能或内存消耗)。只要确保您没有移动到 ProcessRecord 子例程中的下一条记录。

【讨论】:

  • 我很可能只是传递整个 RecordSet,只是 ProcessRecord 不知道所有数据。我努力只为方法提供他们需要的东西。
【解决方案2】:

您可以使用 GetRows() 方法将数据加载到数组中,然后让 ProcessRecord 仅处理该数组,但这会“断开”该方法与数据集的连接,这可能不是您想要的。

GetRows() 方法采用可选参数来指定要获取多少行、从哪里开始以及要获取的字段

所以:

ProcessRecord(data.GetRows(1,adBookmarkCurrent))

应该对所有领域都这样做

【讨论】:

  • 感谢您回答问题。
【解决方案3】:

不幸的是,没有..您不能从 Recordset 中提取单个 Record.. 正如 G. Mastros 所说,通过引用传递整个记录集并使用当前记录没有额外的开销,所以您不妨这样做

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-31
    • 1970-01-01
    • 2019-07-25
    • 2012-09-25
    • 2020-10-03
    • 1970-01-01
    相关资源
    最近更新 更多