weixin_57992912 2021-05-07 14:31 采纳率: 0%
浏览 86

求助求助!VBA+ADO+recordset+CopyFromRecordset很慢,匹配一个要十几

求助求助!VBA+ADO+recordset+CopyFromRecordset很慢,匹配一个要十几秒,数据源表有四五十万行,代码如图?
  • 写回答

1条回答 默认 最新

  • 码农阿豪@新空间代码工作室 Java领域优质创作者 2024-07-12 20:42
    关注
    让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
    对于处理大量数据时速度较慢的问题,可以尝试以下方法来优化VBA代码:
    1. 使用ADODB.Command对象执行SQL语句,而不是通过ADODB.Recordset来获取数据。这样可以减少内存的使用,提高效率。可以通过以下示例代码来执行SQL语句:
    Dim conn As ADODB.Connection
    Dim cmd As ADODB.Command
    Dim rs As ADODB.Recordset
    Set conn = New ADODB.Connection
    conn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\yourdatabase.accdb"
    Set cmd = New ADODB.Command
    cmd.ActiveConnection = conn
    cmd.CommandText = "SELECT * FROM YourTable WHERE Condition = 'yourCondition'"
    cmd.CommandType = adCmdText
    Set rs = cmd.Execute
    
    1. 将查询结果分批处理,而不是一次性将全部数据加载到内存中。可以通过每次获取一定数量的数据来降低内存占用,提高速度。以下是一个示例代码:
    Dim conn As ADODB.Connection
    Dim rs As ADODB.Recordset
    Set conn = New ADODB.Connection
    conn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\yourdatabase.accdb"
    Set rs = New ADODB.Recordset
    rs.Open "SELECT * FROM YourTable", conn, adOpenForwardOnly, adLockReadOnly
    Do Until rs.EOF
        '处理数据
        rs.MoveNext
    Loop
    rs.Close
    
    1. 使用适当的索引来优化查询速度,确保查询的字段上有合适的索引。可以通过在数据库表中创建索引来加快查询速度,降低整体数据处理的时间。 通过以上优化方法,可以提高VBA处理大量数据时的效率和速度。希望对您有帮助。
    评论

报告相同问题?

悬赏问题

  • ¥30 Matlab打开默认名称带有/的光谱数据
  • ¥50 easyExcel模板 动态单元格合并列
  • ¥15 res.rows如何取值使用
  • ¥15 在odoo17开发环境中,怎么实现库存管理系统,或独立模块设计与AGV小车对接?开发方面应如何设计和开发?请详细解释MES或WMS在与AGV小车对接时需完成的设计和开发
  • ¥15 CSP算法实现EEG特征提取,哪一步错了?
  • ¥15 游戏盾如何溯源服务器真实ip?需要30个字。后面的字是凑数的
  • ¥15 vue3前端取消收藏的不会引用collectId
  • ¥15 delphi7 HMAC_SHA256方式加密
  • ¥15 关于#qt#的问题:我想实现qcustomplot完成坐标轴
  • ¥15 下列c语言代码为何输出了多余的空格