ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: ldy

[原创] ADO 连接自身内存无法释放内存的一种解决方案

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2012-1-17 11:02 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖已被收录到知识树中,索引项:ADO技术
最近需要学习的地方

TA的精华主题

TA的得分主题

发表于 2012-1-17 11:47 | 显示全部楼层
好贴,学习了!

TA的精华主题

TA的得分主题

发表于 2012-1-17 12:15 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2012-2-23 12:05 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2012-5-31 14:33 | 显示全部楼层
querytable有同样的问题,还有一点就是退出EXCEL后,要计算一个CPU100%很久,EXCEL进程才关闭

TA的精华主题

TA的得分主题

发表于 2013-3-27 17:05 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2013-5-6 19:13 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2013-5-11 20:35 | 显示全部楼层
本帖最后由 kippon 于 2013-5-11 20:37 编辑

下面只对一个表操作,插入20000条数据后,大概70秒左右。
用DB将数据删除后,重新执行, 运行到Set Rst = ConnectRst(strSQL, "Postgre")就处于忙的状态。

    Call FunUpSpeedStart
    Application.DisplayAlerts = False
'    ThisWorkbook.Saved
    ThisWorkbook.ChangeFileAccess xlReadOnly

       For Each tablecell In Range(Replace(importRefEditValue, "$", ""))
            
            strTable = tablecell.Value
            
            Cells(tablecell.Row + 1, tablecell.Column).Select
            Range(Selection, Selection.End(xlToRight)).Select
            Range(Selection, Selection.End(xlDown)).Select
            arr = Selection
            
            importProgressBar.Min = 1
            importProgressBar.Max = UBound(arr)
            
            For iRow = 1 To UBound(arr)
                strKeySQL = ""
                insertValues = ""
                For iCol = 1 To UBound(arr, 2)
                    ' Get data
                    insertValues = insertValues & "'" & arr(iRow + 1, iCol) & "',"
                Next
               
                ' Insert into DB
                strSQL = ""
                strSQL = "INSERT INTO " & strTable & " VALUES(" & Left(insertValues, Len(insertValues) - 1) & ")"

                Set Rst = ConnectRst(strSQL, "Postgre")
               
                'Disconnect from DB
                If Rst.State = 1 Then
                    Rst.Close
                    Set Rst = Nothing
                End If
                Cnn.Close
                Set Cnn = Nothing
               
                importProgressBar.Value = iRow
            Next
        Next

    Call FunUpSpeedEnd
    ThisWorkbook.ChangeFileAccess xlReadWrite
    Application.DisplayAlerts = True


Function ConnectRst(Sql As String, sqlType As String) As ADODB.Recordset
    Dim Cnn As New ADODB.Connection
    Dim Rst As New ADODB.Recordset
   
    On Error Resume Next
'    On Error GoTo l1
   
    Select Case sqlType
        Case "Excel"
            Cnn.Open "provider=microsoft.jet.oledb.4.0;extended properties='excel 8.0;imex=1';data source=" & g_excel_file
        Case "Postgre"
            Cnn.Open "DRIVER={" & g_db_driver & "};SERVER=" & g_db_server & ";UID=" & g_db_uid & ";PWD=" & g_db_pwd & ";DATABASE=" & g_db_name & ";Connect Timeout=720"
    End Select
   
    Rst.Open Sql, Cnn, adOpenKeyset
   
    Set ConnectRst = Rst

End Function
谢谢指导。

TA的精华主题

TA的得分主题

发表于 2013-5-25 21:50 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-5-25 22:31 | 显示全部楼层
Cnn.Open "DRIVER={" & g_db_driver & "};SERVER=" & g_db_server & ";UID=" & g_db_uid & ";PWD=" & g_db_pwd & ";DATABASE=" & g_db_name & ";Connect Timeout=720"

字符串 处理问题
改为如下 前后 各加 两个引号
Cnn.Open """DRIVER={" & g_db_driver & "};SERVER=" & g_db_server & ";UID=" & g_db_uid & ";PWD=" & g_db_pwd & ";DATABASE=" & g_db_name & ";Connect Timeout=720"""

或者
s1= "DRIVER={" & g_db_driver & "};SERVER=" & g_db_server & ";UID=" & g_db_uid & ";PWD=" & g_db_pwd & ";DATABASE=" & g_db_name & ";Connect Timeout=720"
Cnn.Open s1
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-12-23 08:35 , Processed in 0.031877 second(s), 6 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表