Office中国论坛/Access中国论坛
标题:
那些Excel VBA(ADO)踩过的坑
[打印本页]
作者:
roych
时间:
2022-3-21 23:46
标题:
那些Excel VBA(ADO)踩过的坑
前段时间在开发一个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。而是在执行操作时关闭。比如:
function xx(byval strSQL as string) as ADODB.recordset
dim cnn as adodb.connection
dim rst as adodb.recordset
cnn.open……
rst.open strSQL,cnn,3,1
set xx=rst
end function
sub test()
dim rst as adodb.recordset
set rst=xx(byval strSQL as string)
rst.addnew
……
rst.close
end sub
复制代码
暂时先这么多吧。其它有想起来的再贴
作者:
十三
时间:
2024-8-27 15:46
学习了
欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/)
Powered by Discuz! X3.3