设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 1519|回复: 0
打印 上一主题 下一主题

那些Excel VBA(ADO)踩过的坑

[复制链接]
跳转到指定楼层
1#
发表于 2022-3-21 23:46:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
前段时间在开发一个Excel VBA,踩了不少坑。现在统一整理一下,供大家参考。
1、跨工作簿更新记录集(Recorset,以下用rst代替)问题。关联两个不同工作簿的工作表时,rst1的值不能更新位rst2的值,只能更新位常量,而且更新数据必须是本工作簿的工作表。
2、与1类似,同样不能使用connection.execute来更新(以下用cnn代替)。cnn也只能更新本工作簿的工作表。
3、当数据连接的data source为csv时,允许读取rst,但同样不支持1和2。
4、如需跨工作簿更新数据,唯一的方法只能时打开工作簿,粘贴记录集(copyfromrecordset)。该方法会覆盖原先数据,因此,一般建议先把源数据复制到本工作簿的备用工作表,修改完毕后再打开目标工作簿,粘贴记录集。
5、开发端可以不安装Access库,通过DAO来创建Access数据库。唯一问题是不方便看表(Access不能像SQL Server那样 show tables,只能遍历)
(我用的标准版就没有Access,Office 2016专业版的价格是1600,公司舍不得装,但有DAO库)
6、Excel能导入数据的Access,DAO不一定能打开(可能报错为不可识别的数据库格式)。因此,如需使用Access,应先在文本编辑器里写好语句,用循环执行。
7、字段使用别名时,不要省略“AS”,通常会有意想不到的报错。表名称使用别名时则不会报错。
8、使用ADO.Recordset函数返回值时,不要关闭cnn和rst。而是在执行操作时关闭。比如:
  1. function xx(byval strSQL as string) as ADODB.recordset
  2. dim cnn as adodb.connection
  3. dim rst as adodb.recordset
  4. cnn.open……
  5. rst.open strSQL,cnn,3,1
  6. set xx=rst
  7. end function


  8. sub test()
  9. dim rst as adodb.recordset
  10. set rst=xx(byval strSQL as string)
  11. rst.addnew
  12. ……
  13. rst.close
  14. end sub
复制代码
暂时先这么多吧。其它有想起来的再贴
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-5-4 04:27 , Processed in 0.078859 second(s), 24 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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