ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 1742|回复: 8

[求助] 反复读取access很卡顿

[复制链接]

TA的精华主题

TA的得分主题

发表于 2018-5-23 23:28 | 显示全部楼层 |阅读模式
我想写这么个函数  1.数据都存在一个access数据库里

2.写个函数 例如 function GetAge(name as string)
3.连接数据库 把数据读出来 关闭数据库...关闭连接

上面的模仿网上的教程写好了,但是如果同时读多个人的发现很卡,我怀疑是反复连接、关闭数据库引起的,我这方面还是小白,请各位老师指教

附上代码
  1. Function 填入(name As String, item As String)
  2.     '定义变量
  3.     Dim rsCon As ADODB.Connection
  4.     Dim rsData As ADODB.Recordset
  5.     Dim szConnect As String
  6.     Dim szSQL As String
  7.     Dim value As String
  8.     '连接数据
  9.     Set rsCon = New ADODB.Connection
  10.     Set rsData = New ADODB.Recordset
  11.     szConnect = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
  12.                 "Data Source=C:\Users\Sui\Desktop\Excel\数据库.accdb"
  13.    
  14.     szSQL = "select " & item & " from 人员信息 where(姓名='" & name & "')"
  15.     rsCon.Open szConnect
  16.     rsData.Open szSQL, rsCon, adOpenKeyset, adLockOptimistic
  17.     '读取数据
  18.     If Not rsData.EOF Then
  19.         value = rsData.Fields.item(0)
  20.     Else
  21.         MsgBox "读取失败"
  22.     End If
  23.     '关闭数据库 清楚缓存
  24.     rsData.Close
  25.     Set rsData = Nothing
  26.     rsCon.Close
  27.     Set rsCon = Nothing
  28.     填入 = CStr(value)
  29. End Function
复制代码




TA的精华主题

TA的得分主题

发表于 2018-5-23 23:56 | 显示全部楼层
access本来就是桌面级的数据库,多人读肯定卡,我试过5个进程读同一个库,每个大概卡1秒多
多线程并发的,建议用mysql,
至于sqllite,没用过,感觉不如mysql,mysql有服务端的

TA的精华主题

TA的得分主题

发表于 2018-5-24 07:09 来自手机 | 显示全部楼层
读多人,是多人同时并发吗?如果卡是不是一种是换mssql server,还有或者换成如图iis三层结构。
Screenshot_2018-05-24-07-06-31.png

TA的精华主题

TA的得分主题

发表于 2018-5-24 09:26 | 显示全部楼层
本帖最后由 opiona 于 2018-5-24 09:28 编辑

rsData.Open szSQL, rsCon, adOpenKeyset, adLockOptimistic
adLockOptimistic 改成: adLockReadOnly  
缺省的上锁类型,只读方式上锁允许多个用户同时读取同样的数据,但不能改变数据。

例如:RS.Open StrSQL, CN, 1, 1

TA的精华主题

TA的得分主题

发表于 2018-5-24 09:41 | 显示全部楼层


最消耗资源的是创建连接对象的过程。因此可把rsCon定义为公共变量,


这样在频繁连接数据库时,就能避免频繁创建连接对象,节约时间。


Set rsCon = Nothing是从内存中清除连接对象,这句不能有。
  1. Public rsCon As ADODB.Connection

  2. Sub OpenConnection()
  3.     Dim szConnect As String
  4.     Set rsCon = New ADODB.Connection
  5.     szConnect = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
  6.                 "Data Source=C:\Users\Sui\Desktop\Excel\数据库.accdb"
  7.     rsCon.Open szConnect
  8.     rsCon.Close
  9. End Sub

  10. Function 填入(name As String, item As String)
  11.     Dim rsData As ADODB.Recordset
  12.     Dim szSQL As String
  13.     Dim value As String
  14.     Set rsData = New ADODB.Recordset
  15.     szSQL = "select " & item & " from 人员信息 where(姓名='" & name & "')"
  16.    
  17.     If rsCon Is Nothing Then Call OpenConnection
  18.     If rsCon.State = 0 Then rsCon.Open
  19.    
  20.     rsData.Open szSQL, rsCon, adOpenKeyset, adLockOptimistic
  21.     If Not rsData.EOF Then
  22.         value = rsData.Fields.item(0)
  23.     Else
  24.         MsgBox "读取失败"
  25.     End If

  26.     rsData.Close
  27.     rsCon.Close
  28.     Set rsData = Nothing
  29.     填入 = CStr(value)
  30. End Function

复制代码


TA的精华主题

TA的得分主题

 楼主| 发表于 2018-5-24 10:37 来自手机 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
opiona 发表于 2018-5-24 09:26
rsData.Open szSQL, rsCon, adOpenKeyset, adLockOptimistic
adLockOptimistic 改成: adLockReadOnly  
...

多谢指教!

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-5-24 10:40 来自手机 | 显示全部楼层
ivccav 发表于 2018-5-24 09:41
最消耗资源的是创建连接对象的过程。因此可把rsCon定义为公共变量,



多谢指教! 我也考虑到这个问题了,我试试看。另外再请教两个问题
1.能不能打开excel自动连接好数据库
2.如果最后不擦除内存里的连接 excel关闭后会不会还占着内存?

TA的精华主题

TA的得分主题

发表于 2018-5-24 10:53 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
将创建数据库连接调整到主过程,function用变量传入数据库连接,Function 填入(name As String, item As String,cnn as object)

TA的精华主题

TA的得分主题

发表于 2018-5-24 11:02 | 显示全部楼层
本帖最后由 ivccav 于 2018-5-24 11:03 编辑
b76234567 发表于 2018-5-24 10:40
多谢指教! 我也考虑到这个问题了,我试试看。另外再请教两个问题
1.能不能打开excel自动连接好数据库
...

1.能不能打开excel自动连接好数据库

连接资源是很珍贵的资源,为什么要打开文件就连接?一台电脑只能有10个连接(XP系统)。在需要的时候再连接!要想打开文件就连接,在Workbook_Open中调用连接就行了,但是完全没有必要。且用完就应该关闭连接,免得占用资源。

2.如果最后不擦除内存里的连接 excel关闭后会不会还占着内存?

关闭 excel后系统会自动回收内存。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

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

GMT+8, 2024-4-24 06:14 , Processed in 0.047928 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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